首先我们要知道sql注入的核心:把用户输入的数据当作代码来执行
其次我们也要知道sql注入的sql注入的基本思路:两个条件:
- 用户能够控制输入
- 原本程序要执行的代码,拼接了用户输入的数据,然后进行执行
- 检测是否存在注入点(后文解释)
- 猜解字段数
- 利用联合查询寻找输出点
- 查询系统自带库,查询表名,字段名
- 查询所需字段值
实战演示:
一:寻找注入点
此时正常显示,当输入and 1=2 时出现错误
所以存在注入点
二:猜解字段数
这里可以使用order by n 来测试字段数,当出现页面不正常时,则会有n-1个字段
可知字段数为3
三:寻找输出点:就是寻找页面能显示哪些内容
这里可以利用union查询,使用union查询的两次查询列数必须一致,这就是为什么要找到字段数,
可以知道这里的输出点是 2和3
四:查询库名,表名,字段名
1.查询库名可以利用database()函数
2.查询表名:利用mysql自带数据库
所以执行语句: select table_name from infromation_schema.tables where table_schema=database()
3.寻找字段值
在数据库中,在information——schema 库中的有columns(字段的意思)表,存放的是每个表对应的字段名。
所以使用语句: select column_name from information.columns where table_name='error_flag' and table_schema=database();
4.获取字段值之后要找到flag , 利用语句:
select group_concat(flag) from error_flag(表名)
得到flag