
观察代码发现先对协议进行了过滤,只能使用http/s协议
再看正则匹配发现过滤了本地ip,但是正则少了个参数,不知道是不是写错了
先传payload:url=http://127.0.0.1/flag.php,发现页面无回显,没有显示hacker也没flag
再试下绕过正则,payload:url=http://0/flag.php

依旧无回显,看了下题解,发现没问题啊,怀疑是不是服务器问题
url='http://d923595c-147d-4d29-b8be-38f463295667.challenge.ctf.show/'data={ "url":'http://0/flag.php'}headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",}response=requests.post(url,data=data,headers=headers,verify=False)print(response.text)用python写个简单脚本发送相同payload后正确返回flag,抓包python请求发现bp的contentlength比实际多了2字符(发现多字符数的原因时写完payload后又空了两行),改为手动计算后正确返回flag


这次正确使用正则过滤
构造payload:url=http://2130706433/flag.php 十进制 进制绕过
也就可以通过0,linux中默认本机ip,还有127.233.122.233回环地址

不能出现1或0,。也不能有,进制准换失效,回环地址也不能利用,考虑重定向或者找到一个特殊域名解析到本地ip
由于还没有自己的域名和vps,所以搞不了,看题解发现可以构造url=http://sudo.cc/flag.php也可以访问本地文件

限制主机地址长度,用0代替

将域名转换为ip地址,再检验是否为公网IP,依旧可以通过302跳转,因为这里没对参数内容过滤,所以借用第三方网站httpbin,构造payload:http://httpbin.org/redirect-to?url=http://127.0.0.1/flag.php


正则匹配开头http://ctf.,结尾show,通过@将攻击域名放在后面解析

5。

网站具有查询库存的功能

抓包后发现调用了一个 api 接口,地址为内网 IP 地址

访问当前内网地址的 admin 路径发现不行,爆破其他内网地址进行内网探测

探测出 192.168.0.102 存在 admin 路径

限定主机名只能是固定主机名

使用@将主机名解析为后面被允许的主机名,发现被允许通过

使用#将后面主机名截断发现被拦

将#双重 url 编码绕过
7.基于 shellshock 的盲 ssrf

将 user-agent 头改为 shellshock 的 payload,user-agent 能 被后端服务器导出放到环境变量里使得 shellshock 能被正确解析,使用 nslookup 执行 dns 外带将信息导出
对内网地址进行爆破