PHP中一些特征函数导致的漏洞总结

第一部分: 特征函数

接触到几个常用的函数:
\=\=
\=\=\=
md5
intval
strpos
in_array
preg_match
str_replace

php用这些函数实现过滤一些代码,漏洞可能有一些特性,利用这些特征代码进行对比;账号密码对比;强制检测数据类型等都会用到这些函数,接下来具体讲解一下各个函数的使用:

  1. = 赋值
  2. == 弱类型对比,但是不会对比类型,这种存在缺陷绕过,举个例子,判断一个值是否==1,这种情况用户输入的+1,1.0,1a都会被当成正确的情况进行处理,这点在数据库中也是,当输入的值是字符串类型的时候,1a和1对比时,1a只取1和1对比,和后面的a无关,利用这点,如果1a=1报错,说明是数字型,如果1a=1不报错,说明时字符型,在这里时为了说明如果不进行强类型的对比1后面可以接入字符串。
    让我们来拓展一下,如果只进行弱类型对比,假设密码用md5进行加密了存放在数据库中,存放的密码和用户输入的密码的md5加密值中间用/=/=判断而不是用/=/=/=判断的后果,就是可能产生hash碰撞,如下图所示。:在这里插入图片描述
    这样就达到了绕过的目的。
  3. . === 对比,会对比类型
    此时可以使用数组进行绕过,对于数组name[]来说$_GET[‘name’]获取到的值就是null,让我们来看个例子:
    在这里插入图片描述

如果输入的值是name[]=1&password[]=2的结果就是获取到的值为null,在图中上面的部分,判断的值也就相等了,从而达到绕过的目的。这种情况在ctf中比较常见。

  1. intval()函数:就是把其他类型的东西变成10进制int类型的数据。具体用法参考:https://www.runoob.com/php/php-intval-function.html
    这个东西,可以用来过滤sql注入,比如id=1 and 1=1 ,使用这个函数,只能获取到id = 1 ,同时根据文档里的这段话:

    语法
    int intval ( mixed $var [, int $base = 10 ] )
    参数说明:
    $var:要转换成 integer 的数量值。
    $base:转化所使用的进制。
    如果 base 是 0,通过检测 var 的格式来决定使用的进制:
    如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,
    如果字符串以 “0” 开始,使用 8 进制(octal);否则,
    将使用 10 进制 (decimal)。

在这里插入图片描述
666的十六进制的值是0x29a,此时如果用户输入的值是0x29a,这两个值仍然是相等的关系,也会输出flag。

  1. strpos()函数:查找字符串在另一字符串中第一次出现的位置(区分大小写)。
    参考:https://www.runoob.com/php/func-string-strpos.html
    在这里插入图片描述

  2. in_array() 函数:
    参考:https://www.runoob.com/php/func-array-in-array.html

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
参数 描述
needle 必需。规定要在数组搜索的值。
haystack 必需。规定要搜索的数组。
strict 可选。如果该参数设置为 TRUE,则 in_array() 函数检查搜索的数据与数组的值的类型是否相同。

如果strict的位置是true可以检查类型相当于/=/=/=,如果是false的话,就相当于/=/=,这种情况就相当于存在绕过,例如1e在[1,2,3]中也算是出现过,1d/+1/1.0也出现过。

  1. preg_match()函数:用于执行一个正则表达式匹配
    参考:https://www.runoob.com/php/php-preg_match.html
    这里可以使用数组绕过:
    在这里插入图片描述

并且这里最后获取的值num的值是1,这是chatgpt给我的解释:

$_GET['num'] 是一个数组,而数组的首个元素是1,可以成功转换为数字。
因此,intval($num) 的结果是1,条件 if(intval($num)) 为真,导致 echo $flag; 被执行。

后面我去手动输出验证了一下,该段代码中:

<?php
$flag = 'success ----';
if(isset($_GET['num'])){$num = $_GET['num'];
if(preg_match("/[0-9]/",$num)){
die("no no no");
}
if(intval($num)){
echo "===================";
echo intval($num);
echo $flag;
}
}
?>

