一个比较好玩的WebShell上传检测绕过案例

背景介绍

一次普通的 WEB 测试过程,遇到了一个上传点,可以上传固定图片格式但是可以任意名字+任意后缀名的文件。

环境

IIS 7.5/ ASP.NET - Windos SERVER 2008 R2

过程

0x1 测试

看起来怼这个好像没有任何技术含量,直接扔图片马就是了。

但是呢,一般的图片马是不行的,回顾一下我们经常用也是流传最广的做图片马的方式。

1: 直接在 shell 头加 gif89a 2: 使用 Copy 大法 3: 没了

相信大多数人都是用的都是以上的几种方式,平常来说图片马不能用都是直接放弃的这个点的。

那么这里介绍另外一种,拓展信息插一句话。

先说说上传点的检测机制:程序采用 GDI+ 插件将用户上传的图片处理后保存。

作者的脑子很简单,当然这个思路也没什么错,毕竟只要是正常的图片文件没必要拦截。

而作者写的这个程序也的确很牛逼,copy 大法是完全失效的。

经过 copy 的图片马在程序过滤后都被剔除干净了。

可以看到用 Copy 打发做出来的被过滤的啥也不剩了,尝试了各种混合模式都不行。

所以看起来理论上这玩意能拦截除了图片本身的信息之外的任何额外附加信息。

0x2 绕过

但是呢, 程序作者好像漏了什么,图片本身的信息也是大有作为的。

前面提到的拓展信息插一句话,右键属性然后添加就行。

而这种手段,基本上四肢健全不需要像我一样定期去看兽医的一看就会,不需要写代码也不需要额外的工具。

用 BurpSuite 怼上去。

总结:

不要相信用户输入的任何信息,也不要对自己的编码水平有太高的期望。

在本次案例中,首先是未对上传文件的名称做任何校验就写入硬盘这明显是不可取的。

其次就是对 GDI+ 插件的过分信任,并没有对扩展信息内容做校验便立即放行了。

更加厉害的是,通过查询服务器进程发现,服务器是裸奔状态。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流柯技术学院

linux下MySQL表名忽略大小写设置

最近公司项目的MySQL数据库要迁移到linux下,部署时日志总是显示报找不到一个表,用MYSQL查看明明有这个表。后来经百度,原来LINUX下的MYSQL默认...

2122
来自专栏Albert陈凯

2018-09-11 Svn升级Git不需要那么痛URL that points to a project root(may be the same as Subversion repository

一. 介绍 SubGit是用java语言编写的。SubGit是一种subversion与git代码库之间双向同步工具。如何在本地subversion版本库上安...

1321
来自专栏云计算与大数据

研发:Redis4.0 编译安装

4. 采用make PREFIX=/usr/local/redis install

1182
来自专栏木制robot技术杂谈

用Python模拟登陆微博

前言 最近在研究模拟登陆,看了很多教程,发现基本上都是只教怎么处理后就能登陆成功,没有讲解怎样得到处理的方法。经过的一天的研究,把微博模拟登陆基本上弄清楚了,下...

3969
来自专栏乐百川的学习频道

安装和使用MongoDB

MongoDB是一个著名的NoSQL数据库,顾名思义就是不使用SQL的数据库,目前在很多场景都有使用。如果你不喜欢使用笨拙的各种SQL数据库,可以尝试使用一下M...

8856
来自专栏bboysoul

在树莓派上搭建使用gitlab

gitlab是一个代码托管平台,因为我的树莓派系统是安装在128G的u盘上的,用来放电影太小,但是空着就是空着了,所以还不如再搭建一个gitlab服务来存放自己...

1952
来自专栏逸鹏说道

熔断器设计模式

如果大家有印象的话,尤其是夏天,如果家里用电负载过大,比如开了很多家用电器,就会”自动跳闸”,此时电路就会断开。在以前更古老的一种方式是”保险丝”,当负载过大,...

2745
来自专栏后端技术探索

nginx,memcached,redis网络模型总结

nginx采用多进程模型,含一个master进程和多个worker进程,worker进程数目可配置,一般与机器CPU核心数目一致,master进程主要职责是:接...

1902
来自专栏搜云库

Spring Boot 中使用 公共配置

常用应用属性 可以在application.properties / application.yml file中指定各种属性,也可以在命令行开关中指定。本节提供...

52410
来自专栏开源项目

码云推荐 | 基于 php 的定时计划任务框架 taskPHP

taskPHP 基于原生态 php 开发的定时计划任务框架,利用多进程实现任务的分配和运行,利用原生态php内存共享实现进程间通信,支持 Linux 和 Win...

47010

扫码关注云+社区