当前位置: 首页 > article >正文

安全面试4

文章目录

  • 给的源码是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.kler.cn/a/559207.html

相关文章:

  • 网络和操作系统基础篇
  • 边缘安全加速(Edge Security Acceleration)
  • 【行业解决方案篇二】【当图神经网络成为“金融侦探”:DeepSeek反洗钱系统技术全解】
  • Nginx WebSocket 长连接及数据容量配置
  • LabVIEW中显微镜下位移误差的畸变
  • 解决:Conda虚拟环境中未设置CUDA_HOME的问题
  • C/C++跳动的爱心
  • DeepSeek+Kimi生成高质量PPT
  • LeetCode 热题 100 11. 盛最多水的容器
  • 如何手动设置u-boot的以太网的IP地址、子网掩码、网关信息、TFTP的服务器地址,并进行测试
  • forge-1.21.x模组开发(一)注册方块和物品
  • 【模板】Linux中cmake使用编译c++程序
  • 《Spring实战》(第6版) 保护Spring
  • Vue 3 + Vite 项目中配置代理解决开发环境中跨域请求问题
  • C++ 设计模式-解释器模式
  • 跟着 Lua 5.1 官方参考文档学习 Lua (5)
  • 论文解读(全头皮重建方向):3DCMM
  • Baklib知识中台架构迭代与服务效能升级
  • 云计算中的API网关是什么?为什么它很重要?
  • 【蓝桥杯单片机】第十三届省赛第二场