sql注入过程
单引号报错
instr(substr,str) 返回字符串substr中第一次出现str的位置
instr('root',r) 返回为1
instr('root',ro) 返回为1
instr('root',oo) 返回为2
这里就有一个问题,假如o出现在第三位,r出现在第一位,但是这两个字母都是一样回显,就无法精确判断第一位是什么,但是我们可以判断出current_user是由rot这三个字母组成的,因为当他不存在就会返会空,这里很明显就是root,如果复杂一点我们就很难判断
这里我在当时想的是逐渐增加710这个数字,像下面增加到713只有1位T,说明T第一次出现的位置是4,例如:roottttoootrr,这里t后面出现的字母一定在t前面出现过或者就是t,不然就跑出来就不止有t一位
当我们确定第4位是t的时候,我们按照下面这样去遍历t后面的字符
'||EXP(714-(instr(current_user,'ta')))||'
这里什么也没有,说明t已经是最后一位了,这里我没有添加特殊符号,还有可能是t@,实际要把所有的特殊符号再加上
这里假如说复杂一点用户是roottttoootrr,那他tt返回的应该是4,所以会有一条数据返回正常
跑t前面一位把713改成712就行,下面说明是ot,这样一位一位的注,即可注出来所有字符
原文始发于微信公众号(起凡安全):一次异常艰难的sql注入
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论