python的常见命令注入威胁


Posted in Python onFebruary 18, 2013

ah!其实没有标题说的那么严重!

不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的《python hack》PPT,里面提及了不只命令执行的威胁,那些都是我们亲身经历的代码。

千万要记得执行命令的时候,不要信任其他传入数据就行了,既然意识到问题,那么修复方法是多种多样的。

在我们的系统中,多处出现问题然后修修补补是不靠谱的,那么我们需要一个通用的安全执行接口,这个接口过后更新进来。

此外,我们在开发新功能的时候,也要掌握安全编程的规范技巧,这些技巧不局限在命令执行安全。

总结了一下,就是一下几点要素啦:

•命令执行的字符串不要去拼接输入的参数,非要拼接的话,要对输入参数进行白名单过滤
•对传入的参数一定要做类型校验,例如知道是数字型的,就int测试一下,会安全许多
•对于拼接串,也要严格一些,例如int类型参数的拼接,对于参数要用%d,不要%s。
•使用subprocess来传入多个参数,就可以防止命令行注入

拿我们曾经的代码(当时是最新版=,=时过境迁了)存在的bug来做教程:

示例1(变量没过滤):

a.py

site变量其实是个url格式的串,未经过滤。由于老版本中site格式没有出现问题,新版本支持url格式,就可以传入各种符号了。

cmd = 'python /a.py --task_id=%s --site=%s -b' % (taski, site)

示例2(不牢靠的过滤):

util/update.py

downloadFile函数尽管对fileName使用了过滤,但绕过的方法很多。

linux下面的命令分隔方法非常多,黑名单法是不牢靠的。

fileName = downloadInfo[0]
fileName = fileName.replace(';','').replace('&','') #过滤文件名
localMd5 = os.popen('md5sum %s%s' %(path,fileName)).read()

修复的方法就是对fileName进行白名单格式检查,比如,只允许出现字符数字以及.。

示例3(不安全的格式化字符串):

b.py

target是个url格式的串,未经过滤。并且还有潜在威胁,deep使用了%s,其实它必须是个int,使用%d才对,假如以后有机会感染deep变量,那就xxoo了。

cmd = 'python b.py --task_id "%s" -s %s --deep %s --check_level %s -b' %(taski,target,deep,check_level)

示例4(无法利用的命令注入):

c.py

site_report函数,tid参数未经格式化,目前无法利用是因为有一个查询数据库的语句:

get_object_or_404(Task, get_domain_query(request), id=tid)#这里会让带了特殊符号的tid查不到记录,所以变为404,暂时保护了位于下文的cmd拼接。

一旦该语句变更,就会导致新的命令注入漏洞

cmd = 'sh /opt/report %s >/tmp/export_report.log 2>&1' % tid

Python 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
python判断字符串是否纯数字的方法
Nov 19 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
详解Python中的正则表达式
Jul 08 Python
基于Python打造账号共享浏览器功能
May 30 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
基于Django统计博客文章阅读量
Oct 29 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python中断多重循环的几种方式详解
Feb 10 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
python爬取微博评论的实例讲解
Jan 15 Python
centos下更新Python版本的步骤
Feb 12 #Python
Python3.x和Python2.x的区别介绍
Feb 12 #Python
windows下安装python paramiko模块的代码
Feb 10 #Python
linux下安装easy_install的方法
Feb 10 #Python
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 #Python
python类型强制转换long to int的代码
Feb 10 #Python
python函数缺省值与引用学习笔记分享
Feb 10 #Python
You might like
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
Django 中 cookie的使用
2017/08/17 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
Python多线程实例教程
2014/09/06 Python
Python迭代器和生成器介绍
2015/03/06 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
英语系本科生求职信范文
2013/12/18 职场文书
校本教研工作方案
2014/01/14 职场文书
企业申诉管理制度
2014/01/30 职场文书
社团文化节策划书
2014/02/01 职场文书
活动总结格式
2014/08/30 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
张丽莉观后感
2015/06/16 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python