zoukankan      html  css  js  c++  java
  • SQL注入--盲注及报错注入

    盲注查询

    盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的

    布尔盲注

    布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales

    其实登录处的注入就是布尔型的,万能密码就是构造一个永真的查询,比如下面的

    select user from test where passwd=‘{injuct}’;
    #构造永真,即令where的条件用于为真
    select user from test where passwd=‘aa‘or’1’=‘1’;
    #注入的数据是aa‘or’1’=‘1

    密码输入无论是否正确,查询都成立。

    布尔盲注其实就是利用了这种,我们什么时候需要采用这种呢

    1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况,

    2)有正确或者错误的两种返回,比如查询正确返回一个页面,失败返回另一个页面,但是没有数据

    时间盲注

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

    利用的内置函数

    sleep(n):将程序挂起一段时间 n为n秒
    if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

    注入的语句

    select user from test where passwd=‘aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null));
    #注入的数据是aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null));--+

    我们什么时候需要采用这种呢

    1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况,

    2)无论查询结果都返回同一个数据,无法判断SQL语句执行情况

    基于错误查询

    有如下报错注入方法

    #报错注入floor
    (select 1 from (select count(*),concat((payload[]),floor(rand()*2))a from information_schema.columns group by a)b)limit 0,1
    #报错注入extractvalue
    select extractvalue(1,concat(0x5c,([payload])))
    #报错注入updatexml
    select 1=(updatexml(1,concat(0x3a,([payload])),1))

    floor报错注入

    floot是区镇函数,返回小于或等于 x 的最大整数

    上面floor报错例子中floor中传入的是一个rand函数(返回 0 到 1 的随机数)。

    floor报错注入主要利用的group by的机制,下面先来了解一下原理:

    group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表中的数据;如果该key不存在于临时表中,则在临时表中插入key所在行的数据。group by floor(random(0)2)出错的原因是key是个随机数,检测临时表中key是否存在时计算了一下floor(random(0)2)可能为0,如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时 floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值不一致,导致插入时与原本已存在的产生冲突的错误。

    主要检测时和插入时两次计算的所以输不一致就会报错。

     

    extractvalue报错注入

    ExtractValue(xml_frag, xpath_expr)

    ExtractValue()接受两个字符串参数,

    一个XML标记片段 xml_frag

    一个XPath表达式 xpath_expr(也称为 定位器);

    第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径

    原理

    如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

     

    updatexml报错注入

    首先了解下updatexml()函数

    UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据 函数作用:改变文档中符合条件的节点的值

    原理

    如果XPath_string的值不符合xpath的语法格式则会报错,报错信息会提示这个数据错误

    所以我们就在这个参数里注入我们的返回数据结果

  • 相关阅读:
    C#读写INI配置文件(转)
    关于DBNull
    XNA项目运行错误:No suitable graphics card found.
    C#3.0新增特性
    Windows 8 Metro开发疑难杂症(三)——导航(2),数据保存,数据虚拟化
    Windows 8 Metro开发疑难杂症(一)——导航
    windows 8 metro 风格开发(7)发布一个常用控件类库
    Windows 8 Metro开发疑难杂症(四)——(伪)数据库
    windows 8 metro 风格开发(9)Interactive(Behavior和EventTrigger)
    Windows 8 Metro开发疑难杂症(六)——APP的挂起状态
  • 原文地址:https://www.cnblogs.com/alummox/p/11374005.html
Copyright © 2011-2022 走看看