正式开始之前先普及一下SSRF漏洞的相关协议(普及内容摘自大佬博客:https://www.anquanke.com/post/id/262430#h3-4)
File协议
读取本地文件用的
HTTP协议
探测一下内网活着的主机(但是很多不会开Http协议,没多大用)
抓一下包,丢BP里面探测一下就行(我自己靶场没写那逻辑,写个思路就行)
Dict协议
结合端口探测内网服务
比如看看Mysql(这个是需要授权导致的错误,后面会讲)
看看Redis(未授权访问成功的样子)
Gopher协议
Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;
gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议
接下来开始本文中正式内容:我们先用file协议读取 第十五周的-有回显的SSRF 这一关所给的出的flag所存在的路径:/opt/flag.txt(第十五周的实验就是直接使用file协议读取flag文件直接拿到flag的)
并没有得到flag,查看源码
在源码里看到有个testbook.php,点击访问,跳转到一个源代码页面,把url中的view-source: ,去掉之后访问
也还是没有得到有用信息,和第一步得到的信息类似,这属于是做了无用功了。。。第一步直接进行抓包看看有什么发现
提示说post传一个admin参数,也没说赋值是多少,就先传个admin=1试试
成功了,看到了下一个提示,说是以本地访问才能得到flag,那就是进行伪造,ip的伪造有三种,分别是X-Forwarded-For、X-Client-IP、X-Real-IP ,我首先尝试的是xff伪造,发现并没有用,然后试了X-Client-IP才成功的
看到了flag,其实这不是真的flag,做过第十五周的话可以发现这事第十五周实验的flag,可能是我一开始输入的是上一关flag的路径才出现这样的结果。还可以看到提示让我们读source.txt,那就去网站访问一下
在source.txt中可以发现本关flag的路径是/opt/flag1.txt,比上一关的flag路径多了个1。回到bp,加上个1,点击go,得到属于本关的flag