记一次教科书式的SSRF

在获取0xNull论坛邀请码时做的靶场

Posted by 看不尽的尘埃 on August 2, 2019

前言

在微信群里看到0xNull论坛开放注册啦,虽然我不知道这个论坛,但是也打开了链接,帖子上说”此次开放注册并不是真正意义上的开放注册,我们在VPS上布置了一个易受攻击的应用。将会在2019/8/1 - 2019/8-7 这几天中持续开放”,于是有了本文,很荣幸,我是做出来的第一人!

过程

帖子中告诉了测试地址:http://118.24.198.151/

信息搜集

在没打开测试地址前,我通过云悉先查了一下网站的指纹信息,知道了是服务器的架构是Debian,Apache 2.4.25。 图片

其次是打开测试地址,看到了北漂鱼的logo,巧了,这不是一起自己也搭建过的vip视频解析网站嘛! 图片

尝试默认配置

既然知道了建站程序是北漂鱼,那么就来试试默认的配置,如果没记错,默认后台地址只要在测试地址后面加上admin就可以! 没错哦,后台地址是: http://118.24.198.151/admin/login.php 页面上还提示了默认账号密码,这样太贴心了吧,尝试过后…tql,默认账号/密码没变! 图片

登录成功后,发现更加确切的服务器信息,架构是LAMP,还有php函数是否支持啥的。 图片

看了下后台,就全局设置页面可能可以获取到webshell,随便插了一句php代码,提示修改失败,没权限啊! 图片

峰回路转遇SSRF

既然后台没思路了,那就换一个突破口吧,ctf套路,直接加上www.zip

http://118.24.198.151/www.zip

嘻嘻,自动打开了迅雷7,Lucky! 图片 下载源码后,我又下载了一下Github上原版的源码,通过md5和修改日期,快速确定了被修改过的文件位置! 图片 title.php文件被修改过,title.php文件的代码:

<?php
header('Content-Type:text/html;charset=utf-8');
$url=$_POST['titurl'];
//$url = 'http://www.beipy.com/';//url链接地址
echo curl($url);
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
}
?>
<?php
header('Content-Type:text/html;charset=utf-8');
$url=$_POST['titurl'];
//$url = 'http://www.beipy.com/';//url链接地址
echo curl($url);
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
}
?>

一看这个代码,充满了ctf套路,curl_exec函数不就是ssrf嘛! 结合ceye测试了一下,没毛病,实锤这里存在SSRF。 图片

这还是一个有回显的ssrf,成功读系统文件: 图片

通过SSRF漏洞进行端口扫描: 图片 这让给我马上想到了以前看过的文章,ssrf+redis getshell,于是尝试了6379端口,果然是这个思路! 图片 外网连接是6379端口是连不上的,对外不开放,因此需要结合SSRF!

图片

一开始想着的是通过计划任务直接反弹shell的,结果尝试了好久,失败告终(困扰了我2小时,头疼)… 于是想着写shell吧,猜测网站绝对路径,默认路径/var/www/html: 图片

论SSRF漏洞,gopher协议必不可少,使用工具生成gopher协议的代码: 图片 工具生成的代码直接提交的话是不行的,还需要对代码进行url编码后post提交: 图片 成功写入一句话木马,通过print输出了a的md5值: 图片

查看当前用户是www-data用户: x图片

文末

原文已被0xNul论坛收录,该文在原文基础上修改过,原文地址如下:http://wiki.0xnull.org/book/2-22