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

posted @ 2020-02-16 13:55  B1gstar  阅读(183)  评论(0编辑  收藏  举报