$_GET[‘num’]获取到的值是Array,而intval( $_GET[‘num’])的值是1,所以可以输出最后正确的结果。

  1. str_replace()函数:以其他字符替换字符串中的一些字符(区分大小写)。
    //参考:https://www.w3school.com.cn/php/func_string_str_replace.asp
<!DOCTYPE html>
<html>
<body><?php
echo str_replace("world","Shanghai","Hello world!");
?></body>
</html>//输出结果:Hello Shanghai!

常常用于过滤sql
在这里插入图片描述

这种过滤无法迭代执行,例如输入sselectelect,最终还是会出现select的字样。

正则表达式中/i 是否区分大小写;/m 是否接受换行,可以使用%0a %20进行绕过。

%0a:代表换行符(Line Feed),ASCII码值为10。在URL编码中,换行符被表示为 %0a。
%20:代表空格字符。在URL编码中,空格通常被表示为 %20。

这类ctf题不仅可以参加比赛,而且还可以学习实际代码,将来实战很有帮助,不要单纯做ctf狗。
循环过滤一般用的就是正则表达式,顺序过滤用的是str_replace(),但是这个有比较特殊的用法,如下列代码:

<?php
$s = "..//..../";
$search = array('../','./');
$dir = str_replace($search,'',$s);
echo $dir;?>

首先会把$s中先将…/的结果替换完之后,再将结果中的./替换成空,这是我从实验中得来的,所以这种替换是按照数组的顺序进行替换的。

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

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

相关文章

ChatGPT无法胜任的五种编程任务

我喜欢把ChatGPT看作是StackOverflow的智能版&#xff0c;它大有帮助&#xff0c;但短期内不会取代专业人士。作为一名前数据科学家&#xff0c;ChatGPT问世后&#xff0c;我花了大量时间来试用它。其编程能力确实给我留下了深刻的印象。它可以从零开始生成非常有用的代码&…

核桃的数量---蓝桥杯

思路&#xff1a; 题目所代表的意思就是a,b,c这三个必须是核桃数量的因子&#xff0c;即a,b,c三个的最小公倍数 #include <iostream> #include <algorithm> using namespace std; // int main() { int a,b,c;cin>>a>>b>>c;int da*b/__gcd(a,b…

大数据处理,Pandas与SQL高效读写大型数据集

大家好&#xff0c;使用Pandas和SQL高效地从数据库中读取、处理和写入大型数据集&#xff0c;以实现最佳性能和内存管理&#xff0c;这是十分重要的。 处理大型数据集往往是一项挑战&#xff0c;特别是在涉及到从数据库读取和写入数据时。将整个数据集加载到内存中的传统方法可…

antdesignvue中使用VNode写法

1、使用场景 如图&#xff1a;消息提示框中&#xff0c;将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例&#xff1a; ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…

k8s的图形化工具---rancher

声明式&#xff1a;yaml文件 陈述式&#xff1a;命令行 k8s的图形化工具---rancher racher是一个开源的企业级多集群的k8s关联平台。 rancher和k8s区别&#xff1a; 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能调度&#xff0c;还能管理k8s集群&#xff0…

mac电脑安卓文件传输工具:Android File Transfer直装版

Android File Transfer&#xff08;AFT&#xff09;是一款用于在Mac操作系统上与Android设备之间传输文件。它允许用户将照片、音乐、视频和其他文件从他们的Android手机或平板电脑传输到Mac电脑&#xff0c;以及将文件从Mac上传到Android设备。 下载地址&#xff1a;https://w…

Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

【项目日记(四)】第一层: 线程缓存的具体实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

CC工具箱使用指南:【Excel导出图片】

一、简介 这是一个有点娱乐向的小工具。作用就是将Excel的内容导出成一个JPG图片&#xff0c;目前只针对Excel中的第一个sheet表。 说不出来实际作用在哪里&#xff0c;不过把一个长表快速导出图片&#xff0c;有时候也挺有意思&#xff0c;有兴趣可以试试。 二、工具参数介绍…

