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 相关文章推荐
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
python机器学习之神经网络(二)
Dec 20 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Python编程中flask的简介与简单使用
Dec 28 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
详解python深浅拷贝区别
Jun 24 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
python实现UDP协议下的文件传输
Mar 20 Python
Django限制API访问频率常用方法解析
Oct 12 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
JavaScript中继承用法实例分析
2015/05/16 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
使用python实现rsa算法代码
2016/02/17 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
大学优秀班集体申报材料
2014/05/23 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2014年档案室工作总结
2014/12/01 职场文书
优秀员工事迹材料
2014/12/20 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python