GlasgowSmile-v2描述:
获取主机DHCP地址
使用到工具
扫描主机开放服务
从上图可知:80,22端口对外开放,8080端口含有过滤规则。
浏览器访问80端口
http://192.168.33.136
很无奈打开发现只有一张图片,并没有多余的东西。到这里只能Fuzzing目录文件。
首先使用Kali自带的dirb进行目录扫描:
正如上图看到的扫描结果并没有得到有用的东西,这个工具不行,显然要更换工具继续干。常用的WEB目录扫描工具有:Dirsearch、DirBuster 、御剑等。
这里我使用dirsearch工具,具体用法请自行百度。
root@kali:~/dirsearch# python3 dirsearch.py-e php,txt,zip -u http://192.168.33.136
很幸运,扫描得到了一些文件。浏览器访问http://192.168.33.136/todo.txt
根据提示,该站点可能存在自动化脚本,继续爆破扫描。工具我使用wfuzz,字典使用kali自带目录/usr/share/wordlists/下的rockyou.txt.gz,并解压出来。
root@kali:~/dirsearch# ls/usr/share/wordlists/
root@kali:~# wfuzz -w rockyou.txthttp://192.168.33.136/FUZZ.sh
经过一段时间的等待,得到一个joke.sh的自动化脚本文件。
浏览器访问
http://192.168.33.136/joke.sh
下载后打开后得到内容如下图:
浏览器访问如上地址:
http://192.168.33.136/Glasgow---Smile2/
从访问后可以获取该站点CMS系统是 Drupal8,含有登录和注册页面。
尝试了一番并没有成功登陆进入,只好返回看看已有的信息。
把自动化脚本仔细阅读,猜测该站点可能存在pcap数据包文件,进一步扫描。
root@kali:~# wfuzz -w rockyou.txt --hc404,400 http://192.168.33.136/FUZZ.pcap
很快得到一个smileyface.pcap文件。
浏览器访问
http://192.168.33.136/smileyface.pcap
下载后得到如下文件
跟踪数据流
看到包含Authorization: Basic内容,很明显需要进行base64解密。
尝试登陆网站
值得庆祝的是成功登陆进入后台。既然到了这里,我们肯定想进一步拿到shell权限。
仔细想想我们还有一个CMS的指纹信息没有利用。先搜索查看Drupal 8有没有已知漏洞利用。最终检索到一个集成好的RCE。
把该project克隆到本地并利用
root@kali:~/Drupalgeddon2#./drupalgeddon2.rbhttp://192.168.33.136/Glasgow---Smile2/
当然也可以POST含有漏洞的URI并自己构造pyload,并使用nc反弹
如果做过靶场环境的小伙伴们,应该都比较清楚所谓的flag都在相应的家目录下。因此进一步进入/home目录。
从上图可知,获取信息的顺序是riddler -> bane ->carnage -> venom -> root
为了搞明白nmap扫描出的结果8080为什么被过滤,查看运行的端口服务:
使用常用的socat工具实现tcp端口转发,进一步在外部机器可以访问,方便寻找信息。
socat -d TCP4-LISTEN:12345,reuseaddr,fork TCP4:127.0.0.1:8080
确认12345端口已被打开:
浏览器访问:
http://192.168.33.136:12345/
查看网页源代码:
分析可能存在文件包含(LFI)漏洞,从而查看nginx相关配置文件。
根据上图路径推测,可能需要至少向上4层:
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/passwd
从passwd文件得到的用户都是不可以进行远程登陆,从而进一步查看nginx的配置文件,获取可能用价值的信息。
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/nginx/nginx.conf
从上图得知nginx站点配置目录在/etc/nginx/sites-enabled/下。进一步去查看站点配置文件:
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/nginx/sites-enabled/default.conf
从上图得知站点默认首页index.php文件访问路径
得到一个谜语,填写正确的谜底将会得到riddler用户密码。(通过搜索可知谜底)
使用 su riddler用户切换
文件查看得到theworldmustbeburned的提示,数据被处理过。
把burn文件内容重新代码格式化,以便阅读。
<? php
function grdl($q0) {
$b1 = fopen($q0, 'r') or die();
$a2 = 0;
while (!feof($b1)) {
$t3 = fgets($b1);
$a2++;
}
rewind($b1);
$s4 = 0;
$n5 = rand(0, $a2);
while ((!feof($b1)) && ($s4 <= $n5)) {
if ($x6 = fgets($b1, 1048576)) {
$s4++;
}
}
fclose($b1) or die();
return $x6;
}
function gws($n7) {
$j8 = str_split($n7);
$a9 = 0;
foreach($j8 as $m10) {
$a9 += ord($m10);
}
return $a9;
}
function encrypt($c11, $j12, $e13) {
$f14 = true;
$l15 = gws($c11);
$q16 = gws($j12);
$f17 = str_split($e13);
$a18 = "";
foreach($f17 as $m10) {
$f14 = !$f14;
$p19 = $l15;
if ($f14) {
$p19 = $q16;
}
$a18. = ord($m10) + $p19;
if ($f14) {
$a18. = "A";
} else {
$a18. = "F";
}
}
return $a18;
}
$q0 = "jokerinthepack";
$e13 = readline("Enter the string to encrypt: ");
$c11 = trim(grdl($q0));
$j12 = trim(grdl($q0));
print "\n";
print "Your keys:";
print "\n";
print "Key 1: ".$c11;
print "\n";
print "Key 2: ".$j12;
print "\n";
$a18 = trim(encrypt($c11, $j12, $e13));
print "Encrypted string:".$a18.
"\n\n\n"; ? >
代码解读:
PHP代码转化为Python代码
代码审计逆向解密脚本:
运行Python脚本,输入message.txt文件中的Encrypted string进行解密。
解密得到后bane的密码,从而使用bane进行登录。使用sudo -l 查看当前用户权限。
得知有一个make可以提权到carnage用户。使用GTFOBins搜索提权方法。
不断搜寻可以查看的文件
没有看出什么头绪,想使用sudo -l但是不知道用户密码。从而想到使用pspy查看运行的进程。使用bane用户进行sftp登陆,上传pspy文件查看进程。
转到/opt/get_out/相应目录,查询到一个help.txt文件。其文大概意思是:zip文件被删除后会被恢复。
删除devil.zip文件,发现devil.zip真的被恢复了。然而我删除我自己建立的压缩文件却没有被恢复。思考了一段时间进行解压查看,提示告警:没有zipfile文件。
进行了一段时间的搜索得知可能是Python调用zip库实现此压缩包恢复功能。
因为这是会自动调用的python脚本,从而嵌入反弹程序。
此时再次删除devil.zip文件,成功实现反弹效果。并使用python 一句话获取标准shell
搜索查看可以阅读的文件。
搜索查看有没有suid权限
使用cat去逐个查看文件,打开发现有乱码。是二进制文件,使用strings进行打开。
发现gothamwillburn4中有使用cat命令查看batman。因此使用bash进行提权。
再次执行./ gothamwillburn4文件,发现权限更改成root。