当前位置: 移动技术网 > IT编程>脚本编程>Python > 荐 5.2. Python

荐 5.2. Python

2020年07月07日  | 移动技术网IT编程  | 我要评论
内容索引:5.2. Python5.2.1. 格式化字符串5.2.2. 反序列化5.2.2.1. pickle demo5.2.2.2. 其他序列化库5.2.3. 沙箱5.2.3.1. 常用函数5.2.3.2. 绕过5.2.3.3. 防御5.2.4. 框架5.2.4.1. Django5.2.4.1.1. 历史漏洞5.2.4.1.2. 配置相关5.2.4.2. Flask5.2.5. Sink5.2.5.1. 命令执行5.2.5.2. 危险第三方库5.2.5.3. 反序列化5.2.6. 参考链接5.2.6.

5.2. Python

5.2.1. 格式化字符串

在Python中,有两种格式化字符串的方式,在Python2的较低版本中,格式化字符串的方式为 "this is a %s" % "test",之后增加了format的方式, 语法为 "this is a {}".format('test')或者"this is a {test}".format(test='test')

当格式化字符串由用户输入时,则可能会造成一些问题,下面是一个最简单的例子

>>> 'class of {0} is {0.__class__}'.format(42)
"class of 42 is <class 'int'>"

从上面这个简单的例子不难知道,当我们可以控制要format的字符串时,则可以使用 __init__/ __globals__等属性读取一些比较敏感的值,甚至任意执行代码。

5.2.2. 反序列化

5.2.2.1. pickle demo

Python Pickle在反序列化时会调用 __reduce__,可用自定义的 __reduce__ 函数来实现攻击。

import pickle
import pickletools
import subprocess

class A(object):
    a = 1
    b = 2
    def __reduce__(self):
        return (subprocess.Popen, (('cmd.exe',),))

data = pickle.dumps(A())
pickletools.dis(data)

5.2.2.2. 其他序列化库

  • PyYAML
  • marshal
  • shelve

5.2.3. 沙箱

5.2.3.1. 常用函数

  • eval / exec / compile
  • dir / type
  • globals / locals / vars
  • getattr / setattr

5.2.3.2. 绕过

  • 最简单的思路是在已有的模块中import,如果那个模块中已经 import 可以利用的模块就可以使用了
  • 在父类中寻找可用的模块,最常见payload是 ().__class__.__bases__[0].__subclasses__()或者用魔术方法获取全局作用域 __init__.__func__.__globals__
  • 有些网站没有过滤 pickle 模块,可以使用 pickle 实现任意代码执行,生成 payload 可以使用 https://gist.github.com/freddyb/3360650
  • 有的沙箱把相关的模块代码都被删除了,则可以使用libc中的函数,Python 中调用一般可以使用 ctypes 或者 cffi。
  • "A""B" == "AB"

5.2.3.3. 防御

Python官方给出了一些防御的建议

  • 使用Jython并尝试使用Java平台来锁定程序的权限
  • 使用fakeroot来避免
  • 使用一些rootjail的技术

5.2.4. 框架

5.2.4.1. Django

5.2.4.1.1. 历史漏洞

5.2.4.1.2. 配置相关

  • Nginx 在为 Django 做反向代理时,静态文件目录配置错误会导致源码泄露。访问 /static… 会 301 重定向到 /static…/

5.2.4.2. Flask

Flask默认使用客户端session,使得session可以被伪造

5.2.5. Sink

5.2.5.1. 命令执行

  • os.popen
  • os.system
  • os.spawn
  • os.fork
  • os.exec
  • popen2
  • commands
  • subprocess
  • exec
  • execfile
  • eval
  • timeit.sys
  • timeit.timeit
  • platform.os
  • platform.sys
  • platform.popen
  • pty.spawn
  • pty.os
  • bdb.os
  • cgi.sys

5.2.5.2. 危险第三方库

  • Template
  • subprocess32

5.2.5.3. 反序列化

  • marshal
  • PyYAML
  • pickle
  • cPickle
  • shelve
  • PIL

5.2.6. 参考链接

5.2.6.1. 反序列化

5.2.6.2. 沙箱

5.2.6.3. 格式化字符串\

5.2.6.4. 综合

本文地址:https://blog.csdn.net/weixin_43510203/article/details/107143520

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网