适用情况
如果一个网站存在基于时间的盲注,而恰好sleep这类核心函数被过滤的话,我们便可以使用。
笛卡尔积
数学表示:
- A = {a1, a2, …, am}
- B = {b1, b2, …, bn}
那么笛卡尔积为
- A×B = {(a1, b1), (a1, b2), …, (a1, bn), (a2, b1), …, (am, bn)}
数据库中:
若执行:
SELECT * FROM TableA, TableB;
TableA:
1 | | id | name | |
TableB:
1 | | id | age | |
执行 SELECT * FROM TableA, TableB;
后的结果将是:
1 | | TableA.id | TableA.name | TableB.id | TableB.age | |
可以看到查询结果是两个表的笛卡尔积。
利用笛卡尔积进行延时注入
原理
如果查询的表中含有大量数据,数据库进行计算时需要一段时间,进而产生延时的效果。我们便可以通过是否有延时来判断某个条件是否正确。
示例
select * from admin where id = 1 and (条件语句) and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C);
通过是否有延时效果产生来判断条件语句是否正确。
自动化脚本编写
原理
根据是否产生延时(可通过不同个查询结果的笛卡尔积来控制)来判断条件语句是否正确
基本函数
**time.time():**它返回自1970年1月1日00:00:00 (UTC) 至当前时间的秒数,这是一个浮点数。这个值通常被称为“Unix时间戳”。可用于计算延时时间。
**requests.get(url):**requests.get 是 requests库中的一个函数,用于执行HTTP GET请求
示例
这里以sql-lib less5(虽然这题布尔盲注也能做:) )为例
爆库名长度
为8
爆库名
爆表名
以此类推,只要改变条件语句便能得到想要的信息。