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 相关文章推荐
Django框架中的对象列表视图使用示例
Jul 21 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python中单、双下划线的区别总结
Dec 01 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
快速查找Python安装路径方法
Feb 06 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
Python机器学习之KNN近邻算法
May 14 Python
深入理解python协程
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集成FCK的函数代码
2008/09/27 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
php实现短信发送代码
2015/07/05 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP微信分享开发详解
2017/01/14 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python使用selenium实现批量文件下载
2019/03/11 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
服务中心夜班服务员岗位职责
2013/11/27 职场文书
信息管理员岗位职责
2013/12/01 职场文书
八年级历史教学反思
2014/01/10 职场文书
护理职业生涯规划书
2014/01/24 职场文书
设计专业自荐信
2014/06/19 职场文书
临床专业自荐信
2014/06/22 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