一、内网访问
直接访问flag.php
二、伪协议读取文件
因为网站的目录一般都在/var/www/html/,所以我们直接使用file伪协议访问flag.php就可以。在url中直接访问,这次就跟上一题不一样了,返回的不是flag而是???,应该是做了处理,所以使用burpsuite抓包查看
三、端口扫描
dict协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源,在SSRF中如果可以使用此协议,就可以轻易获取目标服务器端口上运行的服务版本等信息(远程利用)
直接使用burpsuite爆破,设置端口范围8000-9000
爆破出端口之后,直接访问127.0.0.1:端口
返回flag
四、POST请求
我们首先知道已经有了302.php,而且应该是需要我们利用SSRF发一个POST的请求。SSRF发送POST请求,自然而然就想到了gopher://
gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息
同时题目中也提到了curl,而curl正好是支持gopher协议的,因此这题大概率就是利用gopher发送一个POST请求,然后获得flag
先试着访问一下127.0.0.1/flag.php
,得到了一个key
因为题目说准备了一个302.php
,那么看一下127.0.0.1/flag.php
。。。。。。
Ending
做到这里放弃了,一个是因为CTFHub的技能树基本搞完了,还有一个原因就是我已经碰到好几次题目环境出了点问题(所以到这里就没再刷CTFHub了),开始以为是我自己操作不对,后面去搜别人的WP,发现就是环境的问题,基于这两点原因,我在CTFHub的学习目前就告一段落了,转战其他地方,冲冲冲
不过还是加一点内容吧
前面用到了file://
和dict://
这两个URL中的伪协议,在这里把其他的几个协议也记录下来
sftp://
在这里,Sftp代表SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol),这是一种与SSH打包在一起的单独协议,它运行在安全连接上,并以类似的方式进行工作
gopher://
Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息
ldap://或ldaps:// 或ldapi://
LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议
tftp://
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的基于lockstep机制的文件传输协议,它允许客户端从远程主机获取文件或将文件上传至远程主机
伪协议的防御
1.禁止跳转
2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准
3.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp:// 等引起的问题
4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)
5.限制请求的端口为http常用的端口,比如 80、443、8080、8090
6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态