首页 > 编程语言 >Php基础漏洞

Php基础漏洞

时间:2022-09-24 11:47:28浏览次数:77  
标签:基础 漏洞 数组 字符串 绕过 Php extract 比较 md5

Php基础漏洞--30

0x01 前言

Php是世界上最好的语言
危险函数大概有一下:extract、

0x02 中言

extract

extract(array,extract_rules,prefix)
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

如果extract_rules参数未指明,则默认覆盖已有变量。如果array可以人为操作,那么可以控制所有的变量值。想要使用的话多利用extract_rules参数。

绕过过滤的空白字符

主要是一些小tips

  • ==弱比较,520=='520lcx'同时转化成数字为True,'+191'=='191'
  • 可以引入\f(也就是%0c)在数字前面,因为intval和is_numeric都会忽略这个字符,所以不会影响。
  • is_numeric($_REQUEST['number'])为假,这个绕过的方法很多使用%00开头也可以再POST一个number参数把GET中的覆盖掉也可以,这个函数会把'+191','191',尽管有引号,还是认为为数字。

Mysql | SqlServer WITH ROLLUP绕过

WITH ROLLUP与group by一起使用,是对group by的信息的再次统计,而分组的条件会逐步返回NULL,如果已知用户名,可以返回用user列表的最后一个username和为空的pwd进行比较,实现绕过

ereg正则%00截断

ereg为正则匹配函数,当遇到目标字符串中的%00后,则认为字符串匹配结束,所以可以在%00后添加一些可以绕过其他判断条件的字符串。同时在php若比较中。如果两边的字符串为数字形式,则会先转换成数字再比较

<?php
echo ('1'==='1e0'); #1
?>

传入其他东西也会返回null

strcmp比较字符串

strcmp(str1, str2)
    if(str1 < str2) {
        return < 0;
    }

    else if (str1 > str2) {
        return > 0;
    }

    else {
        return 0;
    }

利用strcmp传入的是数组时,会直接返回null,弱比较中null认为是0,则认为传入的两个参数相同。所以记得用强比较(tips:该漏洞适用5.3之前。

sha/md5()函数比较绕过

<?php
 define('FLAG', 'DrunkCTF{you_bypass_md5!}');
 if (($_GET['s1']) != $_GET['s2'] && md5($_GET['s1']) == $_GET['s2']) {
     echo "success, flag is :" . FLAG;
 }
?>

绕过一

用科学计数法绕过

‘0e123456789’ == ‘0e987654321’ == 0

以下值在md5加密后以0E开头:

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a
  • payload 如下

payload

md5.php?s1=QNKCDZO&s2=240610708

绕过二

通过数组绕过,也叫数组 trick

md5([1,2,3]) == md5([4,5,6]) == NULL

所以我们的 payload:

md5.php?s1[]=1&s2[]=2

探测任意网站密码明文/加密手段办法

SESSION验证绕过

比较session时,可以控制cookie中的东西来控制session获得的值(不知道对不对)

intval函数截断

intval只会提取整数部分,会截断小数点

strpos数组trick

找特定字符串的第一个位置。
传入的是数组时,会直接返回null,可以在强比较中和FALSE比较。

0比较绕过

PHP中非数字开头字符串和数字0比较==都返回True

implode()

implode(separator,array)

implode() 函数返回一个由数组元素组合成的字符串。

0x03 后言

标签:基础,漏洞,数组,字符串,绕过,Php,extract,比较,md5
From: https://www.cnblogs.com/iridescense/p/16710560.html

相关文章

  • 学习笔记-Nmap基础用法
    Nmap安装包下载:https://nmap.org/download.htmlkali自带Nmap基本功能1.默认方式扫描:命令格式:nmap<扫描对象地址>只会扫描常用端口,不能做到全端口扫......
  • 【code基础】求每位数字之和
    对一个n位数求和,如12345,求每位数字之和,应该输出15//求和的经典操作://1.定义基本sum=0,在num!=0之前做如下循环://2.先取低位值相加,即sum=sum+num%10//3.nu......
  • 2022-2023-1 20221304 《计算机基础与程序设计》第四周学习总结
    2022-2023-120221304《计算机基础与程序设计》第四周学习总结作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/......
  • javaSE基础-泛型
    泛型为什么要有泛型泛型:相当于标签集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在jdk1.5之前只能把元素类型设计为Object,在jdk1.5......
  • Java基础Day4-Java方法
    一、方法的定义Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段。方法包括一个方法头和一个方法体。修饰符返回值类型方法名(参数类型参数名){......
  • python基础操作
    pycharm下载+使用该软件有两种版本分别是收费版和免费版:免费版功能太少,尽量使用收费版​30天试用操作如下:2.免费试用该软件:​版本越新越难弄成......
  • python基础
    python语法之注释注释,是指写在代码中不会被运行的,也是一种小笔记,但是言简意赅能看懂的注释最好,不必要长篇大论的注释。pycharm中的快捷键ctrl+?注释分成:单行注释1:井......
  • ThinkPHP5.1 交互式命令
    前言:    在平时项目中,有时需要对某些业务进行批处理,比如为了版本兼容,或者不同系统的数据同步等场景下,我们会选择自定义一些指令定时或即时的执行。      ......
  • pycharm的安装与基础语法
    今日内容总结pycharm的安装与使用1.该软件分为收费版和免费版免费版功能太少(communit)所以我们尽量使用收费版(professinal)收费版有30天免费试用2.想要免费试用......
  • get,post,put,delete四种基础方法对应增删改查
    PUT,DELETE,POST,GET四种基础方法对应增删改查1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增......