PHP代码审计——Day 9-Rabbit

news/发布时间2024/5/6 6:53:20

漏洞解析

class LanguageManager
{public function loadLanguage(){$lang = $this->getBrowserLanguage(); // 获取浏览器语言$sanitizedLang = $this->sanitizeLanguage($lang); // 去除可能的不安全字符require_once("/lang/$sanitizedLang"); // 引入相应的语言文件}private function getBrowserLanguage(){$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'en'; // 从 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 中获取浏览器发送的语言信息,如果不存在则默认为英文('en')return $lang;}private function sanitizeLanguage($language) // 将'../' 替换为空字符串{return str_replace('../', '', $language);}
}(new LanguageManager())->loadLanguage();

考察点:str_replace过滤不当导致的任意文件包含漏洞

程序过滤仅仅是将../替换为空字符串,问题就是这个包含只是单次替换而不是循环替换,所以这种替换就很容易被绕过。只需要叠写一下就好了。构造成...//, .././是可以绕过过滤的。

str_replace:(PHP 4, PHP 5, PHP 7)

  • 功能 :子字符串替换
  • 定义 : mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。如下:

  • str_replace(字符串1,字符串2,字符串3):将字符串3中出现的所有字符串1换成字符串2。
  • str_replace(数组1,字符串1,字符串2):将字符串2中出现的所有数组1中的值,换成字符串1。
  • str_replace(数组1,数组2,字符串1):将字符串1中出现的所有数组1一一对应,替换成数组2的值,多余的替换成空字符串。

构造payload:Accept-Language: .//....//....//etc/passwd

参考文章

https://github.com/hongriSec/PHP-Audit-Labs/blob/master/Part1/Day9/files/README.md

https://lanvnal.com/2020/02/19/rips-php-security-calendar-2017-xue-xi-ji-lu/#toc-heading-2

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

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

相关文章

最好用的Python IDE,pycharm保姆级安装教程

简介 由于Python语法简单容易入门,并且Python在办公自动化等领域的功能非常强大,所以现在越来越多非IT行业的人也开始学起了Python,要学习和使用一门编程语言,一个好用的IDE是必不可少的,而对于Python来说,最好的IDE无疑是Pycharm。本文就给大家介绍一下如何从零到一来安…

2-58. 实现农作物的重复收割

修改 Crop修改 GridMapManager修改 EventHandler修改 GridMapManager修改 Crop修改 CropDataList_SO项目相关代码 代码仓库:https://gitee.com/nbda1121440/farm-tutorial.git 标签:20240410_1825

uniapp转译微信小程序动态样式语法问题(:style)

这样书写之后编译成微信小程序时会出现一下情况造成此类原因是因为 我们直接给了一个对象而不是字符串(即直接给字符串不会出现此类问题) 而微信不能直接识别 所以直接在动态赋值时加上中括号

实验一-密码引擎-3-加密API研究

一、微软的Crypto API CryptoAPI 系统体系结构 Web Crypto API CSP开发基础--CryptoAPI函数简介 Crypto API结构 基本加密函数用于连接到 CSP 的_上下文函数_。 这些函数使应用程序能够按名称选择特定的 CSP,或选择可以提供所需功能类别的特定 CSP。 用于生成和存储加密密钥的…

实验一-密码引擎-加密API的研究

一、任务详情 密码引擎API的主要标准和规范包括: 1 微软的Crypto API 2 RAS公司的PKCS#11标准 3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等 研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同…

小美的数组操作(美团2024届秋招笔试第二场编程真题)

题面核心思想 可以从示例中看出 当 sum / n 能够整除时 我们选择平均数作为众数即可 不能整除时 也就表示着不可能让所有数相同 那么我们可以舍弃掉一个数a 记剩下的数集合为 b 那么当 b 需要 +1 或 -1 后可能会剩下一些数 那么我们可以选择让 a去执行相反操作从而不影响 b 中剩…