CTF002_后台登录




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



解:


① 首先想到的是SQL注入,试了下不行

happysneaker.com


② F12

happysneaker.com


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

主要是这句:

$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";

这里用了 md5() 函数,第二参数是 TRUE,因此是将用户输入的字符串编码成了 原始16位二进制格式 进行查询,这个二进制不是0101这种二进制,而是:①将用户输入的字符串先转换成 32位16进制格式 ,②然后再转换成字符串(原始MD5哈希)。是两个步骤得到的;


MD5函数语法:

happysneaker.com


其实 32位十六进制格式 的一大串代码,数字两两合在一起就是16位十六进制的数,然后 十六进制 转 十进制 得到最终16位,再查询对应的ASCII码,就得到了字符。比如下面的十六进制的24,转成10进制就是36,ASCII码表里36就是$,懂了吧。(或者直接用工具将16进制数转化成字符串(原始MD5哈希)即可)

由于编码格式不同,因此有的字符会显示为乱码:

happysneaker.com

happysneaker.com

 既然经过MD5算法得到的 原始16位二进制格式 是字符串,那也就有了SQL注入的思路,毕竟还是将用户输入与代码进行了拼接,拼接效果如下,SQL语句应该能看清:

happysneaker.com


④ 既然还是SQL注入,而且

mysqli_num_rows($result)>0

这句代码就是看能不能查找到至少一条数据,那最终的思路就是:找到一个字符串,这个字符串经过MD5(xxx,true)之后能得到类似 'or'数字  这种格式。这样就能闭合SQL语句中左右的单引号,那为什么是数字呢,mysql中进行bool判断时,数字永为真,比如:

password=‘xxx’or ‘1xxxxxxxxx’,就相当于 password=‘xxx’or 1  ,也就相当于password=‘xxx’or true,所以返回值就是true,当然不只是 1 开头,只要是非0的数字开头都是可以的。当然如果只有数字的话,就不需要单引号,比如 password=‘xxx’ or 1,那么 'or数字 这种格式,返回值也是true,本题这两种格式都行。

happysneaker.com


现在只要想办法根据 上面的格式  ①逆推出  32位16进制字符串 ,②再逆推出  用户输入的字符串 即可。

①‘or’四个字符对应的四个十进制数:39,111,114,39,十六进制是  27,6f,72,27 ,因此构造32位含有276f7227+数字的十六进制数即可,数字1-9的十六进制是31—39,因此构造格式为:xxxxxxx276f7227(数字31—39选一个)xxxxxxxxxxxxxxxxx,276f7227(数字31—39选一个)  这一串在32位字符串中放在哪里都行,其他xxx随便写,比如  111276f7227321111111111111111 ;

② 然后将 111276f7227321111111111111111 逆推出用户输入的字符串即可,但是最后这一步逆推还挺难的,难在短时间内计算出初始字符,计算量巨大,歪果仁的方法:http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes


发呆。。。试试URL中的 ffifdyop ,哎哟我去~

happysneaker.com

其实明白了的话,答案不只一个,比如:129581926211651571912466741651878684928 也是可以的。

这题有点讨巧的意思,但是思路并非想象的那样简单。



思路总结:

正向推算要怎么得到我们要的答案?我们要找到一个字符串,这个字符串经过md5得到的16位原始二进制的字符串能帮我们实现sql注入。




技巧:原始MD5哈希在SQL中很危险


flag:ffifdyop



Web安全技术分享
请先登录后发表评论
  • 最新评论
  • 总共0条评论