[SQL绕过]md5($str,true)类型绕过----题目来源CTFSHOW---web9

起初不管输入什么都没有回显,访问robots.txt
在这里插入图片描述
下载查看源代码

<?php
        $flag="";
		$password=$_POST['password'];
		if(strlen($password)>10){
			die("password error");
		}
		$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
		$result=mysqli_query($con,$sql);
			if(mysqli_num_rows($result)>0){
					while($row=mysqli_fetch_assoc($result)){
						 echo "登陆成功<br>";
						 echo $flag;
					 }
			}
    ?>

$sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'";
将密码转换成16进制的hex值以后,再将其转换成字符串后包含’ ‘or ’ 6’

SELECT * FROM admin WHERE pass=’ ‘or ’ 6’

很明显可以注入了。

难点就在如何寻找这样的字符串,网上有
提供两个字符串: ffifdyop、129581926211651571912466741651878684928
但题目有长度限制,所以输入ffifdyop即可获取flag

再转成字符串:’ ’ ‘or’ 6

解析:存在 or 即代码的两边有一边为真既可以绕过,其实为垃圾代码没有任何用的。

or 后面有6,非零值即为真。既可以成功绕过。

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/107813286