安全面试4

文章目录

给的源码是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脚本的根目录。所有文件操作(包括文件包含)都会被限制在该目录下。
相关推荐
Lee川10 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川13 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i15 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有16 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有16 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫17 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫17 小时前
Handler基本概念
面试
Wect17 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼18 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼18 小时前
Next.js 企业级落地
前端·javascript·面试