当前位置: 首页 > news >正文

upload-labs通关笔记-第01关 文件上传之前端绕过(3种渗透方法)

目录

一、实验准备

1.构造脚本

2.打开靶场第1关

二、源码分析

三、修改页面法渗透

1.右键inspect

2.定位checkFile函数

3.修改页面并上传

4.获取页面地址

5.访问脚本

四、改包法渗透

1.修改后缀为jpg

2.bp设置拦截状态

3.上传jpg后缀木马

4.bp拦截并发到repeater

5.修改后缀并发包

6.获取脚本路径

7.访问脚本

 五、禁用js法

1.清空上传文件

2.禁用js并刷新页面

3.上传脚本

4.获取脚本地址

5.访问脚本


本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第一关文件上传客户端绕过渗透实战,通过三种方法完成渗透。

一、实验准备

1.构造脚本

构造文件上传的脚本,内容为获取服务器的php版本信息,脚本code内容如下所示。

<?php phpinfo();?>
  • 脚本命名为ljn_info.php

2.打开靶场第1关

firefox打开upload靶场第一关,http://127.0.0.1:8004/Pass-01/index.php,进入基于客户端的文件上传关卡,点击清空上传文件。

Note:

1这里要注意打开的是需要打开靶场pass01关卡

2)需点击清空上传文件,确保此次实验为最新结果,并在没有上传目录时构建upload文件夹

二、源码分析

右键view-source查看源码,分析文件上传pass01关卡,发现文件上传的过滤使用JavaScript的函数checkFile进行过滤。而checkFile函数在onsubmit中调用,即在浏览器操作界面中,点击“上传”按钮时调用。

完整的代码如下所示。

function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name + "|") == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}
}

分析得出三种渗透思路:

  • 禁用js法:通过禁用js使得onsubmit调用的checkFile并不生效。

  • 修改前端页面法:将onsubmit调用的函数更改为空函数,将php脚本上传到服务器。

  • 改包法:将脚本改为jpg后缀后上传,使通过前端过滤函数的检查, 然后将报文发送给bp,在bp中将报文改为php后缀并上传到服务器。

三、修改页面法渗透

1.右键inspect

 upload-labs靶场中浏览(browse)选中获取phpinfo的脚本,暂不点击上传,右键inspect。

2.定位checkFile函数

定位到onsubmit调用checkFile函数的位置,如下图红框所示。

3.修改页面并上传

将onsubmmit函数调用checkFile函数的位置替换为空函数,并且不刷新当前页面的情况下点击上传,如下所示。

4.获取页面地址

上传成功后,右键图片获取上传脚本地址,脚本地址如下所示。

http://127.0.0.1:8004/upload/ljn_info.php  

5.访问脚本

访问上传成功的脚本,获取到php版本信息,如下所示渗透成功。

四、改包法渗透

1.修改后缀为jpg

将php脚本的后缀改名为jpg,为了具有区分度将文件名的尾部改为_info_日期.jpg。

如下所示,复制脚本ljn_info.php,并将其重命名为ljn_info_0314.jpg,通过文本编辑器打开图片后效果如下所示。

2.bp设置拦截状态

打开burpsuite,proxy-intercept配置为intercept is off状态。

3.上传jpg后缀木马

upload-labs靶场上传后缀改为jpg的脚本,点击上传。

4.bp拦截并发到repeater

burpsuite.抓包后,在http history历史记录中找到此post报文,点击选中此报文,并将报文送到repeater。

在repeater中找到此报文,注意如下红圈圈住的部分为要修改的文件名,需要将后缀jpg改为php。

5.修改后缀并发包

在burpsuite intruder中的repeater中将jpg后缀改为php,并点击send,同时在response的render中查看图形化结果,如下所示上传成功。

6.获取脚本路径

在response的raw中获取图片上传后的路径。

分析获取上传后的脚本在服务器的地址。

如上所示,上传的脚本在服务器的地址为../upload/ljn_info _0314.php

当前文件上传的关卡路径为http://127.0.0.1:8004/Pass-01/index.php

相对于index.php,可以得到上传到服务器后的脚本路径

http://127.0.0.1:8004/upload/ljn_info _0314.php

7.访问脚本

访问上传成功后的脚本,如下所示上传成功。

 五、禁用js法

1.清空上传文件

打开靶场第一关,由于我们要用新的方法实现渗透,为避免同一文件多次上传而后台未重命名文件,导致明明这一次渗透没有上传成功,却因为同一文件之前上传成功过,而不清楚本次上传失败,故而每次开始渗透,都要养成清空上传文件的好习惯。

注意浏览器的右上角,有安装好js插件,这个插件目前是红色的,代表开启了js功能。 

2.禁用js并刷新页面

windows的firefox打开文件上传靶场第一关,点击禁用js插件,并刷新页面(注意:如果不刷新禁用不会生效)。

3.上传脚本

选择ljn_info.php并点击文件上传,如下所示。

4.获取脚本地址

上传成功后,右键图片获取上传脚本地址,脚本地址如下所示。

http://127.0.0.1:8004/upload/ljn_info.php

5.访问脚本

上传成功的脚本,获取到php版本信息,如下所示渗透成功。

做完实验开启js并刷新页面,否则很多页面会打不开。

相关文章:

  • Clinica集成化的开源平台-神经影像研究
  • 解决下拉框数据提交后回显名称不对
  • 企业级常用的 CentOS版本
  • 如何指定conda环境打包成docker镜像
  • 5G网络:能源管理的“智能电网“革命,Python如何成为关键推手?
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • OpenHarmony Linux内核本地管理
  • Matlab 模糊pid控制的永磁同步电机PMSM
  • 【Python】Python 单例模式 8 大核心应用场景深度解析(2025 新版)
  • 虚拟主机与独立服务器:哪个更好?
  • 无人机信号线被电磁干扰导致停机
  • RDD的五大特征
  • hdfs客户端操作-文件上传
  • 高速系统设计实例设计分析
  • Linux 系统中设置开机启动脚本
  • 验证回文串2
  • 从ES5到ES6+:JavaScript语法演进与实现解析
  • 如何进行前端性能测试?--性能标准
  • rsync
  • Hadoop 的代理用户(Proxy User)​ 功能解释
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我
  • 张笑宇:物质极大丰富之后,我们该怎么办?
  • 中国一直忽视欧盟经贸问题关切?外交部:事实证明中欧相互成就,共同发展
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿
  • 汇源果汁发文:经营情况一切正常
  • 2025年4月份CPI环比由降转涨,核心CPI涨幅稳定