[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe

源码

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.
?>
  • 题目给了提示,请在本地访问hint.php。
  • 代码不算难懂:就是只能使用这些协议:http|https|gopher|dict,而且还进行了过滤不严的127.0.0.1,直接使用0.0.0.0绕过

    \[ssrf绕过#绕过127.0.0.1\]

    访问得到
php 复制代码
<?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']);
}
  • 尝试绕过死亡exit(),但是/var目录没有写了权限,/tmp目录有写入权限
  • 而且这里给了提示:redis pass is root 告诉我们密码是root

主从复制

\[redis-主从复制\]

原理

  • 字面意思,redis为了数据更改方便,有这一模式,主机的内容更改会导致从机的内容跟着更改。
  • 这时我们将自己的服务主机设置为主机,目标的设置为从机,则从机会有主机的执行脚本,从而rce
  • 详细的参考博客
    redis主从复制

使用

准备工作

需要使用

https://github.com/xmsec/redis-ssrfhttps://github.com/n0b0dyCN/redis-rogue-server 下的exp.so文件

使用过程
  • 在自己的服务主机里把这两个py文件和exp.so传至同一目录下,也可以开个小号使用buu内网
更改ssrf-redis.py内容
  • 这里只需要更改4处内容就行
    lhost改为自己或者buu内网的IP,command改为执行的命令

    更改ip绕过本题的waf

    根据提示填入passwd为root
生成payload启动服务

只是在kali下演示一下,自己主机得到的回显

使用payload得到flag,要进行二次编码

反弹shell

参考下一篇文章
[网鼎杯 2020 玄武组]SSRFMe-反弹shell

相关推荐
白帽黑客沐瑶25 分钟前
【网络安全就业】信息安全专业的就业前景(非常详细)零基础入门到精通,收藏这篇就够了
网络·安全·web安全·计算机·程序员·编程·网络安全就业
_落纸31 分钟前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
Alice-YUE1 小时前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha1 小时前
SpringBoot
笔记·学习
Hello_Embed10 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中10 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Grassto11 小时前
RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
笔记
Magnetic_h11 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
lubiii_12 小时前
网络安全渗透测试第一步信息收集
安全·web安全·网络安全
周周记笔记14 小时前
学习笔记:第一个Python程序
笔记·学习