sql注入篇2

 一、前言

  上一篇:

(sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出当前语句查询的列数,在使用union查询一一爆数据,当然,也可以使用脚本直接脱库。

  2、基于布尔值的注入

    通俗来说,就是盲注,回显的页面不会出现任何有关数据的结果,但会显示一些特殊的显示,可以判断我们猜测正确与否。例如下图(sqllab less-5):

上面两张截图中,第一张id=1,第二张id=-1,但在数据库中id这个参数是没有-1这个值的,所以第二张截图中,页面返回空(之所以出现sql语句,是我更改了源码显示在页面,方便研究学习用的),而在第一张截图中id=1,结果为真,页面返回来you are in....这个特殊的标志,我们可以理解为出现you are in...为真,反之,页面不返回任何东西为假。基于此,我们可以猜测出整个数据库中的数据(一般直接跑sqlmap 或者写脚本跑,下图是sqlmap结果)

当然,我们也可以手动注入,在手动注入之前,先介绍一下一些用于注入的相关函数,常用于基于布尔注入的函数有mid,substr,length等等,更多的就不在这里说了,想要了解更多的或者想要了解其用法的可以百度或者谷歌,个人觉得

  3、基于报错的注入

   通俗来说,就是页面不回显任何有关数据的结果,包括真假值,但是通过使用一些函数会显示报错信息,从而暴露了数据库的相关信息。

   a、floor注入

    (1)、原理

      原理讲解语文水平能力不行(逃。。。),这里附上一遍文章

    b、extractvalue()报错注入

    (1)、原理

      EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
作用:从目标XML中返回包含所查询值的字符串
函数的XPath_string必须满足Xpath语法,否则就会报错,这样我们就可以利用此报错来爆出我们想要的信息。

    (2)、利用

      以wuzhicms为例,poc: http://192.168.116.129/index.php?m=promote&f=index&v=search&_su=wuzhicms&fieldtype=place&keywords=%27%20and+extractvalue(1,concat(0x7e,(select database())))%23(192.168.116.129是笔者自己搭建用作搭载wuzhicms的虚拟机服务器),如图所示:

成功爆出当前数据库wuzhicms。(更多有关wuzhicms(cve-2018-14515)参见笔者的

从截图返回的结果中,我们可以看到返回时间为6.03秒,说明当前数据库名字第一个字母为s,其余数据查询也一样,这里不再做过多说明。

    (2)、benchamark()

    benchmark()有两个参数,第一个是执行次数,第二个是要执行的表达式,这里还是以sqllab less-9为例,poc如下:http://127.0.0.1:9001/sqllab/Less-9/?id=1%27%20and%20if((mid(database(),1,1)=%27s%27),benchmark(10000000,md5(123)),1)%23(poc解释:如果当前数据库名字第一个字母为s,执行benchamark函数,执行1000000次md5(123),否则执行1),截图如下:

 

可以看见页面返回时间为3.31秒,说明当前数据库名字第一个字母为s(如果返回时间不明显,可以增加benchmark函数中执行次数的量级),其余数据的猜测就是常规操作了,这里不再讲解。

三、结束语

  对sql注入的讲解就到这里,sql注入的知识其实远不止这些,感兴趣的可以百度或者谷歌,如果上述有不对的地方,还请谅解,毕竟作者还是一菜鸟,完结,撒花。https://www.cnblogs.com/aWxvdmVseXc0/p/10266186.html

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信