MySQL-进阶-索引

一、索引概述 1、介绍 2、有误索引搜索效率演示 3、优缺点 二、索引结构 1、B-Tree&#xff08;多路平衡查找树&#xff09; 2、BTree 3、Hash 三、索引分类 四、索引语法 1、语法 2、案例 五、SQL性能分析 1、查看执行频次 2、慢查询日志 3、show-profile 4、explain

【目标跟踪】多相机环视跟踪

文章目录 一、前言二、流程图三、实现原理3.1、初始化3.2、输入3.3、初始航迹3.4、航迹预测3.5、航迹匹配3.6、输出结果 四、c 代码五、总结 一、前言 多相机目标跟踪主要是为了实现 360 度跟踪。单相机检测存在左右后的盲区视野。在智能驾驶领域&#xff0c;要想靠相机实现无…

新能源、新智造、新技术、新未来2024上海国际氢能产业展览会7月魔都开展!

氢能作为一种来源丰富、绿色低碳、应用广泛的二次能源&#xff0c;是实现可再生能源大规模消纳&#xff0c;电网大规模调峰和跨季节、跨地域储能的重要途径&#xff0c;对构建我国新型电力系统和实现碳达峰碳中和目标具有重要意义。 为落实国家关于发展氢能产业的决策部署&…

Springboot+vue的科研工作量管理系统的设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的科研工作量管理系统的设计与实现&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的科研工作量管理系统的设计与实现…

首批!鸿蒙千帆起,生态全面启动

在近日举办的鸿蒙生态千帆启航仪式上&#xff0c;华为常务董事、终端BG CEO余承东表示&#xff0c;鸿蒙生态设备已经增至8亿 &#xff0c;将打开万亿产业新蓝海。 在本次论坛上&#xff0c;华为宣布HarmonyOS NEXT鸿蒙星河版&#xff08;开发者预览版&#xff09;已面向开发者…

初识计算机网络 | 计算机网络的发展 | 协议初识

1.计算机网络的发展 “矛盾是普遍存在的&#xff0c;矛盾是事物联系的实质内容和事物发展的根本动力&#xff01;” 计算机在诞生之初&#xff0c;在军事上用来计算导弹的弹道轨迹&#xff01;在发展的过程中&#xff08;商业的推动&#xff0c;国家政策推动&#xff09;&…

NTFS 磁盘管理 :NTFS Disk by Omi NTFS

NTFS Disk by Omi NTFS是一款专为Mac系统设计的NTFS文件系统读写解决方案的工具。它可以帮助Mac用户方便地访问和管理NTFS格式的硬盘、U盘、移动硬盘以及其他存储设备&#xff0c;提供高效稳定的NTFS卷管理功能。 NTFS 磁盘管理 &#xff1a;NTFS Disk by Omi NTFS 该软件的主…

web项目开发的基本过程

一、背景 web项目开发基本过程一般由需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;数据库设计&#xff0c;编码&#xff0c;测试&#xff0c;发布上线这几个过程。这就是经典的瀑布模型。但是随着系统的复杂度越来越高&#xff0c;团队人员技术栈分工越来越小…

Vue2 - keep-alive 作用和原理

目录 1&#xff0c;介绍和作用2&#xff0c;原理3&#xff0c;使用场景3.1&#xff0c;效果展示3.2&#xff0c;实现思路 1&#xff0c;介绍和作用 <!-- 非活跃的组件将会被缓存&#xff01; --> <keep-alive><component :is"activeComponent" />…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格&#xff0c;打开Tomca目录&#xff0c;把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作&#xff1a;终端输入[sudo chmod 755 *.sh]&#xff0c;回车 …

JS进阶-解构赋值(一)

扩展&#xff1a;解构赋值时Js特有的一种处理数据的方式&#xff0c;在Java中没有处理数据的方式 知识引入&#xff1a; 思考&#xff1a;在js中&#xff0c;在没有学习解构赋值之前&#xff0c;我们是如何获取数组的内容的&#xff1f; 以上要么不好记忆&#xff0c;要么书写麻…