• CTF之PHP黑魔法总结


    继上一篇php各版本的姿势(不同版本的利用特性),文章总结了php版本差异,现在在来一篇本地日记总结的php黑魔法,是以前做CTF时遇到并记录的,很适合在做CTF代码审计的时候翻翻看看。

    一、要求变量原值不同但md5或sha1相同的情况下

    1.0e开头的全部相等(==判断)

    240610708 和 QNKCDZO md5值类型相似,但并不相同,在”==”相等操作符的运算下,结果返回了true.

    Md5和sha1一样

    2.利用数组绕过(===判断)

    Md5和sha1对一个数组进行加密将返回NULL;而NULL===NULL返回true,所以可绕过判断。

    二、Strcmp利用数组绕过

    查看php的手册

    int strcmp ( string $str1 , string $str2 )

    Return Values

    Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

    当输入的两个值为不是字符串时就会产生不预期的返回值:

    比如

    这样一段代码中,输入password[]=1则返回success,成功绕过验证

    三、当有两个is_numeric判断并用and连接时,and后面的is_numeric可以绕过

    四、NULL,0,”0″,array()使用==和false比较时,都是会返回true的

    五、Eregi匹配

    • 数组绕过

    ereg是处理字符串,传入数组之后,ereg是返回NULL

    • %00截断绕过

    http://www.secbox.cn/hacker/1889.html

    六、接收参数$a得存在,并且$a==0可用.绕过(非数字都可绕过)

    PHP

    七、接收参数中不能出现某一字符,但下面又必须使用可以php://伪协议绕过

    目前遇到的是file_get_contents其他情况具体而定

    八、is_numeric绕过

    空格、t、n、r、v、f、+、-能够出现在参数开头,“点”能够在参数任何位置,E、e只能出现在参数中间。

    九、php5,3,29,这里可以直接用%0b绕过s(空白字符)的匹配

    十、既是0又是1的情况

    $a==1&$test[$a]=t时

    • php精度(16以上)var_dump(9999999999999999999==1);//true
    • 科学计数法 .1e1 echo $b[‘.1e1’]//输出t

    .是字符串所以在数组里面变成0,但在is_numeric中有点则正常输出为数字

    十一、当switch没有break时可以继续往下执行

  • 相关阅读:
    (转)PHP 的 __FILE__ 常量
    smarty半小时快速上手教程(转)
    Namespace declaration statement has to be the very first
    ThinkPhp3.2 无法加载模块:Index
    注意mysql中的编码格式和php中的编码格式一致
    MySQL数据库备份与恢复方法(转)
    phpmyadmin设置id自增(AUTO_INCREMENT)(转)
    (转)用eclipse创建一个j2ee的web工程后,左面projects窗口中的项目如何没有显示webRoot文件夹,除了src的文件夹,其他都不显示
    CentOS6.8 安装 Nginx
    Eclipse Java注释模板设置详解
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7628152.html
Copyright © 2020-2023  润新知