SQL注入盲注

布尔盲注

布尔很明显,它会根据你输入的数据返回ture或者fales,也就没有之前的报错信息了

这里我们需要引进几个变量:

length() 函数 返回字符串的长度

substr() 截取字符串 (语法:SUBSTR(str,pos,len);)

ascii() 返回字符的ascii码

比如我们在实战中,当页面没有回显,而写我们想要知道当前数据库的名字怎么办呢,这时候我们可以先判断数据库名字的长度。利用length函数

比如:我们可以利用比较符号判断数据库名称长度

id=1?And (length(database()))>9-- a

在得到长度之后我们可以利用substr函数截取字符串然后判断当前字段的ascii码与ascii码表中的是否对应

比如:

and (ascii(substr(database(),1,1)))=115-- a返回正常,说明数据库名称第一位是s

and (ascii(substr(database(),2,1)))=101-- a 返回正常,说明数据库名称第二位是e

这里所用的原理和判断名称长度是一样的,可以利用比较符号判断出来对应的字符,英文26为字母以及字符在ascii表中都有对应的十进制数值这里附上一张样图


时间盲注

时间盲注只会返回ture,无论输入任何值,返回的结果都会安扎正常数值来执行,加入特定的时间函数,通过查看web页面反应的时间差来判断注入的语句是否正确。

sleep() 将程序挂起一段时间n为n秒

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

ascii() 返回字符的ascii码

比如说在实战过程中,当你遇到无论输入什么页面就是没有变化的情况,我们也不能通过判断页面变化来确定语句是否执行成功,这时候我们就可以利用时间函数判断语句是否成功执行

比如:判断页面是否存在注入点

?id=1 and sleep(5) -- a

当页面刷新出现延迟的时候说明我们的语句成功执行了,也就确定这个位置存在注入;

当然单单利用时间函数并不能达到我们想要的效果,我们的目的是为了查询数据,这时候我们就可以用到

if(expr1,expr2,expr3)函数,把if(expr1,expr2,expr3函数和时间函数结合,可以更好的执行我们想要的效果,

比如:

and if(ascii(substr(database(),1,1))>120,0,sleep(10))-- a

这条语句表示当前数据库名称的第一字符是否大于ascii表对应的十进制120,如果是页面就会延迟刷新10秒,如果不是就没变化。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结 所有的sql盲注方法都讲了,其中基于时间的盲注由于在浏览本地网页时一般都是秒进,所以出现延时时效果明显,但是...
    dawsonenjoy阅读 793评论 0 2
  • 注入源代码 1.left()判断数据库版本
    唐小风7阅读 272评论 0 0
  • 0x00 前言 由于要使用到基于时间的盲注,但是我觉得基于时间的盲注其实就是基于布尔的盲注的升级版,所以我想顺便把...
    孤君蓑笠翁阅读 1,643评论 0 0
  • Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行...
    付出从未后悔阅读 713评论 0 3
  • sql注入原理:web应用程序对用户的输入没有进行合法性的判断,前端传入后端的参数是攻击者可控的,并且带入了数据库...
    DQ_5e1b阅读 2,298评论 0 0