盒子
盒子
文章目录
  1. 前沿:
  2. 概述:
  3. 介绍:

一道CTF引发的Python沙箱逃逸

前沿:

还是和学长们参加了18年的国赛,虽然我是真的菜到无地自容,刚学几天pwn就觉得自己牛逼到不行,万万没想到国赛出的堆利用的题我是一点都不会阿T T. 一道逆向看了一天,虽然说思路已经很明确了,但是其中一步不知道为什么会头尾对接不上,实在是想不通,还是放弃了,还是得多多练呀。

贴上几条比较好的Python沙盒逃逸的链接:

链接1

链接2

链接3

概述:

通过一道CTF认识Python沙箱逃逸,涨很多见识了~这题我还差点AK了。

介绍:

屏幕快照 2018-05-02 下午6.26.04

明显一道Python的沙盒环境,让你跳过隔离环境去拿flag。

先试一试有没有一些沙盒逃逸常用的库

屏幕快照 2018-05-02 下午6.26.50

fine,并没有。感觉基本上能用的东西都被隔离了,我们来试试class

屏幕快照 2018-05-02 下午6.43.42

很好,我们可以用class来列出所有能用的类。可以看到返回object对象,因为python中一切均为对象,均继承object对象,得到object之后我们就可在通过属性subclasses来查看object的子类(包括所有的内置类)

屏幕快照 2018-05-02 下午6.48.01

回到我们的主要目的上,我们需要读取flag文件中的内容,在这些子类中有哪些是可以用来读取文件内容的呢?答案是file子类,首先查找一下file子类的位置。屏幕快照 2018-05-02 下午6.49.51

连这个你都屏蔽。。算了,我们自己找吧,找出来file在40的位置屏幕快照 2018-05-02 下午6.51.20

然后直接打印呗,这么明显了

屏幕快照 2018-05-02 下午6.52.42

fine,并没有我们想要的结果,问题出在哪里?可能是flag文件名字并不是flag.txt。那么我们怎么找文件名?就用刚刚的read函数去找

屏幕快照 2018-05-02 下午6.54.43

看见没,最下面的ctf用户,有一个ctf文件,所以我们去读取这个文件中的内容就好了

怎么读?前一种read方法并不适用,那我们换一个思路,用system函数来读取,就是os库的调用,但是os被屏蔽了我们该怎么办。我们需要找一个子类他能调用os模块,这里用到了warnings.catch_warnings类,在刚刚所列出的所有的类里面去找这个warning类,在59位置,所以我们接下来利用它来找到func_lobals函数屏幕快照 2018-05-02 下午7.00.58

然而globals函数中有字符串ls,所以这里我们还需要用到一个getattribute()函数来进行字符串的拼接屏幕快照 2018-05-02 下午7.03.01

成功返回,接下来就好办了,我们用拼接字符串来继续拼接调用os函数,但是这里我们还需要注意的地方就是还要调用os来调用popen函数来调用shell执行ls命令来查看ctf文件夹下面的flag文件名。

屏幕快照 2018-05-02 下午7.09.05

成功查看到flag文件,最后直接用cat命令来查看flag

屏幕快照 2018-05-02 下午7.10.29

get~新姿势学会了没有,但我觉得这个还是最简单的一种沙盒逃逸。

支持一下
扫一扫,支持v1nke
  • 微信扫一扫
  • 支付宝扫一扫