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针对excel的操作技巧
Mar 13 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
Python基于gevent实现高并发代码实例
May 15 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Python实现单例模式的5种方法
Jun 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
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
php-msf源码详解
2017/12/25 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
python计算文本文件行数的方法
2015/07/06 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
小学信息技术教学反思
2014/02/10 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
婚前财产公证书
2014/04/10 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python