一次异常艰难的sql注入

admin 2025年5月27日19:31:05评论32 views字数 838阅读2分47秒阅读模式

一次异常艰难的sql注入

sql注入过程

单引号报错

一次异常艰难的sql注入
个正常,标准的sql注
一次异常艰难的sql注入
最简单的payload先测试下,这里是or = and 都过滤了
一次异常艰难的sql注入
最终经过不断测试,下面返回正常
一次异常艰难的sql注入
下面返回异常,这里尝试各种逻辑判断函数都被过滤了
一次异常艰难的sql注入
经过测试,减号可以用
一次异常艰难的sql注入
这里试了试like也被过了,最终找到一个函数可以用
instr(substr,str) 返回字符串substr中第一次出现str的位置instr('root',r)  返回为1instr('root',ro)  返回为1instr('root',oo)  返回为2
一次异常艰难的sql注入
这里user是过滤掉的,这里前面要是709,不管后面a是否出现在第几位或者不出现都应该返回正常
一次异常艰难的sql注入
经过简单测试current_user可以使用
一次异常艰难的sql注入

这里就有一个问题,假如o出现在第三位,r出现在第一位,但是这两个字母都是一样回显,就无法精确判断第一位是什么,但是我们可以判断出current_user是由rot这三个字母组成的,因为当他不存在就会返会空,这里很明显就是root,如果复杂一点我们就很难判断

一次异常艰难的sql注入

这里我在当时想的是逐渐增加710这个数字,像下面增加到713只有1位T,说明T第一次出现的位置是4,例如:roottttoootrr,这里t后面出现的字母一定在t前面出现过或者就是t,不然就跑出来就不止有t一位

一次异常艰难的sql注入

当我们确定第4位是t的时候,我们按照下面这样去遍历t后面的字符

'||EXP(714-(instr(current_user,'ta')))||'
一次异常艰难的sql注入

这里什么也没有,说明t已经是最后一位了,这里我没有添加特殊符号,还有可能是t@,实际要把所有的特殊符号再加上

这里假如说复杂一点用户是roottttoootrr,那他tt返回的应该是4,所以会有一条数据返回正常

一次异常艰难的sql注入

跑t前面一位把713改成712就行,下面说明是ot,这样一位一位的注,即可注出来所有字符

一次异常艰难的sql注入
总结:还是那句话,你问我代码审计我可能支支吾吾,你要是问我sql注入,那我能跟你讲一天
freebuff帮会限时优惠
一次异常艰难的sql注入
一次异常艰难的sql注入

原文始发于微信公众号(起凡安全):一次异常艰难的sql注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月27日19:31:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次异常艰难的sql注入http://cn-sec.com/archives/4103389.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息