红队打靶: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; do
    curl "$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; do
    status_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来搞定:

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

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

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值