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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Django接受前端数据的几种方法总结
Nov 04 Python
详解Python进程间通信之命名管道
Aug 28 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python闭包和装饰器用法实例详解
May 22 Python
pybind11在Windows下的使用教程
Jul 04 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
python__new__内置静态方法使用解析
Jan 07 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
详解python UDP 编程
Aug 24 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中设置时区方法小结
2012/06/03 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
vue项目前端埋点的实现
2019/03/06 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
入党自我鉴定
2014/03/25 职场文书
《悯农》教学反思
2014/04/28 职场文书
初中英语演讲稿
2014/04/29 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
医院合作意向书范本
2015/05/08 职场文书