2011-03-16 17:57 80vul-b is dead , bye everyone !!! |
2009-06-22 19:04 看的是v6版的,在do/job.php文件:
...
}elseif(ereg("^([-_0-9a-zA-Z]+)$",$_GET[job])||ereg("^([-_0-9a-zA-Z]+)$",$_POST[job])){
require(dirname(__FILE__)."/"."global.php");
if(is_file(PHP168_PATH."inc/job/$job.php")){
include(PHP168_PATH."inc/job/$job.php");
}
}
嗯,如果开了全局的话,就可以用gpc的变量注册顺序来pass那个正则判断,不过php168很友善的搞了个模拟register_globals=on的功能,在inc/common.inc.php文件:
...
if(!ini_get('register_globals')){
@extract($_COOKIE,EXTR_SKIP);
@extract($_FILES,EXTR_SKIP);
}
foreach($_POST as $_key=>$_value){
!ereg("^\_[A-Z]+",$_key) && $$_key=$_POST[$_key];
}
foreach($_GET as $_key=>$_value){
!ereg("^\_[A-Z]+",$_key) && $$_key=$_GET[$_key];
}
...
嗯,可以很容易的pass上面的判断了,不过这里的变量注册顺序和gpc默认的变量注册顺序是有些不同的:) |
2009-06-19 13:19 昨天php5.2.10出来了,fix了 PCH-006里提到的bug:
Fixed bug #45997 (safe_mode bypass with exec/system/passthru (windows only))
然而遗憾的是还有问题,看看php是咋fix这个的:
...
b = strrchr(cmd, PHP_DIR_SEPARATOR);
#ifdef PHP_WIN32
if (b && *b == '\\' && b == cmd) {
// 注意标红的代码:p
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid absolute path.");
goto err;
}
#endif
...
恩,fix后执行exec('\dir')会报错,但是exec('80vul\b\dir')依旧会执行:)
还有就是这个bug和php_escape_shell_cmd函数的处理方式有关,即使是php_exec_ex函数fix了,其他的函数调用时没有处理好呢? |
| | |