-
python的常见命令注入威胁
小G@北京 2012/5/15 18:45
ah!其实没有标题说的那么严重!
不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的《python hack》PPT,里面提及了不只命令执行的威胁,那些都是我们亲身经历的代码。
千万要记得执行命令的时候,不要信任其他传入数据就行了,既然意识到问题,那么修复方法是多种多样的。
在我们的系统中,多处出现问题然后修修补补是不靠谱的,那么我们需要一个通用的安全执行接口,这个接口过后更新进来。
此外,我们在开发新功能的时候,也要掌握安全编程的规范技巧,这些技巧不局限在命令执行安全。
总结了一下,就是一下几点要素啦:
- 命令执行的字符串不要去拼接输入的参数,非要拼接的话,要对输入参数进行白名单过滤
- 对传入的参数一定要做类型校验,例如知道是数字型的,就int测试一下,会安全许多
- 对于拼接串,也要严格一些,例如int类型参数的拼接,对于参数要用%d,不要%s。
- 使用subprocess来传入多个参数,就可以防止命令行注入
没有评论 -
多线程下pymongo连接数过多的问题处理
背景
项目中有个应用,用到了多线程,线程中会有对MongoDB的操作。一般涉及到这种场景,都会小心MongoDB的连接的数量控制。
实现这个应用的时候必然已经考虑这点了,但实际碰到的情况是:多线程的程序运行起来,MongoDB连接数比预期多。
涉及的环境:
- Linux
- Python 2.6.5
- MongoDB 2.0.0
- MongoDB的驱动是pymongo。本文涉及的版本有4个:1.1.1、2.0.1、2.1.1,以及最新的2.2rc1。
过程
简化的代码
先用一段简化的代码来说明下这个问题。
12345678910111213141516#-*- encoding:UTF-8 -*-import threadingimport timeimport pymongosingle_conn = pymongo.Connection('mongodb://127.0.0.1', max_pool_size=1)class SimpleExampleThread(threading.Thread):def run(self):print single_conn['fvck'].damnit.count(), self.getName()time.sleep(10)for i in range(100):SimpleExampleThread().start()代码的大致意思是创建1个MongoDB连接,然后生成100个线程,在线程中会有对MongoDB的操作 Read More »
-
关于 Content-Encoding: gzip
背景
===
如果你的网页抓取程序(例如爬虫)在抓取网页时没有发送 Accept-Encoding: gzip,那么你 out 了:
因为今天超过 99% 的网页抓取程序都会声明支持 gzip (或 deflate) 编码。如果你的程序属于这 99%,那么恭喜,但别高兴的太早。 你的程序是否正确处理了 Content-Encoding: gzip?
问题
===
典型的处理 Content-Encoding: gzip 的代码片段 (python):html_data = GzipFile(fileobj=StringIO(html_data), mode="r").read()
假设 html_data 为 Web 服务器返回的Content-Encoding 为 gzip 的数据。
那么在大多数情况下,上述代码都能正确处理。 但很不幸,你会发现,对有些 url,浏览器可以正常显示内容,
但是你的网页抓取程序会出错!分析
===
不是所有 Web 服务器(或应用)都是遵纪守法的公民。 极少数应用,会在 gzip 压缩后的数据后面,添加一些“尾巴”数据。
一些数据解压模块(如Python 的 GzipFile 模块)在这种情况下会出现处理异常。例外的是浏览器。它们充分体会和考虑到了现实世界的复杂,会自动抛弃多出的“尾巴”,正常解压和处理页面数据。
解决
===
Python GzipFile 模块有个未公开属性: extrabuf, 负责保存已经成功解压的数据。 因此,下面的代码有更好的兼容性:12345try:gf = GzipFile(fileobj=StringIO(html_data), mode="r")html_data = gf.read()except:html_data = gf.extrabuf -
知道创宇在赵灵儿家乡封闭开发
现在正在进行的是在仙剑奇侠传,赵林灵儿家乡进行封闭开发 -- 云南大理古城,点苍山脚下,洱海之畔,蝴蝶泉边 ;到丽江只有4小时车程。
知道创宇的童鞋们从各地齐聚在东临碧波荡漾的洱海,西倚常年青翠的苍山的大理古城啦!
-
Web应用漏洞的大规模攻击案例分析
当一个流行的Web应用漏洞碰到充满想象力的Web Hackers,会产生什么化学效应?
By GreySign@Yunnan:2012/3/20
我们常常听闻各种Web漏洞被发现、被利用、被大肆宣传,或许安全厂商们都多多少少有点让用户们觉得这只是恐吓营销的手段,
但我们从不这么认为。
从我们的团队创立至今,分析、深入追踪过的案例大大小小已经数不清,但我们也相信,这些被发现的精彩的大规模攻击、APT攻击(当最初我们看到各种高级攻击的时候,还不知道如何称呼它们)只是冰山一角,浮出水面的每个事件,在经过各位安全研究员的深入分析,都足以拍成一部电影。
Anonymous对全球白帽子下了3月31日瘫痪DNS根服务器的挑战书的时候,我相信在这个互联网上大隐于市的高手们经已蓄势待发,默默捍卫承载着无数梦想的国度。与此同时,我们也在贡献着力所能及的微薄力量,时刻响应来自客户、来自国家、来自互联网那些需要我们帮助的安全事件。
在最近一段时间,我们发现了一个大规模攻击,与各位共享一下这个有意思的追踪过程。 Read More »
-
[实用开源]用于网络包检查的内核模块
非常简单的网络包检查的内核模块,基于此可以做更多有意义的事情。基于内核 3.2 测试通过。
pkt_chk.c
1234567/*** @file* @author Z. Liu** @brief kernel module for packet inspection*/ -
[实用开源]端口转发小工具rtcp.py
余弦(@evilcos)
rtcp.py一直是我们使用于端口转发场景下的小工具,用python实现的。大概是09年,老杨给大家的一次作业,当时的几个技术人都写出了自己的一版,不过最终版本还是使用老杨写的,然后大家一起修修补补吧,经过几年的使用,感觉还是挺不错的,不愿独享,乘着这次blog新版出现,就开源了吧。
我们曾说过:我们来自开源,也将走向开源。
rtcp.py使用场景之一如下:
A服务器在内网,公网无法直接访问这台服务器,但是A服务器可以联网访问公网的B服务器(假设IP为222.2.2.2)。
我们也可以访问公网的B服务器。我们的目标是访问A服务器的22端口。那么可以这样:
1. 在B服务器上运行:
./rtcp.py l:10001 l:10002
表示在本地监听了10001与10002两个端口,这样,这两个端口就可以互相传输数据了。
2. 在A服务器上运行:
./rtcp.py c:localhost:22 c:222.2.2.2:10001
表示连接本地的22端口与B服务器的10001端口,这两个端口也可以互相传输数据了。
3. 然后我们就可以这样来访问A服务器的22端口了:
ssh 222.2.2.2 -p 10002
原理很简单,这个命令执行后,B服务器的10002端口接收到的任何数据都会传给10001端口,此时,A服务器是连接了B服务器的10001端口的,数据就会传给A服务器,最终进入A服务器的22端口。关于这个小工具的更多信息可以查看:https://github.com/knownsec/rtcp,同时欢迎关注https://github.com/knownsec/,我们的开源站!
-
机器人之旅:当Arduino遇上Android
相信很多同学都看过android手机那个很酷的宣传片(android手机+乐高搭建的解魔方机器人)。打小就一直梦想着能拥有一个自己亲手做的机器人,尤其是看完那部经典的机器管家(http://movie.douban.com/subject/1292529/,不过估计宅男们更喜欢《我的机器人女友》)。
貌似这个理想是渐行渐远了,直到老杨强烈给推荐arduino,让我们这些电路基础一般的爱好者也能有机会动手搭建自己的机器人,只要搞搞结构设计再coding一把,而不用困扰于具体的电路实现、传感器控制。鉴于现在的android手机功能都那么强劲,当然得充分利用一把了。上周在公司的showcase上给大家秀了一下基于arduino和android的蓝牙机器人小车,下一个目标就是整个遥控灰机。
什么是Arudino(百度百科):
Arduino,是一块基于开放源代码的USB接口Simple i/o接口板(包括12通道数字GPIO,4通道PWM输出,6-8通道10bit ADC输入通道),并且具有使用类似Java,C语言的IDE集成开发环境。
让您可以快速使用Arduino语言与Flash或Processing…等软件,作出互动作品。
Arduino可以使用开发完成的电子元件例如Switch或sensors或其他控制器、LED、步进马达或其他输出装置。Arduino也可以独立运作成为一个可以跟软件沟通的接口,例如说:flash、processing、Max/MSP、VVVV 或其他互动软件…。Arduino开发IDE接口基于开放源代码原,可以让您免费下载使用开发出更多令人惊艳的互动作品。
-
XSS Hack:获取浏览器记住的明文密码
余弦(@evilcos)
0x01. XSS获取明文密码的多种方式
我已经感受到Web潮流带来的巨大革新,尤其是最近HTML5越来越火。浏览器们在客户端瓜分着这个Web OS,只要是对用户体验好的功能,浏览器之间就会互相学习,然后去实现,但是实现总是存在一些差异,有些差异是用户体验上的,有些则可能带来安全问题。
这篇文章是想深入描述下浏览器记住用户密码这种机制带来的安全问题与实现上的一些差异性。黑客们如何通过技巧获取到浏览器保存的密码,明文。先回到XSS本身上,XSS获取明文密码的方式有哪些?
1. 通过DHTML钓鱼方式
比如document.write出一个登陆页面,或一个登录框。也就是目标网站的登录方式是怎样的,就通过DOM模拟出怎样的。用户很难区分同域内的钓鱼,如果再次输入密码登录时就悲剧了。
2. 通过JavaScript hook住密码框
满足某个事件(如onsubmit/onblur/onchange等)就记录之。
3. 通过JavaScript实现键盘记录器的功能
监听用户在表单里的击键事件,记录击键的值,有时候这个效果会非常不错。