登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
BUUCTF靶场22 -- [BJDCTF2020]Easy MD5
查看源代码没有hint 爆下目录没发现什么 抓包发现响应头有hint
开始地址:
http://de65eb2f-b194-42ea-9feb-a ... .cn:81/leveldo4.php
输入1,提交
http://de65eb2f-b194-42ea-9feb-a ... ldo4.php?password=1
语法: md5(string,raw) 所以首先我们要找到一个字符串,这个字符串经过md5得到的16位原始二进制的字符串能帮我们实现sql注入。首先or这个字符串是必要的,同时为了配对原先sql语句里面有的单引号,在or的两边要有单引号,使它变成 password=‘xxx’or‘xxx’ 的形式,所以我们需要的字符串的原始二进制格式的字符串里要包含 'or' ,如果根据原始二进制来找到我们要的字符串可能会比较麻烦,那么可以根据32位16进制的字符串来查找,根据上面介绍的, 'or' 对应的16进制是 276f7227 ,所以我们的目标就是要找一个字符串取32位16进制的md5值里带有276f7227这个字段的,接着就是要看关键的数字部分了,在276f7227这个字段后面紧跟一个数字,除了0,1-9,对应的asc码值是49-57,转化为16进制就是31-39,也就是我们需要有276f7227+(31-39)这个字段,就可以满足要求。比如xxxxxxxxxxxxxxxx276f7227(31-39)xxxxxx
ffifdyop,这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6, 而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是select * from ‘admin’ where password=’’ or ‘6xxxxx’
等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数
于是我们找到了:ffifdyop 经过md5()后为:276f722736c95d99e921722cf9ed621c
这里可以绕过md5函数使其为恒真 即password='xxx'or 数字就行 输入ffifdyop绕过
查看源码得到一串注释代码: 下面就用数组绕过就可以乱打了 进行get传参 绕过a[]=1&b[]=2 又跳转了一串代码
post传参绕过: param1[]=1¶m2[]=2 得到flag
|