0x00 前言

这套系统搞了有点久了,漏洞是发现了,但一直卡在某个地方迟迟没拿下来。

下面就分享一下自己审这套系统的整个过程。

0x01 系统简介

 

0x02 审计入口

看到inc\function\global.php 文件

这套系统用了360的防护代码

对get,post,cookie都进行了过滤,但有一点挺有趣的。

在p=admin的时候,post数据是不会过滤的,目测后台是有sql执行这样的功能。(后台还没看)

在下面发现,对get,post数据进行了全局变量注册。可以考虑有没有全局变量覆盖的问题。

在前台用户中心,头像上传的地方发现了个问题。

0x03 漏洞分析

看到文件inc\module\upload_img.php

这个文件用来处理用户头像上传的功能。

在一开始就用白名单写死了后缀名。

接着往下看,看到127行这里

仔细分析代码,这几行代码的意思是获取上传文件的后缀名,并判断是否在允许的后缀名白名单内。

看看这个判断,这是一个与判断,需要前后条件同时成立,才会进入if语块内。

看到后面的条件,判断是否有设置is_h5这个变量??

仔细看看前面的代码,发现并没有获取这个变量的代码,没有初始化,也就是我们可以通过全局变量注册的方式,覆盖整个变量的值,从而绕过白名单判断。

继续往下看,当设置了is_h5变量的时候,也就意味着要使用h5上传的方式来上传头像。

但这里又出现了问题。

分析这里的if判断,同样是与判断,需要同时成立。变量is_h5 的值要等于1的时候才会进入h5上传代码内。

我们可以设置is_h5变量的值不为1即可。

代码继续往下走。

清除之前的图片

写入到临时文件中

从临时文件中读取内容

注意到

这里的$uploadPath在上面有设置:

后缀名是我们传入的。

一个文件上传至getshell漏洞也就达成了。

总结一下,漏洞利用,设置一下is_h5的值,修改上传的文件后缀名为php即可。

至于文件名,程序在最后有输出路径

0x04 一些坑

1,shell的文件路径问题

因为程序在后面,会判断上传的路径是不是在avatar目录下,如果是的话就会把缩略图的路径覆盖uploadPath。

而这个smalltargetFile 是这样复制的。

比原路径中间多了一个_s。

比如我们获取到的路径是这样的。

这个是缩略图的路径:upload\img\avatar\20180125\a1d3bce4bf71c368eb687d89b231f136_s.php

原来的路径只要把_s去掉就好了:

upload\img\avatar\20180125\a1d3bce4bf71c368eb687d89b231f136.php

当然,我们可以手动修改avatar为其他的,只要在程序的白名单内就好。

2,缩略图问题

其实缩略图也是php文件,但是这里是经过php-gd库的,我用jpg_payload.php生成的图片马过了n次都是没成功。望大佬们能指点一下。

0x05 漏洞复现

注册一个会员,来到个人信息设置里,点击上传头像,抓到这样的数据包:

设置一下is_h5的值,不为1就行。

下面的文件名也要改一下后缀。

返回路径:

去掉_s ,请求就是shell地址了。

0x06 总结

总的来说,感觉没什么亮点,但挺有趣的。php的弱类型(之前的dede前台用户密码修改),全局变量注册问题,虽然这里没有弱类型比较问题,但依旧是php类语言源码的审计重点。

之前一直没发现前面还生成了一个php文件,一直想着过gd库耗费了不少时间。

[代码审计]某开源商城前台getshell的更多相关文章

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

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

  2. 关于MVC的开源商城 Nop之闲聊

    nopcommerce是国外的一个高质量的开源b2c网站系统,基于EntityFramework4.0和MVC3.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基 ...

  3. wemall开源商城免费商城系统部分代码(内含代码地址)

    wemall开源商城免费商城系统部分代码,下面分享部分代码,供学习者学习: 开源版把install文件夹下的install.lock删除之后可进行自动安装 后台访问地址:http:// www.xxx ...

  4. ZZZPHP1.61 代码审计-从SQL注入到Getshell

    近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...

  5. PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)

    PHPCMS9.6.0最新版中,由于/modules/attachment/attachments.php的过滤函数的缺陷导致了可以绕过它的过滤机制形成SQL注入漏洞,可导致数据库中数据泄漏. 而且在 ...

  6. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  7. NopCommerce 开源商城下载配置安装

    NopCommerce 是一款开源商城系统,提供了完整的解决方案.应该来说是目前最完善,功能最强劲的商城系统.基于ASP.NET MVC 框架,EF框架,数据库MSSQL. 系统版本涵盖了从MVC3. ...

  8. ShopEX 4.8.5.81822 前台Getshell

    ShopEX 4.8.5.81822 前台Getshell 作者:unhonker   发布:2014-06-23 00:12   分类:漏洞公布   被撸:8,179次   抢沙发     利用方式 ...

  9. phpcms v9 前台getshell脚本

    phpcms v9 前台getshell脚本 用法:python phpcmsv9getshell.py http://baidu.com # -*- coding:utf-8 -*- ''' --- ...

随机推荐

  1. 配置SpringBoot-从日志系统配置说起

    大小系统都需要打日志. 系统在不同环境下对日志的配置要求是不一样的 比如 开发本地: 直接输出到控制台 生产环境: 输出到文件或者额外的日志收集系统, 比如 graylog. (本文不探讨具体日志系统 ...

  2. 天梯 1083 Cantor表

    解题报告:发现规律就可以了,斜着看,第一条线上有1个,第二条线上有2个,....然后求出等差数列前n项和,求出N在第几条线上,然后就看N是在这条线上的第几个就可以了. #include<cstd ...

  3. mysql备份参数--master-data和--dump-slave的介绍

    [mysql@db2 ~]$ mysqldump -A --master-data=2 > master2.sql[mysql@db2 ~]$ mysqldump -A --master-dat ...

  4. JsRender 前端渲染模板常用API学习

    JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的,使用的情况有以下几种. 把html字符串编译编译成模板 获取使用script标签声 ...

  5. JS动态创建元素(两种方法)

    前言 创建元素有两种方法 1)将需要创建的元素,以字符串的形式拼接:找到父级元素,直接对父级元素的innnerHTML进行赋值. 2)使用Document.Element对象自带的一些函数,来实现动态 ...

  6. java基础21 System类和Runtime类

    一.System系统类 1.1.System系统类 主要用于获取系统信息 1.2.System类的常用方法 arraycopy(Object src, int srcPos, Object dest, ...

  7. Java HashCode详解

    一.为什么要有Hash算法 Java中的集合有两类,一类是List,一类是Set.List内的元素是有序的,元素可以重复.Set元素无序,但元素不可重复.要想保证元素不重复,两个元素是否重复应该依据什 ...

  8. python图片处理(一)

    在matlab中有相应的图像进行二值化处理,并且标记连通区域 L = bwlabel(BW,n) 返回一个和BW大小相同的L矩阵,包含了标记连BW中每个连通区域的类别标签,标签的值是1.2.num(连 ...

  9. 向SQL Server 现有表中添加新列并添加描述.

    注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先 ...

  10. qlserver排序规则在全角与半角处理中的应用

    --1.查询区分全角与半角字符--测试数据DECLARE @t TABLE(col varchar(10))INSERT @t SELECT 'aa'UNION ALL SELECT 'Aa'UNIO ...