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

红队打靶:DR4G0N B4LL打靶思路详解(vulnhub)

目录

写在开头

第一步:主机发现

第二步:Web渗透

第三步:curl批量访问(无果)

第四步:Vulnhub目录发现

第五步: 图片隐写破解

第六步:ssh私钥登录

第七步:变量劫持提权

创建提权文件ps

环境变量劫持

总结与思考

写在开头

 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。靶机DR4G0N B4LL:1本身非常简单,但红队笔记大佬从尽可能减少渗透痕迹的角度进行了操作,对我们的渗透思路也有一定启发(尽可能减少大量扫描)。本文涉及到的知识点包括:常规Web渗透思路、使用脚本进行字符串处理、curl批量访问、图片隐写、变量劫持提权等。完整的打靶思路详见:

「红队笔记」靶机精讲:Dr4g0nB4ll - Vulnhub靶机,简单靶机的高级打法,大量拓展,新手必看。_哔哩哔哩_bilibili

  本文针对的靶机源于vulnhub,详情见:

Dr4g0n b4ll: 1 ~ VulnHub

 下载链接见:

https://download.vulnhub.com/dr4g0nb4ll/Dr4g0n-b4ll.zip

 靶机要求使用VMware Workstation 16以上的版本,将靶机的网络设置为NAT模式,靶机打开启动界面如下图所示:

第一步:主机发现

  首先进行主机发现,这里不细讲了。我kali的ip是10.10.10.128,所在网段是10.10.10.0/24。主机发现命令如下:

nmap -sn 10.10.10.0/24

  靶机启动前后对比,可以确认我的靶机IP是10.10.10.157。按照常规思路,接下来应该进行端口扫描,但红队笔记提到,在渗透过程中,可以尽可能减少痕迹,因此跳过了端口扫描的步骤,直接猜测是否含有对应的端口。常规端口扫描的命令如下:

nmap -sT --min-rate 10000 10.10.10.157      //TCP全端口扫描
nmap -sT -sC -sV -O -p22,80 10.10.10.157      //用默认脚本扫描服务信息、操作系统版本
nmap --script=vuln -p22,80 10.10.10.157  //漏洞脚本扫描
nmap -sU --top-ports 20 10.10.10.157    //探测UDP最常见的20个端口的开放情况

  我就跟着红队笔记大佬的思路,不进行扫描了,直接猜测存在Web(80端口或8080端口开放)服务,下一步进行Web渗透。

第二步:Web渗透

   一般这种靶机最大的暴露面还是Web,这里直接浏览器访问靶机IP看看80端口的情况:

 果然存在Web页面,渗透过程对于Web页面要重点关注:页面本身的信息、外链链接、子目录、源代码等。发现有个标题叫DRAGON BALL龙珠,一个日本动画(题外话:我小时候没看过这个,但还记得当年小学蹲在地上打圆片玩的时候,许多圆片上就印着七龙珠),继续往下翻,看看有没有什么有价值的信息:

    后面基本上都在介绍龙珠这个动漫,好像与渗透关系不大。但是还有个标题写着:

hi this Aj's i'm creating this ctf. this my first vulnhub

  提到了一个名字Aj,可能后续会用到。然后还提到这个靶机是个CTF,那也就是说渗透过程很可能会有一些CTF的套路,很可能会有图片隐写。同时提到了一个网站ComicBook.com,不过这个是个有关漫画的互联网站点,我暂时忽略,然后F12访问源代码:

 源代码并不长,没有什么CMS,就是最基本的HTML骨架,连js都没有。几个图片的链接都是互联网站点的,意味着存在图片隐写的概率很低,暂时不考虑。特别要关注滚动条,貌似这个源代码有很多行呀,于是往下继续滚动发现在第647行藏着一行备注:

VWtaS1FsSXdPVTlKUlVwQ1ZFVjNQUT09

  这看起来可能是个base64编码,解码试试(-n参数表示不在输出末尾添加\n换行符,在这里其实无所谓,但习惯加上-n更加保险)

