首页 > 编程语言 >PHP代码审计——Day 9-Rabbit

PHP代码审计——Day 9-Rabbit

时间:2024-04-10 19:33:07浏览次数:27  
标签:lang Rabbit 数组 replace str 字符串 PHP Day

漏洞解析

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

标签:lang,Rabbit,数组,replace,str,字符串,PHP,Day
From: https://www.cnblogs.com/smile2333/p/18127229

相关文章

  • 运维系列(亲测有效):利用 PHPStuday 2018 集成化工具对Apache进行站点域名管理
    利用PHPStuday2018集成化工具对Apache进行站点域名管理利用PHPStuday2018集成化工具对Apache进行站点域名管理利用PHPStuday2018集成化工具对Apache进行站点域名管理第一步:第二步:第三步:第四步:第五步:利用PHPStuday2018集成化工具对Apache进行站点域......
  • PHP代码审计——Day 8-Candle
    漏洞解析header("Content-Type:text/plain");functioncomplexStrtolower($regex,$value){returnpreg_replace('/('.$regex.')/ei','strtolower("\\1")',$value);}forea......
  • 01 Php学习:导学篇
    Php是什么?PHP是服务器端脚本语言。PHP(HypertextPreprocessor)是一种通用开源脚本语言,主要用于服务器端开发。PHP脚本在服务器端执行,生成动态网页内容或执行服务器端任务。PHP可以嵌入到HTML中,也可以与各种数据库结合使用,常用于开发Web应用程序。PHP文件可包含文本、HT......
  • 03 Php学习:echo 、 print 、EOF
    echo和print在PHP中有两个基本的输出方式:echo和print。echo和print区别:echo-可以输出一个或多个字符串print-只允许输出一个字符串,返回值总为1注意:echo输出的速度比print快,echo没有返回值,print有返回值1。echo详解和举例在PHP中,echo语句用于将......
  • C语言学习笔记day18
    1.指针基本概念    1.地址:用来区分内存中不同字节的编号   2.指针:地址就是指针,指针就是地址   3.指针变量:存储指针的变量,有时去掉变量,称为指针2.指针运算符   1.&:      1.获得一个变量在内存空间中的首地址      2.让表达式类......
  • php中date() 函数
    实例格式化本地日期和时间,并返回格式化的日期字符串:<?php//Printsthedayechodate("l")."<br>";//Printstheday,date,month,year,time,AMorPMechodate("ljSofFYh:i:sA");?>定义和用法date()函数格式化本地日期和时间,并返回格式化的日期字符串。......
  • 消息中间件RabbitMQ_RabbitMQ的安装和配置2
    RabbitMQ官方地址:http://www.rabbitmq.com/安装文档:资料/软件/安装RabbitMQ.md注意:请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso安装虚拟机. 一、安装依赖环境在线安装依赖环境:yuminstallbuild-essentialopensslopenssl-develunixODBCunixODBC-develmake......
  • PHP中yield关键字的作用和示例
     php中的yield关键字是在php5.5版本引入的一个关键字,它在函数内部可以用来创建一个生成器(generator)。生成器可以用来遍历一个大数据集,而不需要一次性将整个数据集加载到内存中。yield关键字的作用是将当前函数变成一个生成器函数。在生成器函数内部,我们可以使用yield语句将......
  • JAVA语言学习-Day7
    概述计算机网络:将地理位置不同的具有独立功能的多台计算机及其外部设备,通过线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:传播交流信息,数据交换。通信想达到这个效果需要什么:通过ip地址及端口,定......
  • [算法刷题打卡]Day11
    1、Leetcode-面试经典150题目20- 14.最长公共前缀思路:1、首先对于空的情况判断,直接返回“”2、对于多个即两个以上的字符串找公共前缀,其实就是先两个两个找公共前缀。道理很简单,ans(S1,S2,S3,S4)= ans(S4,ans(S3,ans(S1,S2)))classSolution{public:string......