A-A+
培训资料课后分析 – 有漏洞的CMS

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
先给出action.php文件代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php require_once("library/common.php"); require_once("library/view.php"); $page = filter($_POST['page']).'.php'; $post_data = array(); foreach ($_POST as $key => $value) { $post_data[$key] = $value; } if (file_exists($page)) { @require_once($page); } ?> |
然后给出另一个文件代码。 normaliz.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?php require_once("library/common.php"); require_once("library/view.php"); function action($post_data, $ip_replacement, $mail_replacement){ foreach ($post_data as $key => $value) { $$key = $value; } try{ if ($method == '/\\d+\\.\\d+\\.\\d+\\.\\d+/') { $res = preg_replace($method, $ip_replacement, $source); } else { $res = preg_replace($method, $mail_replacement, $source); } } catch(Exception $e) { write_log($e->getMessage()); $res=$source; } return $res; } $view_class = new View(); $data = array(); $data['page'] = 'normaliz'; $ip_replacement = '222.222.222.222'; $mail_replacement = '[email protected]'; $data['res'] = action($post_data, $ip_replacement, $mail_replacement); $view_class->echoContent($data['page'], $data); ?> |
有问题的地方在第二个文件。这里我思路陷入了write_log 这个函数,因为这个函数里面是有问题的,可以写入一句话木马,我一直想着怎么能让程序出错,然后进去到catch。结果陷入误区。PHP错误与异常处理 try catch Exception Throwable 查看此文章,然后这里我注意到 $$key = $value; 很明显存在变量覆盖问题,然后再往下看。因为变量覆盖,所以res = preg_replace($method, $mail_replacement, $source); 这里的值都可以执行。那么直接利用PHP5.6之前的特性 加上/e 直接可以执行。

布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