[NSSCTF 2nd]php签到 详细题解

news2024/11/30 6:34:18

知识点:

linux文件后缀名绕过

表单文件上传

pathinfo 函数    file_put_contents()函数

命令执行

代码审计:

 <?php

function waf($filename){
    $black_list = array("ph", "htaccess", "ini");
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    foreach ($black_list as $value) {
        if (stristr($ext, $value)){
            return false;
        }
    }
    return true;
}

if(isset($_FILES['file'])){
    $filename = urldecode($_FILES['file']['name']);
    $content = file_get_contents($_FILES['file']['tmp_name']);
    if(waf($filename)){
        file_put_contents($filename, $content);
    } else {
        echo "Please re-upload";
    }
} else{
    highlight_file(__FILE__);
} 

页面直接给出了源码,waf()函数作用是对上传文件进行过滤,等下再说,先看主要代码

由$_FILES['file'] 可以判断是要上传文件,但是页面没有给出上传文件的选项,因此需要手动上传表单文件

$_FILES['file']['name'] 就是上传的文件名信息,会先被url解码然后赋值给$filename

$_FILES['file']['tmp_name'] 是上传的文件的临时存储路径信息,例如 /var/www/html/1.php

$content 会读取上传的文件里面的内容  如果$filename满足waf()函数要求,就把$content内容 写入文件$filename


可以考虑传入一句话木马然后蚁剑连接查看后台  或者直接命令执行,但是关键是先绕过函数对文件名限制

观察waf()函数,黑名单中是 ph htaccess ini

pathinfo 函数用于获取文件路径的信息,包括目录名,文件名,扩展名等

PATHINFO_EXTENSION 用于获取文件的扩展名部分

使用 PATHINFO_EXTENSION 时,pathinfo 函数会返回文件名中的最后一个点之后的部分

所以当传入例如 1.php. 的文件时,结果就是空字符串,因为最后一个点后面没有数据,可以利用这一点绕过

但是题目环境是Apache/2.4.25 (Debian)

在Linux系统下1.php.是一个合法的文件名,系统不会像windows系统自动把最后的点去掉然后把文件当成php文件执行,虽然可以绕过waf()函数,但是不会被当作php文件执行,所以点绕过在这里是不可行的

如果把1.php. 换成 1.php/.  也可以绕过waf()函数,然后经过file_put_contents()函数会被解析为1.php,即可完成绕过上传

验证结论:

因为题目是linux环境,所以在kali中创建一个php代码

运行之后看到确实创建了一个1.php的文件

上传文件:

绕过原理就是这样,下面只需要上传文件,使用代码上传文件,先测试一下phpinfo()页面,观察是否可行

windows下不支持/作为文件名的一部分,所以需要进行url编码把 / 编码为%2f 

刚好代码里会对文件名进行url解码,也算是一个小提示

import requests
url = 'http://node5.anna.nssctf.cn:28714/'  # 上传文件地址
file_content = "<?php phpinfo(); ?>"
files = {'file': ('2.php%2f.', file_content)} 
response = requests.post(url=url, files=files)
print(response.text)

访问2.php     搜索关键词flag得到flag

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[0260].第25节:锁的不同角度分类

MySQL学习大纲 我的数据库学习大纲 从不同维度对锁的分类&#xff1a; 1.对数据操作的类型划分:读锁和写锁 1.1.读锁 与 写锁概述&#xff1a; 1.对于数据库中并发事务的读-读情况并不会引起什么问题。对于写-写、读-写或写-读这些情况可能会引起一些问题&#xff0c;需要使用…

云原生后端开发教程

云原生后端开发教程 引言 随着云计算的普及&#xff0c;云原生架构逐渐成为现代软件开发的主流。云原生不仅仅是将应用部署到云上&#xff0c;而是一种构建和运行应用的方式&#xff0c;充分利用云计算的弹性和灵活性。本文将深入探讨云原生后端开发的核心概念、工具和实践&a…

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析&#xff0c;帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…

常见的java开发面试题

目录 1.SpringBoot 打成的jar包和普通的jar包有什么区别&#xff1f; 如何让SpringBoot打的jar包可依赖&#xff1f; 2. http 和 https 的区别&#xff1f; 一、安全性 二、连接方式 三、性能影响 四、应用场景 五、总结&#xff1a; 3. GC是什么&#xff0c;为什么要使用…

信息安全入门——网络安全控制

目录 前言信息安全入门&#xff1a;网络安全控制基础1. 用户识别技术&#xff1a;确认你是谁2. 访问控制技术&#xff1a;定义你能做什么3. 访问控制列表&#xff08;ACL&#xff09;&#xff1a;精细的权限管理4. 漏洞控制&#xff1a;防范未然5. 入侵检测系统&#xff08;IDS…

