文件上传学习笔记

文件上传

文件上传漏洞是在web渗透中非常关键的一点,通常在类似于头像上传,附件上传等功能点处存在上传验证方式不严谨的安全缺陷

文件上传流程:
一个文件以HTTP协议进行上传,以POST将请求发送至web服务器,web服务器收到请求并同意后,用户与web服务器建立连接,并传输数据

00截断

(1)0x00截断
0x00是十六进制表示法,即为0,部分函数处理时,会将该字符看作结束符
0x00应用在文件名绕过:当系统(以二进制或十六进制读取文件)对文件名进行读取时,读取到0x00就会结束读取。
(2)%00截断
url发送到服务器后被服务器解码,解码成了0x00,%00被服务器解码为0x00发挥了截断作用。

upload-labs

pass-1

:尝试上传一个php文件,得到下图提示信息
在这里插入图片描述
:看提示的信息,我们可以用禁用JavaScript的方法
:在火狐浏览器里,访问about:config,将true改成false
在这里插入图片描述:再次上传php文件,显示上传成功

pass-2

:上传一个包含一句话木马的php文件,显示文件类型不正确
在这里插入图片描述

:查看源码,看到是对mime类型进行判断,采用抓包修改对应的类型名字,绕过上传
在这里插入图片描述
:如图对content-type进行修改,修改为可上传的类型
在这里插入图片描述
:如图成功上传
在这里插入图片描述

pass-3

:还是上传一个php文件,返回以下信息
在这里插入图片描述
:查看源码,发现是黑名单
在这里插入图片描述
:分析源码,限制了大小写等,发现可以通过.php3来绕过,但是出于一种莫名的原因用php3的后缀没有办法查看内容例如phpinfo();就无法查看
在这里插入图片描述

pass-4

:上传php文件,没有明显的提示,查看源码
在这里插入图片描述
:分析源码,.php5 .phtml等方法都不适用了

不太会,网上说可以用上传**.htaccess**来解决
文件内容如下:
SetHandler application/x-httpd-php
作用就是让所有文件都被当成php文件来解析

:那就先上传一个.htaccess文件,然后上传一个内容为一句话木马的图片文件
在这里插入图片描述

pass-5

:查看源码,与上一关不同,这一关禁用了.htaccess

pass-11

:上传一个php文件得到如图信息
在这里插入图片描述
:查看源码,get方式传参并且$img_path使用的是上传的文件名后缀,直接进行拼接,采用修改save_path的方式利用%00截断
在这里插入图片描述
:如图所示成功上传
在这里插入图片描述

pass-12

:查看源码,发现和上一题类似,区别在于POST和GET传参方式,那么%00的截断方法不能用了
在这里插入图片描述
:依然是抓包,如图所示在文件后缀后面加上一个空格
在这里插入图片描述
:将此处的20改为00,即是将空格改成了十六进制的0,达到截断的目的
在这里插入图片描述
:如图成功上传
在这里插入图片描述

pass-19

:与前几关都不同的是,这里给了一个保存名称的设定
在这里插入图片描述
:查看源码,发现img_path连接的是以POST方式传参的$file_name,那我们可以对save_name进行修改和截断,达到上传绕过的目的
在这里插入图片描述
:如图修改,并添加空格,以方便后面的截断
在这里插入图片描述
:同样将20修改为00
在这里插入图片描述
:如图成功上传
在这里插入图片描述
:如图成功通过菜刀连接webshell
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传是Web开发中常见的功能之一,Java中也提供了多种方式来实现文件上传。其中,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面中添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码中处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传的文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传的文件大于缓冲区大小,则先将文件保存到临时文件中,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传的文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传的文件 for (FileItem item : items) { // 判断当前FileItem是否为上传的文件 if (!item.isFormField()) { // 获取上传文件的文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传的文件 File file = new File("D:/uploads/" + fileName); // 将上传的文件保存到指定的目录中 item.write(file); } } ``` 以上代码中,首先创建了一个DiskFileItemFactory对象,用于解析上传的文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传的文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传的文件,如果是,则获取文件名,创建一个File对象,将上传的文件保存到指定的目录中。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传的文件时,需要进行严格的校验和过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值