Author: 坏人咖啡

Real Name:

Profile:

Website:

Posts by 坏人咖啡

为非程序员准备的简洁Python语言教程

date 30 6月 2010 | category Python,学习笔记

为非程序员准备的简洁Python语言教材,欢迎到http://code.google.com/p/hashao/提问。
Python 的中文意思是巨蟒,大蟒蛇。

 

计算机编程主要概念

计算机语言编程的主要内容就这些:数字,文字,循环,公式,变量

数 字: 1, 2, 3, 5.6, 120, 32.4, 3.1415926, -3, -0.123

文字: 你好,我好,你太牛了,很黄很暴力,这类的文字。一般用双引号(“)或者单引号(‘)括起来。术语叫字符串 ,就是一堆字符,串起来。

循环: 循环(loop)就是重复的做一件事。计算机是一个很笨的机器,基本上只会做加,减,乘,除,大于,小于,等于和循环这种简单的工作。编程就是把复杂的问 题,拆成简单的单元让它重复。

幸亏有下面讲到的公式,所以很多较复杂的问题已经有了解决方法,我们只是重 复的套用别人的解决公式就可以了,不用拆得太细。
Python 语言最大的优势,就是这个语言中包含了大量解决常见问题的公式,你想干的事,基本上都有人帮你干了,你只是需要把他们组织,捆绑起来就可以了。比如下载文 件的公式,分析网页内容的公式,压缩文件的公式,处理电子邮件的公式等等。

公式: 就像数学公式 (a+b)2= a2 + 2ab + b2 这种。算的时候带入具体数值,比如:(3+4)2 = 32 + 2*3*4 + 42 = 9+24+16 = 49 …

博客今天终于恢复了

date 30 6月 2010 | category 心情随笔

历时23天博客终于恢复了,伟大的天朝怎么就不允许把域名解析到国外呢?

难道是我没有备案的原因?

不管这么多了能恢复就好!

Nginx文件类型错误解析漏洞的方法

date 09 6月 2010 | category 学习笔记

作者:张宴
80Sec 爆出Nginx具有严重的0day漏洞,详见《Nginx文件类型错误解析漏洞》。只要用户拥有上传图片权限的Nginx+PHP服务器,就有被入侵的可能。

  其实此漏洞并不是Nginx的漏洞,而是PHP PATH_INFO的漏洞,详见:http://bugs.php.net/bug.php?id=50852&edit=1

  例如用户上传了一张照片,访问地址为http://www.domain.com/images/test.jpg,而test.jpg文件内的内容实际上是PHP代码时,通过http://www.domain.com/images/test.jpg/abc.php就能够执行该文件内的PHP代码。

  网上提供的临时解决方法有:

  方法①、修改php.ini,设置 cgi.fix_pathinfo = 0;然后重启php-cgi。此修改会影响到使用PATH_INFO伪静态的应用,例如我以前博文的URL:http://blog.s135.com/read.php/348.htm 就不能访问了。

  方法②、在nginx的配置文件添加如下内容后重启:if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}。该匹配会影响类似 http://www.domain.com/software/5.0/test.php(5.0 为目录),http://www.domain.com/goto.php/phpwind 的URL访问。

  方法③、对于存储图片的location{…},或虚拟主机server{…},只允许纯静态访问,不配置 PHP访问。例如在金山逍遥网论坛、SNS上传的图片、附件,会传送到专门的图片、附件存储服务器集群上(pic.xoyo.com),这组服务器提供纯静态服务,无任何动态PHP配置。各大网站几乎全部进行了图片服务器分离,因此Nginx的此次漏洞对大型网站影响不大。

  本人再提供一种修改nginx.conf配置文件的临时解决方法,兼容“http://blog.s135.com/demo/0day/phpinfo.php/test” 的PATH_INFO伪静态,拒绝“http://blog.s135.com/demo/0day/phpinfo.jpg/test.php” 的漏洞攻击:
location ~* .*\.php($|/)
{
if ($request_filename ~* (.*)\.php) {

桃花庵歌

date 23 5月 2010 | category 心情随笔

桃花坞里桃花庵,桃花庵里桃花仙;桃花仙人种桃树,又摘桃花换酒钱。
酒醒只在花间坐,酒醉还来花下眠;半醒半醉日复日,花开花落年复年。
但愿老死花酒间,不愿鞠躬车马前;车尘马足贵者趣,酒盏花枝贫者缘。
若将富贵比贫者,一在平地一在天;若将贫贱比车马,他得驱驰我得闲。
别人笑我太疯癫,我笑他人看不穿;不见五陵豪杰墓,无花无酒锄作田

nginx文件类型错误解析漏洞

date 21 5月 2010 | category 学习笔记

漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。80sec发现 其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的攻击者可 能攻陷支持php的nginx服务器。
漏洞分析:nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量 SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看 到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP 的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。
那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问

http://www.80sec.com/80sec.jpg/80sec.php
将会得到一个URI

/80sec.jpg/80sec.php

经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为

/scripts/80sec.jpg/80sec.php

而在其他的webserver如lighttpd当中,我们发现其中的SCRIPT_FILENAME被正确的设置为

/scripts/80sec.jpg

所以不存在此问题。
后端的fastcgi在接受到该选项时,会根据fix_pathinfo配置决定是否对SCRIPT_FILENAME进行额外的处理,一般情况下如果不 对fix_pathinfo进行设置将影响使用PATH_INFO进行路由选择的应用,所以该选项一般配置开启。Php通过该选项之后将查找其中真正的脚 本文件名字,查找的方式也是查看文件是否存在,这个时候将分离出SCRIPT_FILENAME和PATH_INFO分别为

/scripts/80sec.jpg和80sec.php

最后,以/scripts/80sec.jpg作为此次请求需要执行的脚本,攻击者就可以实现让nginx以php来解析任何类型的文件了。

POC: 访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/80sec.php,这个时候你可以看到如下的区别:

访问http://www.80sec.com/robots.txt

HTTP/1.1 …

Discuz! 6.x/7.x 全局变量防御绕过漏洞

date 18 5月 2010 | category 学习笔记

ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞

date 18 5月 2010 | category 学习笔记

影响版本:
ECSHOP > 2.7.2

程序介绍:

ECSHOP是一款开源免费的网上商店系统。由专业的开发团队升级维护,为您提供及时高效的技 术支持,您还可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。

漏洞分析:
文 件 search.php
$string = base64_decode(trim($_GET[‘encode’]));   //37行
$_REQUEST = array_merge($_REQUEST, addslashes_deep($string));   //69行
可以看出addslashes_deep 只能参数值进行过滤。
//297行
if (!empty($_REQUEST[‘attr’]))
{
$sql = “SELECT goods_id, COUNT(*) AS num FROM ” . $ecs->table(“goods_attr”) . ” WHERE 0 “;
foreach ($_REQUEST[‘attr’] AS $key => $val)
{
if (is_not_null($val))
{
$attr_num++;
$sql …

ECShop注射漏洞

date 18 5月 2010 | category 学习笔记

EXP