$sql = "select*from admin where uname = '$uname'";
select*from admin where uname = 'a';
恶意传参:select*from admin where uname = 'a' and 1 = 1#'
('用一个单引号将前方语句闭合)(and 1 = 1被当作代码执行) (#注释掉后面的代码)
2.SQL注入点就是可以进行SQL注入的地方。
二、什么是SQL注入?
1.SQL注入就是针对SQL语句的注入,也可以理解为用户输入的数据当作SQL语句的代码执行了。(SQL注入是1998年一名叫作rfp的黑客发表的一篇文章所进入大众视线的,SQL注入在OWASP TOP10位于榜首)
2.SQL注入有两个关键条件
(1)用户能控制输入
(2)原本程序要执行的代码,拼接了用户输入的数据然后进行执行
3.打开一个网站,在url栏中改变参数(将id=1改为id=2)发现页面出现变化,说明与数据库产生了交互,有SQL漏洞。
三、显错联合查询流程
1.判断是否有SQL注入点
(1)打开一个网站,在url栏中改变参数,发现页面变化,说明与数据库产生了交互,存在SQL漏洞
(2)判断注入点的方法
- 将id=1改为id=2或id=1 and1>10
- 页面后加上一个英文字符的‘看是否报错
- 注释的方法判定:_ _空qwe
- 数字传参的方法:id=2-1(如果存在SQL漏洞,会运算出结果;反之不会)
2.判断表内有几个字段(order by 1)
在url栏中order by 4是回显报错,所以存在三个字段
3.判断回显点
先让id=1报错,改为id=1.1(id=1.1 union select 1,2,3)由步骤2可知有三个字段
可知回显点在2和3
4.跑库名(select database())
id=1.1 union select 1,database(),3 (用第二个回显点来进行SQL注入)
5.找到表名 (select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1)
- table_name为4中查到的error
- 利用limit 0,1查库中有多少个表名(limit 0,1代表从第一行数据开始取第一个)
所以该库中存在两个表名,即user 和error_flag
6.查找字段( select 1,column_name,3 from information_schema.columns where table_name='admin' limit 0,1)
- admin为表名
- 因为该库中存在两个表,所以要分别查询表中的字段
user表中有三个字段,分别为:(1)id (2)password (3)username
同理error_flag表中有两个字段为:(1)id (2)flag
7.查数据
(select 1,字段,3 from 表 limit 0,1)
- 分别查询两个表里面的字段
查询结果分别为
8.成功找到flag!