前几天看了水泡泡老哥的zzcms的审计,在论坛上一搜发现这个cms有不少洞。听说很适合小白练手,所以来瞅一瞅。不知道我发现的这个洞是不是已经被爆过了,如果雷同,纯属巧合。

一.Insert注入,直接返回数据
先从默认页index.php入手:

跟进inc/conn.php看一下:

发现include了好多文件,可以看一下每一行的注释,大多数都是定义一些常量。只有inc/function.php和inc/stopsqlin.php不是。先进入function.php看一下,大都是一些公用函数的定义。看看stopsqlin.php:

第一个if用处注释中有了,这里就不说了。直接看黄标,这里用zc_check()处理了$_GET,$_POST和$_COOKIE。这个函数在上面定义了,基本就是在引号前面加个\转义。但是很容易发现,这里并没有过滤$_REQUEST。所以如果某段程序中用$_REQUEST直接获取客户端传来的参数的话,就有可能产生漏洞,可以直接全局搜索一下$_REQUEST。可是我当时没想到,中间又走了些弯路就不说了。直接来到user/adv.php:

可以看到,在37行之后,用REQUEST赋值了很多变量,而这些变量都是原生态的~
从文件头开始看:

inc/conn.php我们一开始就看过了,主要就是对$_GET,$_POST和$_COOKIE做了过滤。跟进下面这个check.php看看:

注意第4行的if条件,如果两个cookie都没set的话,就说明没有登录,进入第一个语句块。重点来了,这里直接用了个js的前端跳转,并没有exit()程序,所以说后面的代码还是会执行的。看一下第二个语句块,这里先query一下数据库,判断是否有返回信息,如果没有的话再来一个js跳转(13行),否则巴拉巴拉巴拉。所以总结下来,这个文件就是用来判断你有没有登录,不过这两个前端跳转形同虚设,后面的代码还是会执行的。回到上个文件adv.php,从那个REQUEST赋值往下看,看到97行有个if:

$action是可控的,进去之后就是个insert语句,语句直接拼接了我们上面通过$_REQUEST获得的变量,所以一个Insert注入就这么形成了。仔细看一下这个insert语句,前面的adv, company, advlink, img都是可控的,后面还有个$_COOKIE"UserName"也是可控的,只有最后两个参数不可控。
下面用BurpSuite演示一下,五个可控的点已经标出来了:
点击下载
瞅一眼数据库(最后一行,别看岔了):

插入成功!既然已经插入了,下面就要找一下在哪里能把这个结果给输出出来。继续往下看,发现输出就在下面:

110行有个select,根据username字段检索表,然后输出在那几个红线位置。这里回想一下,在上一个insert中,username是可控的,由$_COOKIE['UserName']控制,而这里的username也是如此。但是由于insert在select的前面,所以在我们第一次请求中,结果中就已经包含了我们注入的信息。回到BurpSuite看一看,果然:

返回很多,不只这一个,既然先看到他,就拿他爆数据吧。回到insert语句,由于这几个变量都是被包在单引号内的,而且引号并没有被转义,所以直接常规操作。

注意一下红线部分,由于adv直接闭合了括号,所以这里的username不再是从cookie中获取的了,而是这个5678(必须是唯一的,否则后面会select出多行记录)。因此Cookie的值也是5678,这个是用于select取数据。这里有个小坑,adv这个字段好像是不能重复的,所以测试的时候注意一下。
请求之后看一下数据库(最后一行):

这里可以看到,advlink已经被注入了user()了。看一下页面:

总结一下:
1.代码仅过滤了$_GET, $_POST, $_COOKIE, 而没有过滤$_REQUEST。
2.检查登录时,如果不符合要求并没有用exit()退出程序。

二.任意文件删除
还是上面那个文件:adv.php,还是上面那个图,我直接给复制过来了。看看第二个if,$oldimg是REQUEST得到的变量,所以这里有个任意文件删除。

根目录新建了个文件:DeleteMeBro.php。由于代码中已经将$oldimg与../拼接了(101行),所以参数直接写文件名就好:

回文件夹看看,删除成功。
ps: 我发现这个洞和水泡泡之前发的那个任意文件删除一模一样。。。

ZZCMS v8.2 前台Insert注入+任意文件删除的更多相关文章

  1. ThinkSNS2.5前台getshell+后台任意文件删除

    12年爆出的一个洞 前几天比赛的一个cms  于是跟出题人表哥要过来审计了看看 漏洞文件再根目录thumb.php中 <?php /* * 自动缩略图 参数 url|w|h|type=" ...

  2. [代码审计]云优cms V 1.1.2前台多处sql注入,任意文件删除修复绕过至getshell

    0X00 总体简介 云优CMS于2017年9月上线全新版本,二级域名分站,内容分站独立,七牛云存储,自定义字段,自定义表单,自定义栏目权限,自定义管理权限等众多功能深受用户青睐,上线短短3个月,下载次 ...

  3. PHP:网展cms后台任意文件删除和sql注入

    0x01:目录结构 可以发现Frameword是框架的文件 install安装 public公共文件 uploads储存上传之类的文件 webuser后台文件 Home前台文件 0x02.csrf漏洞 ...

  4. Discuz!X 3.4 前台任意文件删除漏洞复现

    Discuz!X 3.4 前台任意文件删除漏洞复现 参考链接: http://www.freebuf.com/vuls/149904.html http://www.freebuf.com/artic ...

  5. Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除

    本文作者:X_Al3r Prat 0 自白 每一天都是新的一天.没啥吐槽的,步入正题 /system/category.php 文件一处Sql注入## 80-87行代码         $root_i ...

  6. [代码审计]phpshe开源商城后台两处任意文件删除至getshell

    0x00 背景 这套系统审了很久了,审计的版本是1.6,前台审不出个所以然来.前台的限制做的很死. 入库的数据都是经过mysql_real_escape_string,htmlspecialchars ...

  7. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  8. 【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  9. 【代码审计】XIAOCMS_后台database.php页面存在任意文件删除漏洞

      0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...

随机推荐

  1. 安装ipset车祸现场

    基础环境centos6.8内核2.6.32. 本身服务器带的是6.11ipset版本,业务需求,需要升级到6.32 ipset-6.32 ./configure 报错 configure: error ...

  2. Java中的Unsafe类111

    1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...

  3. Mysql-如何正确的使用索引以及索引的原理

    一. 介绍 二. 索引的原理 三. 索引的数据结构 四. 聚集索引与辅助索引 五. MySQL索引管理 六. 测试索引 七. 正确使用索引 八. 联合索引与覆盖索引 九. 查询优化神器-explain ...

  4. compress.go

    The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // l ...

  5. 理解Go Context机制

    1 什么是Context 最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也 ...

  6. C++11标准中常用到的各种算法汇总.

    在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据 ...

  7. Postman----打开postman console控制台,查看接口测试打印log

    经常在脚本中使用变量时,你可能需要看到变量获取到的值,你可以使用Postman Console去实现的.操作步骤:应用菜单-->View--->Show Postman Console,去 ...

  8. 利用css+原生js制作简易钟表

    利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...

  9. Flask导入静态文件问题

    然而如果使用flask开发web,并且需要在本地导入已经写好的css js 文件或者image一系列,这些文件是静态文件,需要另外建一个文件夹static;并且在html文件修改导入方法,exampl ...

  10. sum() 函数性能堪忧,列表降维有何良方?

    本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/mK1nav2vKykZaKw_TY-rtw Python 的内置函数 ...