0x00 背景

这套系统审了很久了,审计的版本是1.6,前台审不出个所以然来。前台的限制做的很死。

入库的数据都是经过mysql_real_escape_string,htmlspecialchars的处理。

二次注入没找到,逻辑漏洞也没找到。抛开实际利用来说,简单讲讲两个任意文件删除漏洞,在拿到后台之后的getshell方法。

0x01 phpshe程序简介

phpshe是一个开源商城程序,程序在前台入库的地方都用了pe_dbhold函数(mysql_real_escape_string,htmlspecialchars过滤),虽然用的是全局变量注册,但是进行了变量的划分。

加上了各自不同请求的前缀。使得变量不能夸请求覆盖,同时底层有入库的参数值都是用单引号进行包含。

所以注入是不可能的了,加上htmlsepcialchars的过滤,连xss都没发现一个。

上传方面用的是白名单,限死了后缀,加上文件名重命名,使用时间加上大范围随机数md5的方法。

前台就介绍到这里,讲讲后台的一些情况。

后台大部分都进行了csrf防御,只有少部分没有(一些查询操作,没有实际作用),几乎所有后台页面都是存在注入,但由于程序是没有开启报错的。

所以是没有办法通过报错的方式拿到绝对路径,后台的注入其实等于没用,也没有越权的情况(通过鉴权文件,加载后台模块)。

看了一下乌云镜像站上关于该程序的历史漏洞也是少的可怜,程序的安全性确实做得很好。

那么下面就讲讲两个后台任意文件删除,与及拿shell。

0x02 后台两处任意文件删除至getshell

1,文件module\admin\db.php( 数据库操作相关)

没有任何过滤,直接拼接路径删除。但是有csrf防御。

2,文件 module\admin\moban.php(模板操作相关)

也是等同于没有任何过滤,有csrf token防御。

再看看安装文件的逻辑。

将配置参数写入到配置文件中,直接写入,没有任何过滤,可以通过重装的方式直接getshell。(动作太大了)


 0x03 更新

更新一下吧,有几个小问题。

一个是前台的任意用户密码重置,犯了最常见的用户密码重置的错误之一,直接把token返回到前端了。

当然,这个在实际环境颇为鸡肋,需要知道用户的用户名和邮箱(且这套系统的普通用户登录时不需要验证码的,直接爆破就好了)

文件:/module/user/do.php

而其实这里是我之前在找头攻击的时候无意之中发现的。

这里也是存在着host头攻击的,找回密码的方式用的是链接的方式,存在着头攻击。

文件:/module/user/do.php

这里要提一下头攻击的问题。可以参考林林总总的Host Header Attack这篇文章与及p牛提攻击《LNMP架构Web应用的几个小Tricks》提到的nignx+php获取host头的Tirck。

当环境是apache+php的时候,p牛没有说明,我自己测了一下,总结下来就是

apache 解析host头的时候取得是最后一个,而PHP通过$_SERVER['HTTP_HOST']取到的host头为所有的,用逗号隔开。

比如存在多个Host头的时候,

Host: www.phpshe.cc
Host: www.unkown.com  

此时apache 取得的Host是www.unkown.com,而php 通过$_SERVER['HTTP_HOST']取到的host头的值为:www.phpshe.cc,www.unkown.com。

无论是apache 还是nginx 都是可以配置多个server的,当它们找不到server的时候都会发送给默认的server进行处理。而这个默认的server是指在配置文件中排列较前的server配置。

所以这里的头攻击,倘若是apache+php的模式的话,主机上必须只能架设目标网站一个server,否则就会失效。

还有就是后台管理登录处无视验证码直接爆破。

看到文件/module/amdin/do.php, 后台登录代码:

整个逻辑判断竟然是先去数据库里面去匹配用户名和密码,如果用户名和密码正确,才判断验证码。那么完完全全可以无视验证码了。

当用户名和密码正确的时候,验证码错误时返回验证码错误。

当用户名和密码错误的时候,直接返回用户名和密码错误。

当然这里只是代码的表现,但其实在实际中是看不到这些提示的,实际操作后发现可以通过返回包中是否是直接跳转到admin.php来判断。

当用户名和密码错误的时候,跳转回登录页面继续登录。

当用户名和密码正确的时候,直接跳转到admin.php

0x04 总结

看了很久这个程序,没有审出什么来,写个总结吧!

死磕了很久,依旧没有发现比较严重的问题,颇为鸡肋。

想寻找几个经典案例感觉都挺难的,菜鸡仍需努力啊!

[代码审计]phpshe开源商城后台两处任意文件删除至getshell的更多相关文章

  1. WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)

    0x01 前言 CNCERT前几天发公告称发现Oracle公司出品的基于JavaEE结构的中间件WebLogic产品存在一个远程上传漏洞,并得到了厂商的确认,危害程度评分高达9.8分.鉴于厂商已进行了 ...

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

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

  3. 【代码审计】iZhanCMS_v2.1 后台任意文件删除漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  4. 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

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

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

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

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

  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. PHP:网展cms后台任意文件删除和sql注入

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

随机推荐

  1. 纯干货!一款APP从设计稿到切图过程全方位揭秘(转)

    @BAT_LCK :我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程的介绍吧.公司不同,流程不尽相同,但是终究还是能有些帮助. 依旧声 ...

  2. 集合框架基础知识-----java基础知识

    Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...

  3. Hadoop生态圈-Flume的主流Sinks源配置

    Hadoop生态圈-Flume的主流Sinks源配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客只是配置的是Flume主流的Sinks,想要了解更详细的配置信息请参考官 ...

  4. [应用篇]第二篇 JSP自带标签介绍

    JSP 有以下三类标签: 指令:JSP Directive 指令标签用于设置与整个 JSP 页面相关的属性,非常常用. 下面的三种标签是我们使用频率最高的 标签 jsp标签 描述 <%@ pag ...

  5. Java SpringMVC框架学习(二)httpServeltRequest和Model传值的区别

    HttpServletRequest 为什么大多程序在controller中给jsp传值时使用model.addAttribute()而不使用httpServeletRequest.setAttrib ...

  6. html文件中jquery与velocity变量中的$冲突的解决方法

    1.使用jQuery代替$. 如:jQuery.ajax(); 缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发 2.使用jQuery.noConflict. 如:var j = jQuery.n ...

  7. 浅说Get请求和Post请求

    Web 上最常用的两种 Http 请求就是 Get 请求和 Post 请求了.我们在做 java web 开发时,也总会在 servlet 中通过 doGet 和 doPost 方法来处理请求:更经常 ...

  8. Mysql备份文件

  9. 【Windows编程】大量病毒分析报告辅助工具编写

    解决重复劳动 是否在分析单个病毒时很爽,分析N个病毒写报告很机械的情况.. 1)样本下载多个文件,这些文件写报告时要加上这些文件的MD5 2)写报告时明明是17个MD5,实际样本有18个的情况.不知道 ...

  10. Linux中断(interrupt)子系统之三:中断流控处理层【转】

    转自:http://blog.csdn.net/droidphone/article/details/7489756 1.  中断流控层简介 早期的内核版本中,几乎所有的中断都是由__do_IRQ函数 ...