1、后台登录
格式:flag:{xxx}
解题链接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
打开链接:
查看源码,发现一段被注释的代码,有用:
仔细分析这一句:
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
其实这一句我也不太会,通过别人的wp和百度PHP的md5(string,raw)函数:
那这个语句的含义就是将$password的值进行32位md5值加密后,再进行16进制和字符串的转换。(从这里开始我就不太明白)。这道题的思路应该是构造一个'or'xxx'的密码,只要后面的字符串为真即可。那么可以根据32位16进制的字符串来查找‘or’对应的16进制是276f7227(为什么我用脚本运行出来的or对应的16进制是6f72???欢迎评论解答),所以我们的目标就是要找一个字符串取32位16进制的md5值里带有276f7227这个字段的,在276f7227这个字段后面紧跟一个数字(除了0)1-9,对应的asc码值是49-57,转化为16进制就是31-39,也就是含有276f7227+(31-39)这个字段,就可以满足要求。而当md5后的hex转换成字符串后,如果包含 ‘or’ 这样的字符串,那整个sql变成:
SELECT * FROM admin WHERE pass = ''or'6<trash>'
那如何获取这个字符串,我们不如回过头来看看刚才页面的url:view-source:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php,这里面有一个ffifdyop的字符,276f722736c95d99e921722cf9ed621c正是ffifdyop的md5转义。