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版微信跳一跳游戏辅助
Jan 11 Python
Python求解任意闭区间的所有素数
Jun 10 Python
浅析python继承与多重继承
Sep 13 Python
基于Python函数和变量名解析
Jul 19 Python
简单了解Django应用app及分布式路由
Jul 24 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
Python面向对象原理与基础语法详解
Jan 02 Python
python计算导数并绘图的实例
Feb 29 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
Python xlwt模块使用代码实例
Jun 10 Python
用ldap作为django后端用户登录验证的实现
Dec 07 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 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JS实现文档加载完成后执行代码
2015/07/09 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python解惑之True和False详解
2017/04/24 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
django使用多个数据库的方法实例
2021/03/04 Python
期末考试动员演讲稿
2014/01/10 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
爱国演讲稿500字
2014/05/04 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers