文件上传

一句话木马

利用文件上传漏洞往目标网站中上传一句话木马,然后就可以在本地获取和控制整个网站目录。利用一句话木马进行入侵时需要满足木马上传成功未被查杀,知道木马的路径在哪并保证上传的木马能正常运行。一个简单的 PHP 一句话木马如下:

@ 表示后面即使执行错误也不报错,eval()函数表示括号内的语句字符串什么的全都当做代码执行,$_POST['flag']表示从页面中获得 flag 这个参数值。

上传过滤

为了使得网页不容易被攻击,网页经常需要通过一些手段来过滤不希望接收的文件。首先是 multipart/form-data 过滤,该过滤需要在表单中进行文件上传时,就需要使用该格式,意思是他通过表单会对文件格式再进行一次判断,并会在后端进行判断。这种过滤只支持小写字符,因此绕过方法为将抓到的包中的 Content-Type 字段中的 “multipart/form-data” 中随便一个字母改为大写。

第二是文件类型过滤,为了不让用户随便传些文件,只是要让用户上传图片时,就可以限制只能上传图片。还有一种是文件后缀名过滤,例如后缀名是 “.php” 的文件都拦截不能上传,如果是在解题的情况下可以尝试用 PHP 其他后缀进行上传例如:php2, php3, php4, php5,phps, pht, phtm, phtml。

webshell

当网页已经上传过一句话木马时,说明可以利用该木马连接到网页上,例如下面这个网页。

“web” 的含义是显然需要服务器开放 web 服务,“shell” 的含义是取得对服务器某种程度上操作权限。webshell 常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限,可以使用蚁剑或者菜刀等工具进行提权。以蚁剑为例,打开蚁剑后右键选择添加数据。

然后填入需要提权的网页 url,以及一句话木马的连接密码。

添加之后可以右键进行一系列操作,例如可以查看网页的文件,选择文件管理。

之后就可以查看并操作网页的文件了,例如这个网页的 html 目录下就有 flag。

例题:求 getshell

打开网页,这个明显是文件上传漏洞,题目要求传入一个图片,不能是 php。

这是后缀名黑名单检测,注意到使用了 multipart/form-data,所以通过对请求头中的 Content-Type 进行大小写绕过,将 multipart/form-data 随便一个字母改成大写。然后这个网页只能上传文件,因此把 Content-Type 字段的值改为 “image/jpeg”。最后还有个文件扩展名过滤,测试后发现 “.php5” 后缀没有被过滤。综上所述文件上传的包修改如下,上传获得 flag。

例题:upload1

打开网页,看到一个文件上传的按钮,考虑上传一句话木马之后用蚁剑连接。

首先先看一下源码,源码会对传入的文件的类型进行过滤,也就是说如果传的不是图片,上传按钮会被禁用并弹窗报错。

Array.prototype.contains = function (obj) {

var i = this.length;

while (i--) {

if (this[i] === obj) {

return true;

}

}

return false;

}

function check()

{

upfile = document.getElementById("upfile");

submit = document.getElementById("submit");

name = upfile.value;

ext = name.replace(/^.+\./,''); //删除文件的名称

if(['jpg','png'].contains(ext)) //检查后缀是否为 jpg 或 png

{

submit.disabled = false;

}

else

{

submit.disabled = true;

alert('请选择一张图片文件上传!');

}

}

由此可见过滤是在前端,我们只需要绕过前端的过滤就照样能提交一句话木马。先将一句话木马的后缀名改为 jpg,然后上传到网页。接着按上传按钮,然后用 Burp 抓包,修改文件名的后缀为 “.php”。

上传成功后会返回一个文件名,直接访问是没有用的,使用蚁剑进行连接。

连接之后在 html 目录下有个 flag.php,打开就能看到 flag 了。

ctf php文件上传图片格式,CTF-WEB:文件上传相关推荐

  1. 向web服务器传文件,c++实现向web服务器上传文件

    [实例简介] vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件 [实例截图] [核心代码] c向web服务器上传文件 └── c++ 向web服务 ...

  2. 文件上传图片放大缩小进行截图上传

    一:效果如下               二:思路准备 1.注意事项:弹出框--有原始图片尺寸--操作图片对象--直观显示图片(因为有个圆孔透明背景遮罩)--鼠标滚轮.按住等事件--文件和base64 ...

  3. php 显示要上传的图片格式,php判断文件上传图片格式的实例详解

    php判断文件上传图片格式的实例详解 判断文件图片类型, $type = $_FILES['image']['tmp_name'];//文件名 //$type = $this->getImage ...

  4. 通过Web Services上传和下载图片文件

    通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而 ...

  5. java 图片上传_java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下. 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多 ...

  6. java web文件上传详解_java web图片上传和文件上传实例详解

    java web图片上传和文件上传 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定 ...

  7. 通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500)

    通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500) ERROR exception 135 Internal Server Error: /ckeditor/uploa ...

  8. android volley 上传图片 和参数,android Volley 上传文件上传图片

    android volley 实现上传文件功能 Volley不解释了吧, android 官方的一个网络请求库. 源代码的地址在: git@github.com:com314159/VolleyMul ...

  9. java web 断点上传_使用WebUploader实现分片断点上传文件功能(二)

    写在前面: 这几天,有去研究一下WebUploader上传文件,前面的博客有记录下使用WebUploader简单上传文件的例子,今天就把分片断点上传的例子也记录下吧,在博客园中,也查看了一些资料,基本 ...

最新文章

  1. Python logging调用Logger.info方法的处理过程
  2. Go中协程间通信的方式Sync.Cond
  3. Scikit-learn 核心开发人员专访:建立机器学习工作流最容易犯这2点错误
  4. 理解class.forName()(good--字节码层面)
  5. PAT甲级1104 Sum of Number Segments:[C++题解]数段之和,测试点2爆double,请用long double!!!
  6. SQLite学习手册(命令行工具)
  7. C#工厂方法模式 -抽象工厂模式
  8. 机器学习实验中的编程技术(part3)--numpy
  9. 【…感激2008,部署我的2009…】
  10. Docker学习总结(15)——通过 Docker 搭建RocketMQ
  11. Qt5配置opencv4.5.4
  12. CentOS7.0设置中文输入法
  13. 华为销售专家LTC专家许浩明老师:流程是数字化转型的基础,以华为营销LTC,华为铁三角为例
  14. pic单片机中断服务c语言程序,PIC 中断 服务程序
  15. ad中使用智能粘贴_AD元件复制粘贴使用技巧
  16. c#录音和放音,超简单!不用DirectX
  17. tensorflow conv2d()参数解析
  18. 乌鸦安全2021年度文章合集
  19. 有源医疗器械的开发过程和各阶段的注意事项(一)
  20. 314-Leetcode 堆排序

热门文章

  1. 细究STP根端口和指定端口的选举过程
  2. [No0000F9]C# 运算符重载
  3. MAC OS 如何安装命令行工具:Command Line Tools
  4. Js事件对象EventUtil
  5. ASP.NET获取IP地址与MAC地址方法
  6. 在MFC中显示Jpg格式图片的简单实现方法
  7. 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050
  8. uniapp打包安装后提示_本应用使用HBuilderX 2.8.12 或对应的cli版本编译,而手机端SDK版本是2.8.13---基于Vue的uniapp手机端_前端UI_uview工作笔记007
  9. 政务外网001---政务外网介绍
  10. 云计算学习笔记006---运行hadoop的例子程序:统计字符--wordcount例子程序