文件上传漏洞测试

embedded/2025/3/12 0:19:44/

upload-labs16关

源码:

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 = "上传出错!";}}
}

准备好图片以及代码,使用通过cmd终端,使用copy ceshi.jpg/b+test.php/a test.jpg生成图片木马以及打开php_exif

查看是否包含成功要加file

然后使用中国蚁剑

upload-labs20关

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = $_POST['save_name'];$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);if(!in_array($file_ext,$deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' .$file_name;if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true;}else{$msg = '上传出错!';}}else{$msg = '禁止保存为该类型文件!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

分析:
黑名单机制:
代码定义了一个黑名单数组 $deny_ext,包含常见的危险文件扩展名(如 .php、.jsp、.asp 等)。
使用 pathinfo() 函数获取文件扩展名,并检查是否在黑名单中。
文件保存逻辑:
如果文件扩展名不在黑名单中,文件会被保存到服务器。
文件保存路径为 UPLOAD_PATH . '/' . $file_name,文件名由用户控制。
潜在漏洞:
黑名单可能不完整,攻击者可以使用未列入黑名单的扩展名(如 .php7、.phar 等)。
文件名由用户控制,攻击者可能通过特殊文件名绕过检查。
方法:
1、使用未列入黑名单的扩展名
黑名单中可能遗漏了一些危险扩展名,例如 .php7、.phar、.phtml 等。
攻击者可以将恶意文件保存为这些扩展名。
2、使用双扩展名
攻击者可以在文件名中使用双扩展名(如 shell.jpg.php),利用黑名单检查的漏洞。
如果黑名单检查仅验证最后一个扩展名(.php),文件会被拒绝。
但如果黑名单检查不严谨,文件可能会被成功上传。


http://www.ppmy.cn/embedded/171881.html

相关文章

mysql的binlog,redolog,undolog作用

binlog是MySQL的服务器层日志,用于主从复制和数据恢复。 redolog是InnoDB存储引擎的日志,确保事务的持久性,通过WAL机制。 undolog用于事务回滚和MVCC,保证原子性和一致性。 事务处理中的具体应用:比如崩溃恢复时如何利…

Octave3D 关卡设计插件

课程参考链接 这位大佬有在视频合集中有详细的讲解,个人体验过,感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…

大规模语言模型的涌现能力

【摘要】 本文探讨大语言模型中一个出人意料的现象——涌现能力。研究发现,某些能力在较小模型中不存在,但在较大模型中出现,这种现象无法仅通过小模型性能预测来解释。这可能意味着未来更大的模型会获得新的涌现能力。 1. 引言 近年来,语言模型彻底改变了自然语言处理(…

java2025年常见设计模式面试题

1. 请解释建造者模式(Builder Pattern)及其应用场景。 答案: 建造者模式用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了复杂的构建逻辑。 示例: public class C…

【前端】BOM DOM

两天更新完毕,建议关注收藏点赞 友情链接: HTML&CSS&LESS&Bootstrap&Emmet Axios & AJAX & Fetch BOM DOM 待整理 js2 Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM)。官方文档点击跳转 目录 BOMDOM…

抖音全案代运营公司-品融电商

抖音全案代运营公司-品融电商 引言 在当今数字化时代,电商行业竞争激烈,品牌如何在众多竞争对手中脱颖而出,成为每个企业面临的挑战。品融电商(PINKROON)作为中国领先的品牌化电商服务商,凭借其独特的全域…

正则表达式,idea,插件anyrule

​​​​package lx;import java.util.regex.Pattern;public class lxx {public static void main(String[] args) {//正则表达式//写一个电话号码的正则表达式String regex "1[3-9]\\d{9}";//第一个数字是1,第二个数字是3-9,后面跟着9个数字…

数据结构第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…