北理工计算机考研难度分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 总体情况概述 北京理工大学计算机学院2024届考研呈现出学硕扩招、专硕稳定的特点。学硕实际录取27人(含非全统考)&#xff0c;复试线360分&#xff0c;复试录取率76%&#xff1b;计算机技术专硕(不含珠海)实际录取29人…

模拟算法 (算法详解+例题)

目录 一、什么是模拟二、模拟算法的特点和技巧三、模拟OJ题3.1、替换所有的问号3.2、提莫攻击3.3、N字形变换3.4、外观数列3.5、数青蛙 一、什么是模拟 模拟是对真实事物或者过程的虚拟。在编程时为了实现某个功能&#xff0c;可以用语言来模拟那个功能&#xff0c;模拟成功也…

php后端学习,Java转php

遇到前后端跨域 php解决跨域问题可以加上下面的代码&#xff1a; header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端&#xff0c; 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…

一个简单的例子,说明Matrix类的妙用

在Android、前端或者别的平台的软件开发中&#xff0c;有时会遇到类似如下需求&#xff1a; 将某个图片显示到指定的区域&#xff1b;要求不改变图片本身的宽高比&#xff0c;进行缩放&#xff1b;要求最大限度的居中填充到显示区域。 以下示意图可以简单描绘该需求 以Androi…

Zookeeper分布式锁实现

文章目录 1、zk分布式锁的实现原理1_获取锁过程2_释放锁 2、代码实现1_创建客户端对象2_使用和测试案例 1、zk分布式锁的实现原理 Z o o k e e p e r Zookeeper Zookeeper 就是使用临时顺序节点特性实现分布式锁的&#xff0c;官网。 获取锁过程 &#xff08;创建临时节点&…

基于websocket简易封装一个全局消息通知组件

期望是&#xff0c;在用户登录后台后。新的任务到来时能够及时通知到并且去处理。 效果图 前端 <template><div></div> </template><script> import { updateRead } from "/api/system/approval-notification"; export default {dat…

Android Gradle

#1024程序员节&#xff5c;征文# Gradle 是一款强大的自动化构建工具&#xff0c;广泛应用于 Android 应用开发。它通过灵活的配置和丰富的插件系统&#xff0c;为项目构建提供了极大的便利。本文只是简单的介绍 Gradle 在 Android 开发中的使用&#xff0c;包括其核心概念、构…

【mysql进阶】5-事务和锁

mysql 事务基础 1 什么是事务 事务是把⼀组SQL语句打包成为⼀个整体&#xff0c;在这组SQL的执⾏过程中&#xff0c;要么全部成功&#xff0c;要么全部失败&#xff0c;这组SQL语句可以是⼀条也可以是多条。再来看⼀下转账的例⼦&#xff0c;如图&#xff1a; 在这个例⼦中&a…

中酱集团:黑松露酱油,天然配方定义健康生活

在如今的大健康时代&#xff0c;人们对于美食的要求越来越高。不仅美味&#xff0c;更要健康。在健康美食的生态链中&#xff0c;有一个名字正逐渐成为品质与美味的代名词——中酱集团。而当中酱集团与黑松露酱油相遇&#xff0c;一场味觉的革命就此拉开帷幕。 中酱集团&#x…

生成式UI 动态化SDK的研发--开篇

这里写目录标题 1. 背景2.名词解释2.1 DSL2.2 AI大模型2.3 生成式UI 3. 前言4.未来展望 1. 背景 随着AI大模型技术的兴起&#xff0c;UI界面的开发和交互必定会发生巨大的改变。在大模型技术出现之前&#xff0c;软件的界面是通过UI设计师和交互设计师先定义好软件的UI界面&am…

如何在手机上解压7z格式文件?最佳软件推荐与使用指南

在当今数字化时代&#xff0c;手机已经成为我们生活中不可或缺的工具。随着文件数量的不断增加&#xff0c;文件管理变得尤为重要。 而在手机上解压 7z 文件具有重大的意义。 首先&#xff0c;7z 文件格式以其高压缩率而闻名。这意味着可以在有限的存储空间内存储更多的文件。…

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

2024-10-19&#xff0c;由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法&#xff0c;通过将常规视频转换成伪标记的多摄像机视角推荐数据集&#xff0c;有效解决了在未知领域中模型泛化能力差的问题。数据集的创建&#xff0c;为电影、电视和其他媒体…

每日OJ题_牛客_DP23不相邻取数_打家劫舍dp_C++_Java

目录 牛客_DP23不相邻取数_打家劫舍dp 题目解析 C代码 Java代码 牛客_DP23不相邻取数_打家劫舍dp 不相邻取数_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 小红拿到了一个数组。她想取一些不相邻的数&#xff0c;使得取出来的数之和尽可能大。你能帮帮她吗&#x…

飞腾X100 NPU Benchmark使用说明

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

Kafka消费者故障,出现活锁问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资…