BUUCTF WEB 3 – 极客大挑战 2019 EasySQL、RoarCTF 2019 Easy Calc
极客大挑战 2019 EasySQL
访问页面
使用万能密码admin' or 1=1 #
获取到flag,BP中小将空格和#进行url编码。
flag{b13702f0-8ac7-4d95-bd84-ec597691f349}
RoarCTF 2019 Easy Calc
这题目还真是第一次见,这道题布置了一个容器级(nginx)的waf和代码级的黑名单策略,waf过滤了所有的字母和绝大多数符号,所以第一步一定是过waf。
首先解释一下PHP的字符串解析特性
这是别人对PHP字符串解析漏洞的理解,
我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:
/news.php?%20news[id%00=42″+AND+1=0–
上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。
HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
利用php在接受参数时的特点,只需要在变量前添加一个不可见字符,waf不对此变量进行过滤。
如下图使用%20num%20=1+1
即可绕过waf,题目绕过waf后给出了题源码如下。
从源码可以看到黑名单对一些字进行了过滤,如果有黑名单的字符,直接die,没有,使用eval命令执行输入的代码,答案就很显而易见了,使用下图流量包可获取根目录列表
使用下图流量包获取flag值。
flag{87268ccc-2ca4-445a-882d-cd765d893f9b}