博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[代码审计]某开源商城前台getshell
阅读量:5213 次
发布时间:2019-06-14

本文共 1536 字,大约阅读时间需要 5 分钟。

0x00 前言

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

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

 

0x01 系统简介

 

0x02 审计入口

看到inc\function\global.php 文件

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

 

 

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

 

 

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

 

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

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

 

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库耗费了不少时间。

转载于:https://www.cnblogs.com/r00tuser/p/8417806.html

你可能感兴趣的文章
盒子模型&position定位
查看>>
docker容器里设置中文时区
查看>>
微服务应用日志处理与组件封装
查看>>
springmvc的异常处理
查看>>
Python+Selenium与Chrome如何进行完美结合
查看>>
Windows10一周年庆典壁纸
查看>>
kibana对logstash监控获取不到数据
查看>>
UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)
查看>>
IIS7上设置MIME让其支持android和Iphone的更新下载
查看>>
数据库系统原理
查看>>
leetcode 947. Most Stones Removed with Same Row or Column
查看>>
mong 按 geometry 搜索 地理位置信息
查看>>
框架网址和其他的一些网址
查看>>
angular ng-class\tab切换(从服务器引入数据)或用指令写
查看>>
不要追求最新的技术
查看>>
Oracle Golden Gate 系列十五 -- GG Trails 说明
查看>>
Oracle 11g 新特性 -- SecureFiles 说明
查看>>
Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
查看>>
梳理 Opengl ES 3.0 (三)顶点坐标变换
查看>>
Office2010安装错误
查看>>