记录一下文件上传的常见姿势,更全面的可以做upload-labs。

实验环境:win2003 phpstudy

实验平台:upfile

一、准备上传的一句话木马

eval函数将接受的字符串当做代码执行

二、实验步骤

2.1 无防护上传

可以直接上传一句话木马文件

可以看到已经成功上传,并返回了相关信息。

可以使用菜刀连接

实际上权限已经有很多,但是也可以用一句话木马上传大马进行其他操作。

2.2 前台脚本检测扩展名

这里增加在前端增加了限制,如果直接上传php文件会被拒绝

可以先把文件改成允许上传的格式,比如jpg格式,

然后进行抓包,通过前端的检测之后再进行改包:

这样上传成功了,再通过工具连接:

2.3 服务器验证Content-type检测文件类型

这样直接上传也是不能通过的:

因为检测的地方是Content-type,所以抓包替换成可以上传的type就可以了:

可以看到,文件本身没有变化,但是最后也成功上传了。

2.4 服务器端验证文件扩展名

这样后端进行验证,利用办法是修改文件上传的扩展名,结合解析漏洞利用。

首先对上传的php文件进行抓包:

最后修改不再黑名单内的扩展名。成功上传,但是要配合阿帕奇的解析漏洞(2.0-2.2版本),否则不能执行成php文件

也可以根据情况使用00截断(这里是举例记录):
首先文件改名为1.phpp.jpg

然后上传时候进行抓包:

把phpp的第二个p的16进制改成00,这样p就变成了空格

这样上传成功后变成了1.php空.jpg

这样就能执行php文件,但是这样上传的时候如果后端用函数也检测到时php文件,那么也上传不成功,所以根据情况利用。

2.5 服务端验证图片文件头

这种防护方式会对文件内容进行检测:

如果只是修改文件的扩展名,也是不能绕过检测,所以这时候利用的方式就是用真的图片加上一句话木马构造成图片马上传(可以直接txt格式打开图片或者利用命令行),然后再根据场景把图片还原成php文件进行执行。

Upfile的几种常见姿势的更多相关文章

  1. SpringBoot 处理异常的几种常见姿势

    SpringBoot 处理异常的几种常见姿势 1. 使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐.测试代码中用到了 ...

  2. 【代码审计】后台Getshell的两种常规姿势

    0x00 前言 在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作. 这里结合代码实例介绍白盒Ge ...

  3. 几种常见的Shell

    Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说有多少种Shell,其实说的是Shell脚本解释器. bash bash是L ...

  4. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  5. JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器

    注意:此为2009年的blog,注意时效性(针对常见服务器)     APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...

  6. 四种常见的App弹窗设计,你有仔细注意观察吗?

    弹窗又称为对话框,是App与用户进行交互的常见方式之一.弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应.模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其 ...

  7. 几种常见语言的命名空间(Namespace)特性

    命名空间提供了一种从逻辑上组织类的方式,防止命名冲突. 几种常见语言 C++ 命名空间是可以嵌套的 嵌套的命名空间是指定义在其他命名空间中的命名空间.嵌套的命名空间是一个嵌套的作用域,内层命名空间声明 ...

  8. 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j

    解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...

  9. (转)四种常见的 POST 提交数据方式

    四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...

随机推荐

  1. 第三章 深入理解python语言

    计算机技术的演进过程 1946-1981年 计算机系统结构时代(35年) 解决计算机能力的问题 1981-2008年 网络和视窗时代(27年) 解决交互问题 2008-2016年 复杂信息系统时代(8 ...

  2. 单片机与PLC的区别?

    单片机顾名思义集成在一个芯片内的计算机系统,又叫单片微控制器,英文:mcu,具有计算机的全部功能.PLC是英文Programmable Logic Controller的简称,翻译过来就是可编程逻辑控 ...

  3. [源码解析] 深度学习分布式训练框架 horovod (15) --- 广播 & 通知

    [源码解析] 深度学习分布式训练框架 horovod (15) --- 广播 & 通知 目录 [源码解析] 深度学习分布式训练框架 horovod (15) --- 广播 & 通知 0 ...

  4. servlet核心技术2

    一.Servet 与 JDBC 在Servlet中可以使用JDBC技术访问数据库,查询DB数据,然后生成显示页面,接收请求参数,然后对DB操作 为了方便重用和便于维护等目的,经常会采用DAO(Data ...

  5. Luogu P2754 星际转移问题

    Luogu P2754 星际转移问题 思路 首先,对于地球能否到达月球的问题,考虑使用并查集维护. 对于每艘飞船能够到达的站点,放进一个集合里,若两艘飞船的集合有交集,那么就合并两个集合,最后只要地球 ...

  6. Pandas高级教程之:自定义选项

    目录 简介 常用选项 get/set 选项 经常使用的选项 最大展示行数 超出数据展示 最大列的宽度 显示精度 零转换的门槛 列头的对齐方向 简介 pandas有一个option系统可以控制panda ...

  7. Spark—RDD编程常用转换算子代码实例

    Spark-RDD编程常用转换算子代码实例 Spark rdd 常用 Transformation 实例: 1.def map[U: ClassTag](f: T => U): RDD[U]  ...

  8. 微信小程序云开发-数据库-获取用户添加的数据到数据库

    一.列表页面新增[添加商品]按钮 在列表页增加[添加商品]按钮,按钮绑定事件toAdd(),用户点击该按钮跳转到添加商品页面. 在js文件中写toAdd()函数,作用是点击[添加商品]按钮,跳转到[添 ...

  9. 第四篇 -- Go语言string转其他类型

    1. string转int // 法1:string转int num_str := "1234567" /* ParseInt():查看文档https://studygolang. ...

  10. Elsevier(爱思唯尔)期刊模板的使用

    1.爱思唯尔(Elsevier)期刊模板的使用 2.sci论文(以Elsevier为例) latex文件从小白到投稿 3.初次使用爱斯维尔(Elsevier)论文模板遇到的坑 4.latex学习 da ...