3.1 SQL注入

2019-12-02  本文已影响0人  最酷的崽_ec69

3.1.1 注入分类

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

3.1.1.1. 按技巧分类

  根据使用的技巧,SQL注入类型可分为

3.1.1.2. 按获取数据的方式分类

  另外也可以根据获取数据的方式分为3类

3.1.2 注入检测

3.1.2.1. 常见的注入点

3.1.2.2. Fuzz注入点

3.1.2.3. 测试用常量

3.1.2.4. 测试列数

  例如 http://www.foo.com/index.asp?id=12+union+select+nulll,null-- ,不断增加 null 至不返回

3.1.2.5. 报错注入

3.1.2.5.1. 基于geometric的报错注入

3.1.2.6. 堆叠注入

3.1.2.7. 注释符

3.1.2.8. 判断过滤规则

3.1.2.9. 获取信息

3.1.2.10. 测试权限

3.1.3 权限提升

3.1.3.1. UDF提权

  UDF(User Defined Function,用户自定义函数)是MySQL提供的一个功能,可以通过编写DLL扩展为MySQL添加新函数,扩充其功能。
  当获得MySQL权限之后,即可通过这种方式上传自定义的扩展文件,从MySQL中执行系统命令。

3.1.4 数据库检测

3.1.4.1. MySQL

3.1.4.2. Oracle

3.1.4.3. SQLServer

3.1.4.4. PostgreSQL

3.1.5 绕过技巧

3.1.6 SQL注入小技巧

3.1.6.1. 宽字节注入

  一般程序员用gbk编码做开发的时候,会用 set names 'gbk' 来设定,这句话等同于

set
character_set_connection = 'gbk',
character_set_result = 'gbk',
character_set_client = 'gbk';

  漏洞发生的原因是执行了 set character_set_client = 'gbk'; 之后,mysql就会认为客户端传过来的数据是gbk编码的,从而使用gbk去解码,而mysql_real_escape是在解码前执行的。但是直接用 set names 'gbk' 的话real_escape是不知道设置的数据的编码的,就会加 %5c 。此时server拿到数据解码 就认为提交的字符+%5c是gbk的一个字符,这样就产生漏洞了。
  解决的办法有三种,第一种是把client的charset设置为binary,就不会做一次解码的操作。第二种是是 mysql_set_charset('gbk') ,这里就会把编码的信息保存在和数据库的连接里面,就不会出现这个问题了。 第三种就是用pdo。
  还有一些其他的编码技巧,比如latin会弃掉无效的unicode,那么admin%32在代码里面不等于admin,在数据库比较会等于admin。

3.1.7 CheatSheet

3.1.7.1. SQL Server Payload

3.1.7.2. MySQL Payload

3.1.7.3. PostgresSQL Payload

3.1.7.4. Oracle Payload

3.1.8 参考文章

上一篇 下一篇

猜你喜欢

热点阅读