SQL Injection
手工注入
注入思路
数据库注入主要有如下方法:
UNION query SQL injection(可联合查询注入) Stacked queries SQL injection(可多语句查询注入) Boolean-based blind SQL injection(布尔型注入) Error-based SQL injection(报错型注入) Time-based blind SQL injection(基于时间延迟注入)
下面主要结合dvwa来介绍下可联合查询注入
注入思路主要如下
-
判断是否存在注入点
-
获取当前数据库名(利用database()函数)
-
利用information_schema的tables表获取当前数据库表的表名信息
-
利用information_schema的columns获取表的字段名信息
-
获取表中的信息
dvwa练习
-
LOW
正常输入数字,观察下返回结果。基本上可以明白是输入ID来查询用户名的操作。
输入1‘后返回错误提示信息,由此判断存在注入
然后输入1 or 1 = 1,返回结果和输入1没有区别
再输入 1‘ or ‘1’ = '1,成功得到了所有的信息,所以可以判断出是字符型注入
下面来直接尝试下能否利用database()函数获取数据库名
可以发现成功的获得了数据库名,有了数据库名后,就尝试是否有权限访问information_schema数据库中的表,来尽可能多的获取当前数据库的信息(所以设置好相应的权限也是防注入的重要方法吧)
构造SQL可以开个记事本之类的来用防止写错也好修改,就不要在web上直接输入1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #