wargame.kr login_filtering

题目链接 wargame  


$id=mysql_real_escape_string(trim($_POST['id']));

$ps=mysql_real_escape_string(trim($_POST['ps']));

$row=mysql_fetch_array(mysql_query("select * from user where id='$id' and ps=md5('$ps')"));

if(isset($row['id'])){

if($id=='guest'||$id=='blueh4g'){

echo"your account is blocked";

}else{

echo"login ok"."";

echo"Password : ".$key;

}

题目可以查看源代码如上,意思是说要在用户密码表里找到记录,而且用户名不能是guest和blueh4g 。刚开始以为是一条SQL注入题目,后来发现有mysql_real_escape_string 防护了。百思不得其解。难度是弱口令题目?

查看网页源码发现贴出了guest/guest 账号密码,但是PHP又限制了id 不能是guest 怎么办?答案是填写 GUEST和guest就可以过了。 原来MySQL查询的= 是不区分大小写的,本题考察的其实是MySQL。做个试验吧:

mysql> select * from users where name="GUEST" and password = 'guest';

+-------+----------+

| name  | password |

+-------+----------+

| guest | guest    |

+-------+----------+

1 row in set (0.00 sec)

mysql> select * from users where name="Guest" and password = 'guest';

+-------+----------+

| name  | password |

+-------+----------+

| guest | guest    |

+-------+----------+

1 row in set (0.00 sec)

总结:

1)做WEB题目第一点还是要看网页本身源码、还有包头;很多时候注释里会给提示。

2)MySQL 查询不区分大小写

3)mysql_real_escape_string 可以预防SQL注入,但是要注意编码。宽字节绕过漏洞

你可能感兴趣的:(wargame.kr login_filtering)