安全面试4

embedded/2025/2/25 1:46:03/

文章目录

  • 给的源码是ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者从关注的点上有什么不同
    • 框架代码审计的流程
    • 无框架代码审计的流程
  • 反序列的时候,unserialize()反序列一个字符串的时候,对象会有一些魔术方法会被自动调用到,在找反序列化的链时,有哪些魔术方法是可以作为一个入手点去找的
  • 如果用白名单策略修复ssrf,从用户输入的变量里拿出要访问的目标,这个要注意哪些,因为一些url会通过特殊的字符做白名单绕过,对取变量这个操作有哪些要注意的细节?
  • php中三个等号和两个等号有什么区别
  • php代码常见入口函数怎么找
    • 超全局变量
    • 输入处理函数
    • 数据库操作函数
    • 文件操作函数
  • PHP的变量覆盖
  • 有一个php的程序,本身就允许文件包含的操作,同时想要避免文件包含漏洞,写代码的时候要注意哪些
  • 远程文件包含和本地文件包含,这两种涉及的php设置有什么
    • 远程文件包含(RFI)
  • 本地文件包含能不能通过php配置限制文件包含的路径(不通过代码直接通过配置项来解决)

给的源码是ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者从关注的点上有什么不同

框架代码审计的流程

  1. 框架熟悉:首先需要熟悉ThinkPHP的目录结构、配置文件、路由机制、模型-视图-控制器(MVC)架构等。例如,ThinkPHP的配置文件加载顺序为惯例配置->应用配置->模块配置->动态配置
  2. 漏洞复现:针对ThinkPHP的历史漏洞(如SQL注入、反序列化漏洞等)进行复现和分析,了解其成因和利用方式
  3. 工具辅助:使用自动化工具(如Seay源码审计系统、PHPStorm)进行初步扫描,结合手动审计验证结果

无框架代码审计的流程

  1. 代码结构分析:需要手动分析代码的目录结构和逻辑,因为没有框架的约束,代码可能分散且不规范。
  2. 手动审计为主:由于缺乏框架的规范性,自动化工具的效果有限,更多依赖手动审计。

反序列的时候,unserialize()反序列一个字符串的时候,对象会有一些魔术方法会被自动调用到,在找反序列化的链时,有哪些魔术方法是可以作为一个入手点去找的

  1. __wakeup():在unserialize()反序列化对象时自动调用。
  2. __destruct():在对象被销毁时自动调用(如脚本执行结束或手动调用unset())。
  3. __toString():当对象被当作字符串使用时自动调用(如echo、print、字符串拼接等)。
  4. __call():当调用对象中不存在的方法时自动调用。
  5. __get():当访问对象中不存在的属性时自动调用。
  6. __set():当给对象中不存在的属性赋值时自动调用。
  7. __invoke():当尝试将对象作为函数调用时自动调用。

