题目地址:http://www.shiyanbar.com/ctf/2036
1、首先,查看网页源代码(Ctrl+U),会发现一段PHP代码:
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
意思就是:用输入经过md5加密后的密码和admin用户名查询,结果等于sql,然后执行该sql语句。
介绍一下md5()的用法:
语法
md5(string,raw)
| |||||||
---|---|---|---|---|---|---|---|
返回的是字符串,不过进制不一样。
2、基于上面的sql语句对密码进行注入
password = '".md5($password,true)."',必须md5后的字符串前面为'or',这样才能闭合前面的单引号。
所以,对于二进制字符串'or',我们需要找到一个字符串,让他经过md5($password,true)之后含有'or',这样的字符串怎么找呢,我现在的水平是找不出来了,观察一下url,ffifdyop.php看着挺奇怪的,于是试了一下。
ffifdyop
false: 276f722736c95d99e921722cf9ed621c
true: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
看到true时前面就有'or',于是把ffifdyop输入提交就拿到flag了。