python 通过crc32得到加密文件内容

Python015

python 通过crc32得到加密文件内容,第1张

crc检验原理实际上就是一个p位二进制序列之后附加一个r位二进制检验码(序列), 从而构成一个总长为n=p+r位的二进制序列, 附加在数据序列之后的这个检验码与数据序列的内容之间存在这某种特定的关系. 如果干扰因素使数据序列中的某一位或者某些位发生变化,这种特定的关系就会被破坏, 因此通过这种特性可以利用来爆破文件的内容.

文件的内容只有相同的时候他的crc校验才会一样.只要已知压缩文件的长度已知就可以获取他的crc32值来与我们的内容计算得到的值进行相互比较, 从而得到文件内容.(前提是文件内容长度够小才可以通过这种方法来实现,否则内容过长pc的算力有限)

现在有一个flag.zip 里面有一个flag.txt 文件 密码未知

使用模块如下:

得到文件的内容为4个字节长度

字典模块通过string模块得到

调用:

如果文件内容过长的话, 通过这种方式就不现实了.

解压文件得到如下的压缩文件

得到每个压缩包都是4个字节的大小, 压缩的文件为data.txt, 通过脚本得到文件内容, 脚本如下:

运行结果部分如下:

可以看见才多长这个东西很考验pc的性能, 然后直接进行base64解码, 得到的内容转为rar格式的文件, 然后补全文件头得到flag, 这里具体就不阐述了

得到的内容如下:

个人网站

总的来说就是调用python或者框架的内建/全局类,变量,函数获取敏感信息/执行敏感操作,做题时先明确题目环境再去官方文档中查找全局变量,类,函数。

返回当前对象实例的类。

返回一个由当前类父类构成的元组,由于python允许多重继承。

返回一个由当前函数可以访问到的变量,方法,模块组成的字典,不包含该函数内声明的局部变量。

in python2 func.func_globals is func.__globals__

返回一个由当前类的所有子类构成的列表。

python2中形如

的定义不会继承于object对象,所以不能用__subclasses__()方法,但在python3中即使这样声明也会继承于object。

返回一个由内建函数函数名组成的列表。

返回一个由当前类继承链组成的元组。

返回索引为index的值。

利用字符串,列表,元组,字典,集合等基本对象获取类,通过类获取基本类object,通过object获取敏感类对象。

创建file对象后以可通过read()/write()函数进行文件读写。

在 object.__subclasses__()[59/139].__init__.__globals__['__builtins__'] 下储存了一些函数可供调用。

既然可以使用if语句,同样也可以使用类似盲注的方式,逐字爆破。

过滤了括号,没法用__subclassess__获取子类,并且config和self置空。查看 flask文档

flask为jinja2模板提供了两个函数get_flashed_messages()和url_for(),选择任意一个函数,构造payload

http://domainname/shrine/{{url_for.__globals__}}

提交后看到回显里有一个current_app属性,构造payload

http://domainname/shrine/{{url_for.__globals__.current_app.config}} 或者 http://domainname/shrine/{{url_for.__globals__.['current_app']['config']}}

即可获取flag

给出一个ctftime上的wp

这个wp中的payload很长是因为search函数进行了深度优先搜索,利用request作为起点的payload也可以简化为

request._get_data_for_json.__globals__['current_app'].config['FLAG'] 。总之就是通过__globals__获取全局变量。