如果用白名单策略修复ssrf,从用户输入的变量里拿出要访问的目标,这个要注意哪些,因为一些url会通过特殊的字符做白名单绕过,对取变量这个操作有哪些要注意的细节?

  1. 检查协议:只允许http和https协议,禁止file://、gopher://、dict://等危险协议。
  2. 检查域名或IP:使用正则表达式或白名单列表验证域名或IP是否合法。
  3. 处理编码问题:对URL进行解码(如urldecode()),确保特殊字符(如%2f、%252f)不会绕过白名单。
  4. 检查路径和参数:确保路径和参数不包含恶意内容(如…/、@、#等)。
  5. 处理重定向:禁止或限制URL重定向,防止攻击者通过重定向绕过白名单。
  6. 解析URL:使用parse_url()函数解析URL,确保提取的域名、路径和参数是规范的。

php中三个等号和两个等号有什么区别

  1. ==:比较两个值是否相等,但在比较之前会进行类型转换(弱类型)
  2. ===:比较两个值是否相等,且类型必须相同。

php代码常见入口函数怎么找

超全局变量

  1. $_GET:获取URL参数。
  2. $_POST:获取POST请求体中的数据。
  3. R E Q U E S T :获取 _REQUEST:获取 REQUEST:获取_GET、 P O S T 和 _POST和 POST_COOKIE的合并数据。
  4. $_COOKIE:获取客户端发送的Cookie。
  5. $_FILES:获取上传的文件。
  6. $_SERVER:获取服务器和执行环境信息。

输入处理函数

  1. file_get_contents():读取文件或URL内容。
  2. fopen():打开文件或URL。
  3. include / require:包含文件。
  4. eval():执行字符串中的PHP代码。
  5. system() / exec() / passthru():执行系统命令。
  6. unserialize():反序列化数据。

数据库操作函数

  1. mysqli_query() / mysqli_prepare():执行SQL查询。
  2. PDO::query() / PDO::prepare():执行SQL查询。

文件操作函数

  1. file_put_contents():写入文件。
  2. move_uploaded_file():处理上传的文件。

PHP的变量覆盖

  1. 通过extract()函数:将数组中的键值对导入当前符号表,键作为变量名,值作为变量值。
  2. parse_str()函数:将查询字符串解析为变量。
  3. 通过$$可变变量:通过变量的值作为变量名来访问或修改变量。
  4. 通过import_request_variables()函数:将GET、POST、Cookie等请求变量导入全局作用域。

有一个php的程序,本身就允许文件包含的操作,同时想要避免文件包含漏洞,写代码的时候要注意哪些

  1. 限制包含的文件范围:只允许包含预定义的文件。
  2. 检查文件路径:确保文件路径在允许的目录范围内。
  3. 禁用远程文件包含,配置PHP:在php.ini中禁用allow_url_include和allow_url_fopen。
  4. 避免直接包含用户输入:使用安全的封装函数。
  5. 移除特殊字符:过滤用户输入中的…/、%00等危险字符。
  6. 避免相对路径:使用绝对路径包含文件,减少路径遍历的风险。

远程文件包含和本地文件包含,这两种涉及的php设置有什么

远程文件包含(RFI)

  1. allow_url_fopen:
    允许PHP通过URL(如http://、ftp://)打开文件。
  2. allow_url_include:允许PHP通过URL包含文件
    本地文件包含(LFI)
  3. open_basedir:限制PHP脚本可以访问的文件目录。
  4. disable_functions:禁用某些危险函数(如exec、system)。

本地文件包含能不能通过php配置限制文件包含的路径(不通过代码直接通过配置项来解决)

  1. open_basedir:限制文件访问路径:open_basedir用于限制PHP脚本可以访问的文件系统路径。所有文件操作(包括文件包含)都会被限制在指定的目录及其子目录中。
  2. disable_functions:禁用危险函数:disable_functions用于禁用某些可能被滥用的PHP函数(如exec、system等),从而减少攻击者通过LFI执行系统命令的风险。
  3. doc_root:设置文档根目录:doc_root用于指定PHP脚本的根目录。所有文件操作(包括文件包含)都会被限制在该目录下。

http://www.ppmy.cn/embedded/164928.html

相关文章

从卡顿到丝滑:火山引擎DeepSeek-R1引领AI工具新体验

方舟大模型体验中心全新上线,免登录体验满血联网版Deep Seek R1 模型及豆包最新版模型:https://www.volcengine.com/experience/ark?utm_term202502dsinvite&acDSASUQY5&rcGO9H7M38 告别DeepSeek卡顿,探索火山引擎DeepSeek-R1的丝滑之旅 在A…

网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)

文章目录 PPP(Point to Point Protocol,点对点协议,华为默认使用)实验1:设置为pap模式实验2:设置为chap模式(实验1的基础上) 串口封装协议HDLC(High-Level Data Link Con…

QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)

接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…

RK Android11 WiFi模组 AIC8800 驱动移植调试记录

RK Android11 WiFi模组 AIC8800 驱动移植调试记录 作者:Witheart更新时间:20250221 概要:本文记录了 RK3568 平台上移植并调试 WiFi6 模组 AIC8800 的过程,涵盖 WiFi 和蓝牙驱动的适配与问题排查。 配置流程在另一篇文章&#x…

Day9,Hot100(图论)

图论 图论部分推荐 acm 模式,因为图的输入处理不一样 DFS,类似二叉树的递归遍历 BFS,类似二叉树的层次遍历 208. 实现 Trie (前缀树) 数据结构大概如下: 可以看成是 二十六叉树 (因为26个小写字母) …

互推机制在开源AI智能名片2+1链动模式S2B2C商城小程序源码推广中的应用探索

摘要: 在数字化营销时代,开源AI智能名片21链动模式S2B2C商城小程序源码作为一种创新的技术解决方案,正逐步成为企业数字化转型的重要工具。然而,面对激烈的市场竞争,如何高效推广这一前沿技术产品,成为开发…

Python学习总结

客户端与服务端聊天窗口 服务端 导入 wxPython 用于创建图形界面。 socket 用于网络通信,AF_INET 是 IPv4 地址族,SOCK_STREAM 表示流式套接字(TCP)。 利用wxPython 创建图形界面,并通过 socket 与服务器通信。 主要…

uniapp 安卓端 使用axios 和 renderjs 上传 FormData 参数

<template><view><!--<button click"request">调用 RenderJS 方法</button>--><view v-show"false" :data"data" :change:data"requestModule.realRequest"></view></view> </tem…