Upload-labs(Pass-14 - Pass-16)

Pass-14

(图片马,判断文件类型)

图片的格式在防护中通常是不会使用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。
  JPEG (jpg),文件头:FF D8 FF E1
  PNG (png),文件头:89 50 4E 47
  GIF (gif),文件头:47 49 46 38

查看源码

function getReailFileType($filename){$file = fopen($filename, "rb");$bin = fread($file, 2); //只读2字节fclose($file);$strInfo = @unpack("C2chars", $bin);    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    $fileType = '';    switch($typeCode){      case 255216:            $fileType = 'jpg';break;case 13780:            $fileType = 'png';break;        case 7173:            $fileType = 'gif';break;default:            $fileType = 'unknown';}    return $fileType;
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$file_type = getReailFileType($temp_file);if($file_type == 'unknown'){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

提示:

检查图片内容开头两个字节,所以要想到用图片+php来组成一个图片马,可以直接用notepad打开一个图片在后面添加代码组成图片马,不过可能会出错。也可以使用cmd命令。

(要先进入文件夹内,使用cd)

利用copy命令合成一个图片马使用_copy 图片马-CSDN博客

copy th.jpg /b + phpinfo.php /a 11.php

补充如果是linux那么命令就是

cat th.jpg phinfo.php > 11.php


  制作好的图片马想要解析出来这个图片,还得有这个包含漏洞。

网站存在包含漏洞

直接上传含有PHP木马的图片

打开图片获得图片地址,右键可以查看文件路径

upload/3420240411210440.jpg

利用文件包含漏洞upload-labs/include.php?file=upload/文件名

访问文件路径时需要构造URL

include.php?file=upload/3420240411210440.jpg

成功访问

使用图片木马,php5.6以上的版本才能成功解析图片木马

做此题时,phpstudy2018总是无法成功访问,有大佬说是版本问题,尝试使用phpstudy_pro搭建upload-labs环境后,再次尝试,即可成功访问。遇到问题时多加尝试,办法总比困难多。

Pass-15

(图片马,检测是否为图片)

查看源码

function isImage($filename){$types = '.jpeg|.png|.gif';if(file_exists($filename)){$info = getimagesize($filename);$ext = image_type_to_extension($info[2]);if(stripos($types,$ext)>=0){return $ext;}else{return false;}}else{return false;}
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

提示

关键函数是getimagesize,getimagesize函数会对目标的十六进制的前几个字符串进行读取。比如GIF的文件头问GIF89a,png的文件头为塒NG。尝试读取上传文件(图片)的大小,如果该函数能够成功读取上传文件的大小,就说明该文件是一个图片;如果不能成功读取,那么就说明该文件不是一张图片,是一个恶意文件。

getimagesize()官网

PHP: getimagesize - Manual

与14题类似,还是利用14关的图片马

查看文件路径

构造url

include.php?file=upload/6920240411212612.jpeg

成功访问

Pass-16

(图片马,检查字节、后缀)

查看源码

function isImage($filename){//需要开启php_exif模块$image_type = exif_imagetype($filename);switch ($image_type) {case IMAGETYPE_GIF:return "gif";break;case IMAGETYPE_JPEG:return "jpg";break;case IMAGETYPE_PNG:return "png";break;    default:return false;break;}
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

提示:

上传文件后,发现页面异常,原因未知

查阅资料后得知

php5.6以上的版本才能成功解析图片木马

需要开启php_exif模块

看wp,14,15,16三题做法类似,只是考察的函数不一样

函数exif_imagetype()

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

但是这一关要注意:需要开启php_exif模块

更改版本以及配置后,即可成功上传

成功访问文件路径

注释:

三题使用的图片马均为同一个

th.jpg为网上找到的一张图片

phpinfo.php为一句话木马,代码为

<?php
phpinfo();
?>

也可以编写其他一句话木马,使用蚁剑连接

使用cmd命令制作图片马时需要注意文件名

访问文件路径时需要构建url,利用文件包含漏洞upload-labs/include.php?file=upload/文件名

遇到问题,多想多问。办法总比困难多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623441.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++从入门到精通——类的6个默认成员函数之赋值运算符重载

赋值运算符重载 前言一、运算符重载定义实例注意要点 二、赋值运算符重载赋值运算符重载格式赋值运算符重载要点重载要点传值返回和传址返回要点 三、前置和后置重载 前言 类的6个默认成员函数&#xff1a;如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么…

ESP32S3在wsl环境的JTAG、openocd仿真调试

文章目录 一、准备工作二、添加 ESP-IDF 环境变量三、添加 udev 规则文件四、vscode 配置 一、准备工作 安装配置好 WSL、ubuntu, 参考连接&#xff1a; WSL2安装Ubuntu迁移到其他盘或者其他电脑_wsl ubuntu迁移-CSDN博客 WSL2 设置桥接模式_wsl2 桥接-CSDN博客 下载好 WSL-US…

Python 物联网入门指南(八)

原文&#xff1a;zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第三十章&#xff1a;制作机械臂 最后&#xff0c;我们终于到达了大多数人自本书开始以来就想要到达的地方。制作一个机械臂&#xff01;在…

游戏生成式 AI:编织梦想,避开阴影

想象一下&#xff0c;一个沉浸式的游戏世界中玩家遇到的每个 NPC 都由 AI 驱动&#xff0c;他们能与玩家进行互动&#xff0c;从改变游戏体验。据 Inword 一项研究显示&#xff0c;绝大多数游戏玩家渴望这种互动&#xff0c;愿意投入更多的时间和金钱来玩这种由 AI 驱动的游戏。…

Linux_iptables防火墙学习笔记

文章目录 iptables 概述四表五链iptables 安装启动iptables 配置详解iptables配置文件iptables配置语法iptables常用实例查看规则修改默认规则保存和备份规则恢复备份的规则清空规则放行SSH服务在ubuntu14.04中iptables规则持久化 iptables 概述 主机型 对主机进行保护 网络型…

020——SPI模块驱动开发(基于DAC芯片和I.MX6uLL)

目录 一、 SPI简介 二、 Linux中的SPI 2.1 SPI控制器数据结构 2.2 SPI设备数据结构 2.3 SPI设备驱动 2.4 接口函数 2.4.1 函数原型 2.4.2 函数解析 2.5 SPI驱动框架 2.6 SPI控制器驱动程序 2.7 SPI设备驱动程序 三、 DAC实例 3.1 实验过程 3.2 驱动程序 3.3 应…

Redis--16--Spring Data Redis

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Spring Data Redishttps://spring.io/projects/spring-data-redis 1.依赖2.RedisTemplate3.案例 序列化1.默认是 JdkSerializationRedisSerializer2.添加Redis配置文…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

抖店创业日记:24年的抖音电商市场,“慢”比“快”更重要~

我是王路飞。 今天是2024年4月16日。 距离我坚持做抖店10年的目标&#xff0c;还有6年2个月的时间。 做抖店之前&#xff0c;我做过天猫、京东、快手等平台&#xff0c;随着时间的推移&#xff0c;愈加感觉到一个真理&#xff1a;只要不下牌桌&#xff0c;就永远不会失去机会…

Kubernetes(K8S)集群搭建-node节点配置

1.开始操作之前要先关闭防火墙&#xff0c;SELinux&#xff0c;swap分区 关闭防火墙 sudo systemctl stop firewalld禁用SELinux sudo setenforce 0 # 临时禁用 sudo sed -i s/^SELINUXenforcing$/SELINUXper…

【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

element-ui container 组件源码分享

今日简单分享 container 组件的源码实现&#xff0c;从以下两个方面来讲解&#xff1a; 1、container 组件的页面结构 2、container 组件的属性 一、container 组件的页面结构 二、container 组件的属性 1、container 部分的 direction 属性&#xff0c;子元素的排列方向&am…