• 五十三:代码审计-TP5框架及无框架变量覆盖及代码审计


    漏洞关键字

    SQL注入:
    select insert update mysql_query mysqli等
    文件上传:
    $_FILES,type="file",上传,move_upload_file()等
    XSS跨站:
    print print_r echo sprintf die var_dump var_export等
    文件包含:
    Include include_once require require_once等
    代码执行:
    eval assert preg replace call user func call user func array等
    命令执行:
    system exec shell_exec `` passthru pcntl_exec popen proc_open
    变量覆盖:
    extract() parse_str() importrequestvariables() $$等
    反序列化:
    serialize() unserialize() _construct _destruct等
    通用关键字:
    $_GET $_POST $_REQUEST $_FILES $_SEVER

    双$$可能存在变量覆盖漏洞

    foreach遍历PHP中array(数组)中的值 var_dump()输出数组的变量

    变量名等于参数名,实现覆盖,接受$_GET,$_POST,$_COOKIE的值
    配合文件包含->满足包含变量覆盖的配置文件->找到可控变量包含的代码段->将可控变量进行覆盖->造成包含一句话木马

    变量覆盖配合文件包含实现任意文件包含
    自动审计或搜索关键字找到文件及代码段,全局配置文件搜索或访问触发全局配置文件配合手写代码测试变量覆盖
    配合文件包含漏洞覆盖指定文件实现文件包含攻击获取权限

    追踪$module变量出处文件,然后分析如何覆盖它达到目的
    payload:/about/index.php?fmodele=7&module=1.txt

    反序列化

    自动审计或搜索关键字找到文件及代码段
    __wakeup() //使用unserialize时触发
    __sleep() //使用serizalize时触发
    __destruct() //对象被销毁时触发
    __call() //在对象上下文中调用不可访问的方法时触发
    __callstatic() //在静态上下文中调用不可访问的方法时触发
    __get() //用于从不可访问的属性读取数据
    __isset() //在不可访问的属性上调用iisset()或者empyt() 触发

    找到__wakeup代码段,代码段调用函数中存在eval()等函数操作,可调试payload
    构造getsource()利用payload,实现file_get_contents函数配合eval执行
    payload:action=test&configuration=0:10:"PMA_config":1:{s:6:"source",11:"d:/test.txt";}

    Thinkphp5 简要知识点

    模块/目录/文件/方法

    入口文件,调试模式,访问路由,访问对应
    内置安全等测试访问不同方法名,不同文件不同方法名
    测试常规写法SQL注入,TP5规定写法SQL注入

    thinkphp框架

  • 相关阅读:
    hash算法
    TCP/IP四层与OSI七层模型
    di
    VSCode安装程序——java开发
    java中的多线程
    C#ThreadPool类—多线程
    学习-思考
    DataTable通过Select进行过滤
    javascript遍历对象属性
    WebClient 与HttpClient 的区别
  • 原文地址:https://www.cnblogs.com/SnowSec/p/14485491.html
Copyright © 2020-2023  润新知