网络安全从入门到精通 (第四章-3) 注入之全方位利用-盲注

本文内容:

  • 盲注介绍
  • 盲注需要掌握的函数
  • 盲注的具体流程
  • 延时注入(时间注入)
  • 延时注入的具体流程
  • 使用工具sqlmap进行盲注和延时注入

1,盲注介绍:

  千篇一律要提的,注入攻击的本质,是把用户输入的数据当做代码执行。

  两个关键条件:

    1.用户能够控制输入。

    2.原本程序要执行的代码,拼接了哟用户输入的数据。

  盲注所对应的是显错注入,有很多时候,Web服务器关闭了错误回显,这时候就没有办法进行SQL注入了吗?

  实际上:盲注就是在服务器没有错误回显的时候完成的注入攻击,服务器没有错误回显,对于攻击者来说缺少了非常重要的调试信息。

  类型:

    1.布尔盲注:

      布尔盲注很明显Ture和Fales,也就是它只会根据注入信息返回Ture和False,也就没有了之前的报错信息。

    2.时间盲注:界面返回一种,Ture无论输入任何值,返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回时间差来判断注入的语句是否正确。

2.盲注需要掌握的函数

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

  举例:返回当前数据库长度:select length(database())

  substr()截取字符串,语法:substr(str,start,len)

    解释:

      str:为字符,

      start:为起始位置

      len:为长度

  ascii():返回字符串ASCII码[将字符变为数字]

  举例:(substr(database()),1,1)>x,sleep(5),'a')

3,盲注的具体流程:

  可以一个sleep()函数,打进去,我们就可以判断是否具有SQL注入了,在观看,是否有数据返回,如果没有数据返回,我们就可以使用盲注了。

  1.判断数据库名字的长度:

    length(database())>x

  2.判断数据库名字的每个字母。

    ascii(substr(database(),1,1))>x

  3.依次这样判断下去,判断出库名,表名,字段名,数据内容,可以使用group_concat()或者limti n,m

解释:substr(database(),1,1)>1,的意思就是判断数据库第一个字母是否大于1

   ascii(substr(database()),1,1)>1 的意思是判断数据库第一个字符的ASCII码是否大于,通过ASCII码我们就可以得到数据库的名字了。

4,延时注入:也就是时间盲注

  需要掌握:if(exprl1,exprl2,exprl3)判断语句,如果第一个语句正确就执行第二个语句,如果错误,就执行第三个语句。

  举例:

  if(ascii(suustr(database(),1,1))>x,sleep(5),'a')

  具体流程:

    使用sleep判断是否存在SQL注入

    将if函数打进去,判断正确,浏览器就会休眠5秒,判断错误,浏览器直接返回。然后像做布尔盲注一样,逐次判断,最后的出库名、表名、字段名、数据内容。

我们可以感受到,盲注的人工注入,很麻烦,很麻烦,所以在做盲注时,优先考虑使用工具。

5,使用sqlmap跑盲注

  1.使用burpsuite抓包,存入到txt文档,

  2.然后使用sqlmap -r 打开文件,开始跑,然后爆库、爆表、爆字段、爆数据。

  3.爆库:

     sqlmap -r /root/桌面/1.txt --dbs

  4.爆表:

     sqlmap -r /root/桌面/1.txt --tables -D 库名

  5.爆字段:

     sqlmap -r /root/桌面/1.txt --columns -T 表名 -D 库名

  6.爆内容:

     sqlmap -r /root/桌面/1.txt --dump -C 字段名 -T 表名 -D 库名

使用工具,我们就发现,盲注简单多了,但是我们不能太依赖,工具,关于注入的原理等知识,我们还是要了解的。

与君共勉:

失败者,

往往是热度只有五分钟的人;

成功者,

往往是坚持最后五分钟的人;

原文地址:https://www.cnblogs.com/xz25/p/12591893.html