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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
为什么Python中没有"a++"这种写法
Nov 27 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python实现转圈打印矩阵
Mar 02 Python
NumPy 数组使用大全
Apr 25 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
python Plotly绘图工具的简单使用
Mar 03 Python
python使用建议与技巧分享(二)
Aug 17 Python
如何利用opencv判断两张图片是否相同详解
Jul 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
Python urlopen()函数 示例分享
2014/06/12 Python
Python中除法使用的注意事项
2014/08/21 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
pandas的qcut()方法详解
2019/07/06 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
工厂会计员职责
2014/02/06 职场文书
五好党支部事迹材料
2014/02/06 职场文书
一名老师的自我评价
2014/02/07 职场文书
高中综合实践活动总结
2014/07/07 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
上诉状格式
2015/05/23 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis