1.查看源代码,无异常;输入字符串发现传参password,尝试sql注入没有看到异常
2.传参抓包,在respose的消息头内有hint(线索):select * from 'admin' where password=md5($pass,true) 就是说,传参的值经过md5(string,true)后,使sql语句能够执行,完成注入
3.语法:md5(string,raw)
参数 | 描述 |
string | 必需。要计算的字符串。 |
raw | 可选。
|
要将注入后转换的字符串格式为xxx'or'(1-9)xxxx,就是使sql语句的条件返回值恒为真,16位二进制形式就要求转化后为16进制,但每两位16进制转化为ascii对应的字符串,可以写成脚本去生成,但是这种是固定的,我建议大家当成知识点去记住就可以了,让$pass= ffifdyop;转换的过程贴一下
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
4.进入新页面后查看源代码
这个知识点是==的弱类型绕过,==的比较要求式子两边的值相等,类型会自动转化,两边的值为0ex开头的即可,因为0e开头的会自动转化成科学计数法,0的10的x次方,都是为0,大家理解原理,可以记住两个遇到这种情况,直接用就行
QNKCDZO
240610708
因为是get,所以直接在路径上传参就可以/levels91.php?a=QNKCDZO&b=240610708
5.进入新页面
===要求两边的类型相同,但是另一条件要求值不同,这是md5的另一个特性,就是md5无法对数字进行加密,数组的加密返回值均为null, 令param1,2为数组进行定义,param1[]=1¶m2[]=2
6.flag{920aee02-8b7c-4799-a2e2-e39f1ec3e1f9}