Python_Summary

本篇 Blog 的内容更像是一页目录,主要记录在做题过程中所遇到的关于 Python 类型的题目

以及对此类型题目所以需要的知识点进行总结,分类,可点击 相关题目中的链接以查看题目的具体解答过程.

这些Trick在代码审计中帮助了我很多.

0x01 Flask SSTI

关于ssti的内容我单独写了一篇文章.

FLASK_SSTI

0x02 Bypass

2.1 os.path.join

不恰当的使用os.path.join可能会造成任意路经构造

# 假设 传入的 path1 可控
path = os.path.join('static',path1)

# 当构造的 path1 以 / 开头便可以实现任意路径构造

image-20210901041140726

同样,你可以思考下面这个例子

image-20210901041140727

Arbitrary file read due to insufficient validation of filename. The code is using the os.path.join function. An attacker can abuse this function to passing a file like this “/etc/passwd” absolute path.

According to docs “If a component is an absolute path, all previous components are thrown away and joining continues from the absolute path component.”

So, We can achieve an arbitrary file read and bypass the dot check “img=/etc/passwd”

2.2 SSRF

算是urllib里面的一个trick, 之所以归在SSRF 是应为通常用来做SSRF攻击.

3

4

0x03 Pickle 反序列化

3.1

3.2

0x04 Pyc 考点

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由Python的虚拟机来执行的,这个是类似于Java或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的python是无法执行的。

Python3 后,只要使用了 import 导入了包,就会在当前目录生成__pychache__ 目录,里面就存放了pyc文件.

举例:

# python3.5  app.py
import secret

content_key  = scret.KEY

那么运行 python3 app.py 后,会在当前目录生成 __pycahche__目录:

__pychache__
	secret.cpython-35.pyc