echo -n 'VWtaS1FsSXdPVTlKUlVwQ1ZFVjNQUT09' | base64 -d

  解出来还是个base64编码,总之经过三层解码,最终获得了明文:

echo -n 'VWtaS1FsSXdPVTlKUlVwQ1ZFVjNQUT09' | base64 -d | base64 -d | base64 -d

明文就是DRAGON BALL,这可能是某个密码,某个子目录,某个用户名等等,我们可以尝试把 DRAGON BALL作为子目录,用浏览器访问:

 还真是个子目录。其实在robots.txt页面也会有提示,告诉咱们要关注子目录。 

总而言之,DRAGON BALL子目录有个secret.txt,还有个子目录Vulnhub,首先先看看这个secret吧:

 好像又是一大堆子目录,看名字我们肯定关心/username和/passwd这种,拼接到url上,发现并没有对应目录,试了好几行、不同的子目录都不行。

 在真实情况中,需要我们测试访问的url可能会很多,逐一手工访问耗时耗力,不如写个脚本,用curl访问。

第三步:curl批量访问(无果)

   首先肯定是要把这个secret.txt文件wget下来:

wget http://10.10.10.157/DRAGON%20BALL/secret.txt 

vim打开看看,发现结尾有两行空行,我们把它干掉:

 然后就是字符串处理了,我们需要对这17个目录前面添加url:http://10.10.10.157、http://10.10.10.157/DRAGON%20BALL、 http://10.10.10.157/DRAGON%20BALL/Vulnhub三种情况。当然可以用python写个脚本啥的,此处我们用sed工具进行处理:

sed 's|^http://10.10.10.157|' secret.txt | tee -a secret_ext.txt
sed 's|^http://10.10.10.157/DRAGON%20BALL|' secret.txt | tee -a secret_ext.txt
sed 's|^http://10.10.10.157/DRAGON%20BALL/Vulnhub|' secret.txt | tee -a secret_ext.txt

 sed是一种流编辑器,将secret.txt文件中每一行的开头(^ 表示行的开头)替换(s表示替换)为 http://10.10.10.157。这样,整个文件的每一行都在行首添加了指定的URL。tee命令用于从标准输入读取数据并写入标准输出,同时保存一份副本到文件。-a选项表示在文件末尾追加而不是覆盖。因此,这个命令将sed处理后的输出保存到secret_ext.txt文件,并将其同时输出到标准输出。最终的secret_ext.txt文件如下(共17*3=51行,下图仅展示部分):

注意到url中不能有空格,手动把三处空格替换为url编码的%20。接下来就可以用curl访问了。

while IFS= read -r url; docurl "$url"
done < secret_ext.txt

这个bash命令的作用是逐行读取secret_ext.txt文件,将每行的内容存储在url变量中,然后使用curl命令访问每个URL(分三行还是写在一行都行)。 

while IFS= read -r url; do: 这是一个while循环,它会读取secret_ext.txt文件的每一行,并将内容存储在变量url中。IFS=用于防止在读取行时发生空格截断,而-r用于防止反斜杠转义。

curl "$url": 在循环的每次迭代中,使用curl命令来访问存储在url变量中的URL。"$url"用于确保URL被正确传递,即使URL中包含空格或其他特殊字符。

done < secret_ext.txt: 表示while循环从secret_ext.txt文件中读取数据。 < 符号用于将文件内容重定向到循环中。

 这样确实实现了批量访问,但回显结果太长了,不太方便我们观察,可以再改进一下,是我们能够明显的看到每个url访问的http_code:

while IFS= read -r url; dostatus_code=$(curl -s -o /dev/null -w "%{http_code}" "$url")echo "URL: $url | HTTP Code: $status_code"
done < secret_ext.txt

改进的命令使用-s选项使curl命令在执行时保持静默,-o /dev/null选项将输出定向到/dev/null,而-w "%{http_code}"选项用于输出HTTP状态码。

结尾添加grep -v 404,查找不是404的情况,很遗憾,所有的子目录都是404:

对于secret.txt,我们目前是一无所获,接下来看看Vulnhub目录吧。 

第四步:Vulnhub目录发现

