2020易博霖CTFWeb2--SSRF题解

Web2

SSRF

(靶机服务器已关闭,因此没有截图)

观察题目url
index.php?file=WTNSbWFXMWhaMlV1YW5Cbg==
将参数file 进行两次base64解密得ctfimage.jpg
网页输出了上述图片
尝试读取index.php源代码,将file改为YVc1a1pYZ3VjR2h3(index.php两次base64加密)

转到后发现图片无法显示,猜测应该是文件按图片的形式输出,因为index.php不是图片文件所以无法显示
查看网页页面元素,将图片的base64编码复制后解码,得到index.php原内容
2020易博霖CTFWeb2--SSRF题解发现提示:Hint: hal0flagi5here.php

用上述方法得到该php文件源码
2020易博霖CTFWeb2--SSRF题解
分析代码,这里有几个重要条件:
1.filter_var($argv[1],FILTER_VALIDATE_URL)
绕过filter_var( )

2.preg_match(’/happyctf.com/,/',r[‘host’])
绕过preg_match()

3.file_get_contents()
用该函数读取url,在之前filter_var( )绕过中发现http://协议无法使用
这里存在一个php的特性
2020易博霖CTFWeb2--SSRF题解
此处参考带佬题解
题目要求为服务器根目录下的flag.txt文件
构造payload

url=0://happyctf.com/…/…/…/…/…/…/flag.txt
这里不知道Web服务的路径,用多个…/返回根目录,多余的…/会被忽略
最后得到flag

写题解过程中还简单了解了几个协议:
1.文件包含和伪协议
2.file:/// 协议格式:
scheme:[//[user:[email protected]]host[:port]][/]path[?query][#fragment]
file协议打开本地文件,所以file://host/path的host省略得file:///
参考文章