渗透攻防Web篇-深入浅出SQL注入
1 背景
京东SRC(Security Response Center)收录大量外部白帽子提交的sql注入漏洞,漏洞发生的原因多为sql语句拼接和Mybatis使用不当导致。
2 手工检测
2.1 前置知识
mysql5.0以上版本中存在一个重要的系统数据库information_schema,通过此数据库可访问mysql中存在的数据库名、表名、字段名等元数据。information_schema中有三个表成为了sql注入构造的关键。
1)infromation_schema.columns:
- table_schema 数据库名
- table_name 表名
- column_name 列名
2)information_schema.tables
- table_schema 数据库名
- table_name 表名
3)information_schema.schemata
- schema_name 数据库名
SQL注入常用SQL函数
- length(str) :返回字符串str的长度
- substr(str, pos, len) :将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
- mid(str,pos,len) :跟上面的一样,截取字符串
- ascii(str) :返回字符串str的左面字符的ASCII代码值
- ord(str) :将字符或布尔类型转成ascll码
- if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
2.2 注入类型
2.2.1 参数类型分类
整型注入
例如?id=1,其中id为注入点,类型为int类型。字符型注入
例如?id=”1”,其中id为注入点,类型为字符型,要考虑闭合后端sql语句中的引号。
2.2.2 注入方式分类
- 盲注
- 布尔盲注:只能从应用返回中推断语句执行后的布尔值。
- 时间盲注:应用没有明确的回显,只能使用特定的时间函数来判断,例如sleep,benchmark等。
- 报错注入:应用会显示全部或者部分的报错信息
- 堆叠注入:有的应用可以加入 ; 后一次执行多条语句
- 其他
2.3 手动检测步骤(字符型注入为例)
相关文章