查看Vulnhub目录,发现有两个文件,一个图片aj.jpg,还有个貌似登录界面login.html:

 看看这个aj.jpg,感觉像是个黑客写病毒的图片,很炫酷,感觉这个图片可能会有玄机(隐写)。把他wget下来:

 然后再看看登录页面login.html:

 好像也没有啥特别的,标题有个xmen,可能是个用户名,同时下面还有个download跳转,点一下就会跳到aj,jpg(去掉url中的.,否则404)

第五步: 图片隐写破解

  看来接下来就是尝试aj.jpg有没有什么特殊信息了。 用exiftool看看这个文件:

 看不出什么特殊的,用stegseek试试这个图片里面有无隐藏文件(初次使用stegseek需要安装,直接按照命令行提示安装即可):

 发现使用passphrase为love即可找到图片中隐藏的id_rsa文件,提取为aj.jpg.out,这貌似是个私钥,cat一下:

 确实是个私钥!那很可能可以ssh登录。

第六步:ssh私钥登录

 特别注意,既然是私钥文件,应当把权限设置为600。

chmod 600 aj.jpg.out

然后使用私钥登录ssh,问题是这个是谁的私钥呢?我们目前可以尝试的潜在用户名有:root、DRAGON BALL、xmen,最后发现这是xmen的私钥:

ip a和uname -a确认靶机信息:

在xmen当前目录即可看到用户的flag:

 同时发现家目录还有个script目录,进去看看:

 这还是个root的目录,里面有两个文件,属主和属组都是root,可能能够提权!

第七步:变量劫持提权

先查看一下demo.c:

 该代码将进程的用户ID和组ID均修改为0,即root,然后调用系统命令ps,用于查看当前进程的状态。然后我们再运行一下shell,看看有什么效果:

  发现运行shell文件和运行ps查看进程的效果基本一致,猜测可执行文件shell的源代码就是demo.c。注意shell这个文件是有s位的,即具有SUID(Set User ID)权限,文件所有者是root用户,那么当其他用户(例如xmen)执行该文件时,该文件将以root用户的身份运行,而不是执行者的身份。我们该如何利用这一点提权呢,特别关注demo.c中执行了system('ps'),其中的ps并未给出绝对路径,默认情况下肯定是指查看系统进程的ps,即下面这个ps:

  但如果我们创建一个同名的文件ps,内容是"/bin/bash",并对这个变量ps作劫持,使得system('ps')中的ps不是指向/usr/bin/ps,而是指向我们创建的内容是"/bin/sh"的文件,最终运行这个shell文件即可以root身份执行/bin/bash,相当于提权了(见上一段黑体字)。

创建提权文件ps

 因此首先我们要创建一个可执行文件,文件名是ps,内容是"/bin/bash"。在哪里创建问题都可以,但当前目录是root组的,没有创建新文件的权限。

  因此我们可以在家目录创建,也可以在/tmp中创建。这里就选在家目录:

echo "/bin/bash" > ps

注意添加执行权限:

chmod +x ps

  这样我们就创建好了文件ps,下面就要劫持环境变量,使得demo.c中system('ps')中的ps指向我们刚刚创建的可执行文件ps。

环境变量劫持

 可以先看一下当前的环境变量是啥:

   可以看到,在环境变量中,/usr/bin目录位于第二个,如果我们能将当前目录放在这个目录之前(即第二个之前),系统寻找ps时就会先找到当前目录的ps(即"/bin/sh")。 解决这个问题很简单,我们只要修改环境变量,将当前目录.放置在第一个即可:

export PATH=.:$PATH

  这样就实现了劫持。下面只要在含有自己创建的ps文件的目录运行shell,即可实现提权。也就是在当前家目录运行shell即可以root权限运行/bin/bash,实现提权:

 root的flag位于/root目录下:

 至此打靶完成。

总结与思考

  这个靶机仅从打靶的角度来看,算是个简单的靶机。但同时红队笔记大佬从尽可能减少渗透痕迹的角度来进行操作,避免了大规模的扫描和目录爆破,也是一种很好的思路。涉及到的知识点包括:常规Web渗透思路、使用脚本进行字符串处理、curl批量访问、stegseek图片隐写破解、变量劫持提权等。总结一下打靶过程:

