前沿:
还是和学长们参加了18年的国赛,虽然我是真的菜到无地自容,刚学几天pwn就觉得自己牛逼到不行,万万没想到国赛出的堆利用的题我是一点都不会阿T T. 一道逆向看了一天,虽然说思路已经很明确了,但是其中一步不知道为什么会头尾对接不上,实在是想不通,还是放弃了,还是得多多练呀。
贴上几条比较好的Python沙盒逃逸的链接:
概述:
通过一道CTF认识Python沙箱逃逸,涨很多见识了~这题我还差点AK了。
介绍:
明显一道Python的沙盒环境,让你跳过隔离环境去拿flag。
先试一试有没有一些沙盒逃逸常用的库
fine,并没有。感觉基本上能用的东西都被隔离了,我们来试试class
很好,我们可以用class来列出所有能用的类。可以看到返回object对象,因为python中一切均为对象,均继承object对象,得到object之后我们就可在通过属性subclasses来查看object的子类(包括所有的内置类)
回到我们的主要目的上,我们需要读取flag文件中的内容,在这些子类中有哪些是可以用来读取文件内容的呢?答案是file子类,首先查找一下file子类的位置。
连这个你都屏蔽。。算了,我们自己找吧,找出来file在40的位置
然后直接打印呗,这么明显了
fine,并没有我们想要的结果,问题出在哪里?可能是flag文件名字并不是flag.txt。那么我们怎么找文件名?就用刚刚的read函数去找
看见没,最下面的ctf用户,有一个ctf文件,所以我们去读取这个文件中的内容就好了
怎么读?前一种read方法并不适用,那我们换一个思路,用system函数来读取,就是os库的调用,但是os被屏蔽了我们该怎么办。我们需要找一个子类他能调用os模块,这里用到了warnings.catch_warnings
类,在刚刚所列出的所有的类里面去找这个warning类,在59位置,所以我们接下来利用它来找到func_lobals函数
然而globals函数中有字符串ls,所以这里我们还需要用到一个getattribute()函数来进行字符串的拼接
成功返回,接下来就好办了,我们用拼接字符串来继续拼接调用os函数,但是这里我们还需要注意的地方就是还要调用os来调用popen函数来调用shell执行ls命令来查看ctf文件夹下面的flag文件名。
成功查看到flag文件,最后直接用cat命令来查看flag
get~新姿势学会了没有,但我觉得这个还是最简单的一种沙盒逃逸。