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 21 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
python实现大转盘抽奖效果
Jan 22 Python
matplotlib实现区域颜色填充
Mar 18 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
django 多数据库及分库实现方式
Apr 01 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Python List remove()实例用法详解
Aug 02 Python
Python代码实现双链表
May 25 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
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php微信开发接入
2016/08/27 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
python 打印对象的所有属性值的方法
2016/09/11 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python3实现转换Image图片格式
2018/06/21 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python可以用来做什么
2020/11/23 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
降消项目实施方案
2014/03/30 职场文书
合伙经营协议书范本
2014/09/13 职场文书
办公室文员岗位职责
2015/02/04 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
Python基础之条件语句详解
2021/06/16 Python
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers
Java界面编程实现界面跳转
2022/06/16 Java/Android