PHP-CMS代码审计 (3)
经过前两次审计,有点入门的感觉。 这次误打误撞选了emlog来审计。源码就不上传,baidu直接找到官网。
后来才发现,emlog已是发布N年深得认可的blog,所以就不指望找漏洞了。
通过读emlog的代码,算是初步领略到专业架构。前端的路由分发算是抵挡了大部分漏洞,很强大,通篇对上传的参数进行整型校验,或者转义,只是在后台找到注入,然后没有啥意义。
同时也领略了里面的cookie验证,登陆密码验证功能,比一般简单使用md5强太多。
整体给我一种很精简的感觉,很耐看,这种架构很值得学习。
搜了下emlog历史漏洞,有p神发布的em相册漏洞,比较入门的上传漏洞。
https://www.leavesongs.com/PENETRATION/emlog-important-plugin-getshell.html
看了下最新版的相册插件,上传漏洞已经修复,insert注入依然存在,但是需要登陆才行,鸡肋。
1、emlog后台可以很轻松getshell
比如在插件处,把shell.php放在xx文件夹,然后压缩成xx.zip ,上传安装,即可得到/content/plugins/xx/shell.php
2、主题编辑插件 getshell
<?php require_once '../../../init.php'; $result = array(); if (ISLOGIN === false) { $result["status"] = false; $result["msg"] = "没有登陆!"; }else{ require_once 'themeseditor_function.php'; $action = isset($_POST['action']) ? addslashes($_POST['action']) : ''; if(empty($action)){ $result["status"] = false; $result["msg"] = "操作类型错误!"; }else{ if($action == 'save'){ $themeName = $_POST['themeName']; $fileName = $_POST['fileName']; $content = $_POST['content']; $status = saveThemFileContent($themeName,$fileName,$content);
看看saveThemFileContent函数
function saveThemFileContent($themeName,$fileName,$content){ if (!empty($content)) { $fso = fopen(THEMESEDITOR_THEME_PATH.$themeName.'/'.$fileName, 'w'); fwrite($fso, htmlspecialchars_decode($content)); fclose($fso); return true; } return false; }
htmlspecialchars_decode — 将特殊的 HTML 实体转换回普通字符
所以可以直接getshell,要是能配合ssrf或者xss就比较完美
总结:找上传漏洞,全局搜索move_uploaded_file
x000s'''