1.主机发现,确定靶机IP。

2.Web渗透,源代码中找到提示词,发现是个子目录,目录中又有子目录Vulnhub和文件secret.txt

3.secret.txt疑似又是子目录,curl批量访问无果。

4.Vulnhub目录中有个存在隐写的图片,破解出ssh私钥。

5.ssh私钥登录,获得初始立足点。

6.变量劫持实现提权。

  同时在进行curl批量访问的时候,涉及到许多bash脚本,不用死记硬背,现在有了chatgpt,可以很容易的让chatgpt来搞定:

 打靶到这里就结束了。最近好久没打靶和写博客了,临近找工作,又要搞毕设,略显迷茫,找不到方向。感觉网安行业对于我这种研究生才转来的菜鸟很不友好,将来做什么还是未知数。以后还会更新一些打靶和渗透相关的博客,可能也会开个新的专栏写与网安无关的方向。

  恳请各位读者多多点赞关注支持啦。学渗透还是要实操呀,如果读者有什么网安相关的问题也欢迎关注评论区留言讨论,我一定知无不言! 

相关文章:

红队打靶:DR4G0N B4LL打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现 第二步&#xff1a;Web渗透 第三步&#xff1a;curl批量访问&#xff08;无果&#xff09; 第四步&#xff1a;Vulnhub目录发现 第五步&#xff1a; 图片隐写破解 第六步&#xff1a;ssh私钥登录 第七步&#xff1a;变量劫持提…...

SQL Server添加用户登录

我们可以模拟一下让这个数据库可以给其它人使用 1、在计算机中添加一个新用户TeacherWang 2、在Sql Server中添加该计算机用户的登录权限 exec sp_grantlogin LAPTOP-61GDB2Q7\TeacherWang -- 之后这个计算机用户也可以登录数据库了 3、添加数据库的登录用户和密码&#xff0…...

pytest如何在类的方法之间共享变量?

在pytest中&#xff0c;setup_class是一个特殊的方法&#xff0c;它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。 当你在setup_class中使用self来修改类属性时&#xff0c;你实际上是在修改类的一个实例属性。在Pyth…...

配置前端项目到 github-pages

Quickstart for GitHub Pages - GitHub Docs...

VSCode使用教程

文章目录 VSCode简介VSCode下载安装配置语言环境CJavaPython VSCode偏好配置中文配置界面颜色字体大小快捷键 个人常规喜好 VSCode简介 VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代…...

vscode——本地配置(C和C++环境配置)(2)

vscode——本地配置&#xff08;2&#xff09; 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置&#xff0c;如果没看过上一次的文章&#xff0c;大家可以点击&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…...

【从零开始学习重要知识点 | 第一篇】快速了解什么是幂等性以及常见解决方案

前言&#xff1a; 当我们在设计和实现分布式系统时&#xff0c;幂等性是一个非常重要的概念。幂等性可以简单地理解为&#xff1a;对于同一操作&#xff0c;不论执行多少次&#xff0c;产生的影响都是相同的。这个概念在分布式系统中非常重要&#xff0c;因为在这种环境下&…...

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…...

尚硅谷webpack5笔记2

Loader 原理 loader 概念 帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。 loader 执行顺序 分类pre: 前置 loadernormal: 普通 loaderinline: 内联 loaderpost: 后置 loader执行顺序4 类 loader 的执行优级为:pre > normal > inline > post 。相…...

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池&#xff0c;之前的电池容量明显变小了很多&#xff0c;而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中&#xff0c;您可以通过以下步骤来查看笔记本电脑电池的健康状况&#xff1a; 打开命令提示符&…...

算法--动态规划(线性DP、区间DP)

这里写目录标题 tip数组下标从0开始还是从1开始 数学三角形介绍算法思想例题代码 最长上升子序列介绍算法思想例题代码 最长公共子序列介绍算法思想例题代码 tip 数组下标从0开始还是从1开始 如果代码中涉及到数组下标为i-1&#xff08;有时候哪怕不是同一个数组也符合情况&am…...

