[代码审计]某开源商城前台getshell
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的更多相关文章
- [代码审计]phpshe开源商城后台两处任意文件删除至getshell
0x00 背景 这套系统审了很久了,审计的版本是1.6,前台审不出个所以然来.前台的限制做的很死. 入库的数据都是经过mysql_real_escape_string,htmlspecialchars ...
- 关于MVC的开源商城 Nop之闲聊
nopcommerce是国外的一个高质量的开源b2c网站系统,基于EntityFramework4.0和MVC3.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基 ...
- wemall开源商城免费商城系统部分代码(内含代码地址)
wemall开源商城免费商城系统部分代码,下面分享部分代码,供学习者学习: 开源版把install文件夹下的install.lock删除之后可进行自动安装 后台访问地址:http:// www.xxx ...
- ZZZPHP1.61 代码审计-从SQL注入到Getshell
近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...
- PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)
PHPCMS9.6.0最新版中,由于/modules/attachment/attachments.php的过滤函数的缺陷导致了可以绕过它的过滤机制形成SQL注入漏洞,可导致数据库中数据泄漏. 而且在 ...
- 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.
刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.
- NopCommerce 开源商城下载配置安装
NopCommerce 是一款开源商城系统,提供了完整的解决方案.应该来说是目前最完善,功能最强劲的商城系统.基于ASP.NET MVC 框架,EF框架,数据库MSSQL. 系统版本涵盖了从MVC3. ...
- ShopEX 4.8.5.81822 前台Getshell
ShopEX 4.8.5.81822 前台Getshell 作者:unhonker 发布:2014-06-23 00:12 分类:漏洞公布 被撸:8,179次 抢沙发 利用方式 ...
- phpcms v9 前台getshell脚本
phpcms v9 前台getshell脚本 用法:python phpcmsv9getshell.py http://baidu.com # -*- coding:utf-8 -*- ''' --- ...
随机推荐
- Grep学习笔记
Grep(Global search Regular Expression and Print out the line)是一种强大的文本搜索工具. 1. 正则表达式的基本组成部分 正则表达式 描述 ...
- 【CodeForces】906 D. Power Tower 扩展欧拉定理
[题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...
- 【leetcode 简单】 第一百五十题 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...
- Python练习-time模块
明天的明天的明天,雾草! # 编辑者:闫龙 #显示当前时间三天后是星期几? import time t = time.time()+((24*3600)*3) tl = time.localtime( ...
- 【Loadrunner】LR参数化:利用mysql数据库里面的数据进行参数化
很多同学都在自学loadrunner去做压力测试,但是如果要利用LR做压力测试,或者是其他工具,其中有一个环节是我们避开不了的,比如说:参数化 今天华华就给大家简要的介绍下,如果你要做的参数化的数据来 ...
- 【译】第三篇 Replication:事务复制-发布服务器
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...
- JavaScript 实用技巧和写法建议
1.前言 从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,更要去推敲,去摸索和优化代码,总结当中的技 ...
- [转]激活函数ReLU、Leaky ReLU、PReLU和RReLU
“激活函数”能分成两类——“饱和激活函数”和“非饱和激活函数”. sigmoid和tanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”.使用“非饱和激活函数”的优势在于两点: 1 ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解【转】
转自 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均 ...
- C# 调用WSDL接口及方法
1.首先需要清楚WSDL的引用地址 如:http://XX.XX.4.146:8089/axis/services/getfileno?wsdl 上述地址的构造为 类名getfileno. 2.在.N ...