【ArcGIS】统计格网中不同土地利用类型占比

基于ArcGIS统计格网中不同土地利用类型占比 数据准备ArcGIS操作步骤1、创建渔网&#xff08;Create Fishnet&#xff09;2、建立唯一标识3、选择格网4、提取不同类别土地利用类型5、各类用地面积计算 参考另&#xff1a;可能出现的问题总结Q1&#xff1a;ArcGIS获取唯一值&…...

算法竞赛实用板子

一、声明 自用版参考acwing&#xff0c;致力于实用、好用&#xff0c;板子中有个人理解&#xff0c;持续更新。 二、开板 1.快排 void quick_sort(int q[],int l,int r) {if(l>r)return; //出口int il-1,jr1,xq[lr>>1]; //分治方法while(i<j){do i;w…...

RPA中国 x UiPath | 第六届RPA极客挑战赛,3月16日上海开赛!

随着人工智能技术的不断进步以及数字化转型的深入&#xff0c;企业对于高效、精准、自动化的业务流程需求日益迫切。RPA技术作为连接人类工作与机器操作的桥梁&#xff0c;正逐渐从规则驱动发展为智能决策的助手。 由RPA中国联合UiPath共同主办的【第六届RPA极客挑战赛】将于2…...

算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和

哈希表基础知识 哈希表 哈希表关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff1b;数组就是哈希表的一种 一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在班级里&#xff1a; 要枚举的话时间复杂度是O(n)&…...

『python爬虫』xpath变化导致无法找到指定元素(持续更新中~)

目录 xpath变化的原因1. 语言设置2. 窗口大小n. 待添加~总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 xpath变化的原因 XPath 可能会出现变化的原因有很多&#xff0c;以下是一些常见的情况&#xff1a; 网页…...

人大金仓数据库Kingbase服务SQL基础操作手册

1 kingbase服务 1.1 查看kingbase数据库服务进程 ps -ef|grep kingbase1.2 命令启动kingbase数据库服务 # /opt/Kingbase/ES/V8 为金仓安装目录 # /opt/Kingbase/ES/V8/data 为金仓数据目录 # sys_ctl是数据库服务器启停命令&#xff0c;通过-D选项来来指定数据库数据目录 #…...

赎金信00

题目链接 赎金信 题目描述 注意点 magazine中的每个字符只能在ransomNote中使用一次ransomNote和magazine由小写英文字母组成 解答思路 因为ransomNote和magazine由小写英文字母组成&#xff0c;所以使用大小为26的数组存储magazine中a~z对应出现的次数&#xff0c;ransom…...

如何运行github上的项目

为了讲明白这个过程&#xff0c;特意做了一个相当来说比较好读懂的原理图&#xff0c;希望和我一样初学的小伙伴也能很快上手哈&#x1f60a; 在Github中找到想要部署的项目&#xff0c;这里以BartoszJarocki/CV&#xff08;线上简历&#x1f4c4;&#xff09;项目为例 先从头…...

机器学习-02-机器学习算法分类以及在各行各业的应用

总结 本系列是机器学习课程的第02篇&#xff0c;主要介绍机器学习算法分类以及在各行各业的应用 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 定义问题&#xff08;Problem Definition&#xff09; -> 数据收集(Data Collection) -> 数据分割(Data…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

八、【ESP32开发全栈指南:UDP客户端】

1. 环境准备 安装ESP-IDF v4.4 (官方指南)确保Python 3.7 和Git已安装 2. 创建项目 idf.py create-project udp_client cd udp_client3. 完整优化代码 (main/main.c) #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&…...

timestamp时间戳转换工具

作为一名程序员&#xff0c;一款高效的 在线转换工具 &#xff08;在线时间戳转换 计算器 字节单位转换 json格式化&#xff09;必不可少&#xff01;https://jsons.top 排查问题时非常痛的点: 经常在秒级、毫秒级、字符串格式的时间单位来回转换&#xff0c;于是决定手撸一个…...

NLP常用工具包

✨做一次按NLP项目常见工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…...