您的位置:首页 > 房产 > 建筑 > 站长平台网站_网络营销人员招聘_seo推广方法_seo 0xu

站长平台网站_网络营销人员招聘_seo推广方法_seo 0xu

2025/3/9 21:47:58 来源:https://blog.csdn.net/m0_62828084/article/details/146085924  浏览:    关键词:站长平台网站_网络营销人员招聘_seo推广方法_seo 0xu
站长平台网站_网络营销人员招聘_seo推广方法_seo 0xu

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

目录

 长某亭科技-安全服务工程师(二面) 

1. PHP代码审计流程

核心步骤

示例

2. ThinkPHP框架审计 vs 原生PHP

3. PHP原生敏感函数及搜索关键字

4. 反序列化链魔术方法入口点

5. SSRF漏洞原理与利用

原理

利用方式

PHP最大化利用

6. SSRF修复建议

白名单策略关键点

7. PHP === 与 == 的区别

8. PHP入口函数与路由方法

9. PHP变量覆盖漏洞

常见场景

10. 文件包含漏洞防御

代码层面

配置层面

11. SQL注入防御(PHP vs Java)

12. 二次注入与防御

原理

防御

总结


 

 长某亭科技-安全服务工程师(二面) 

拿到一份php代码做审计,审计的流程大概是怎么样的给的源码时ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者关注的点上有什么不同php原生的敏感函数有哪些,比如搜索关键字的话会搜哪些反序列化的时候,unserialize()反序列的一个字符串的时候,对象会有一些魔术方法会被自动调用到,在找反序列化的链时,有哪些魔术方法是可以作为一个入手点去找的有没有审计过实际的项目,比如github上一些开源的cmsSSRF这类的漏洞熟悉吗,说一下原理和利用方式我们利用SSRF可以做什么,达到什么效果在php环境下,怎么最大程度的利用SSRF,拿到shell或者进入内网怎么利用内网的机器请求内网中的服务ssrf漏洞的修复建议,修复的时候需要注意哪些细节如果用白名单策略修复ssrf,从用户输入的变量里拿出要访问的目标,这个需要注意哪些,因为一些url会通过特殊的字符做白名单绕过,对取变量这个操作有哪些需要注意的细节php三个等号与俩个等号的区别php代码常见的入口函数一些php的开发框架可以帮我们做一下ur路由,对这些路由的方法熟悉吗php的变量覆盖有一个php的程序,本身就允许文件包含的操作,同时想要避免文件包含漏洞,写代码的时候注意哪些远程文件包含和本地文件包含,这俩种涉及的php设置是什么本地文件包含能不能通过php配置限制文件包含的路径(不通过代码直接通过配置项来解决)php做sql注入防御有哪些方法java 做sql注入防御有哪些方法sql的二次注入如何防御二次注入

1. PHP代码审计流程

核心步骤
  • 环境分析
    确认PHP版本(如5.6/7.4/8.0)、框架版本(ThinkPHP 3.2/5.0/6.0)及依赖库(如Guzzle HTTP),检查是否存在已知CVE漏洞(如ThinkPHP 5.0.23 RCE)。
  • 敏感函数追踪
    全局搜索eval()system()file_put_contents()等函数,结合用户输入(如$_GET['id'])判断是否可控。
  • 动态调试
    使用Xdebug跟踪关键参数(如路由参数、数据库查询语句),验证过滤逻辑是否绕过。
  • 框架特性审计
    针对框架的中间件、模板引擎(如Smarty)、ORM(如Eloquent)检查配置错误(如调试模式开启)。
示例

若发现$id = input('id'); Db::query("SELECT * FROM table WHERE id=$id");,可能存在SQL注入,因未使用预处理。


2. ThinkPHP框架审计 vs 原生PHP

维度ThinkPHP原生PHP
路由安全检查route.php 中是否开放危险路由(如/admin/*直接通过$_GET['page']调用脚本
输入过滤框架自带input()过滤,但可能被绕过(如数组注入)依赖开发者手动调用htmlspecialchars()
历史漏洞需关注框架漏洞(如5.x反序列化链、6.x路由RCE)常见于文件包含、命令执行原生函数滥用
数据库操作ORM可能自动过滤,但复杂查询仍需手动处理直接拼接SQL导致注入风险高

3. PHP原生敏感函数及搜索关键字

  • 代码执行eval()assert()create_function()
  • 命令执行system()exec()passthru()、反引号(`ls`
  • 文件操作file_get_contents()fopen()include/require(动态路径时)
  • 数据库注入mysql_query()mysqli_query()(未过滤拼接语句)
  • 反序列化unserialize()

搜索技巧:用正则匹配如(\$_(GET|POST|COOKIE).*?){.*?(eval|system),定位用户输入到敏感函数的链路。


4. 反序列化链魔术方法入口点

  • __destruct():对象销毁时触发,常用于释放资源或调用其他方法(如关闭文件、删除缓存)。
  • __wakeup():反序列化时自动调用,可能初始化危险操作(如连接数据库)。
  • __toString():对象被转为字符串时触发(如echo $obj),可能触发链式调用。
  • __call():调用不存在方法时触发,动态执行代码(如$obj->run()触发__call('run'))。

实战案例:ThinkPHP 5.x反序列化漏洞中,通过__destruct()触发delete()方法删除文件,进一步构造链式调用执行命令。


5. SSRF漏洞原理与利用

原理

服务端未校验用户提供的URL,直接发起请求(如file_get_contents($_GET['url'])),导致攻击者操控服务端访问内网或本地资源。

利用方式
  • 协议利用
    • file:///etc/passwd:读取本地文件。
    • gopher://:3306/_...:攻击内网MySQL(发送恶意SQL包)。
  • 端口扫描:通过响应时间差异判断内网端口开放状态(如http://192.168.1.1:8080)。
  • 绕过限制
    • 使用[::]绕过IP格式检测(如http://[::]:80@192.168.1.1:8080/)。
    • 短域名重定向(如http://tinyurl.com/redirect-to-localhost )。
PHP最大化利用
  • 开启allow_url_fopen=Onallow_url_include=On时,结合php://input执行代码。
  • 利用expect://协议执行系统命令(需安装PECL扩展)。

6. SSRF修复建议

白名单策略关键点
  • 解析规范化
    使用parse_url()解析URL后,严格校验hostscheme(如仅允许http(s)://example.com )。
  • 防御绕过
    • 禁止@#等分隔符(如http://evil.com@trusted.com )。
    • 禁用重定向(如curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false))。
  • 协议限制:禁用filegopherdict等高危协议。

代码示例php

$url = $_GET['url']; $parsed = parse_url($url); if ($parsed['host'] !== 'allowed.com' || !in_array($parsed['scheme'], ['http', 'https'])) { die('Invalid URL'); }

7. PHP === 与 == 的区别

  • 松散比较(==:自动类型转换后比较值。
    • 0 == "0"true
    • false == "0"true
  • 严格比较(===:值和类型均需相同。
    • 0 === "0"false
    • false === 0false

安全影响:若使用==判断用户权限(如if ($_GET['role'] == 'admin')),攻击者传入0可能绕过检测。


8. PHP入口函数与路由方法

  • 原生PHP入口
    • 通过index.php?action=login 调用login()函数。
    • 使用$_SERVER['PATH_INFO']解析路径(如/user/profile)。
  • 框架路由
    • ThinkPHPRoute::get('user/:id', 'UserController@profile')
    • LaravelRoute::post('/api', 'ApiController@handle')
  • 路由安全
    • 限制HTTP方法(如仅允许GET访问公开接口)。
    • 避免路由通配符(如/admin/*可能暴露后台路径)。

9. PHP变量覆盖漏洞

常见场景
  • extract()滥用php
    extract($_GET); // 将$_GET键名转为变量,攻击者可覆盖$is_admin if ($is_admin) { ... }
  • parse_str()未初始化php
    parse_str($_SERVER['QUERY_STRING']); // 变量未初始化,导致覆盖 

防御:禁用extract(),或设置EXTR_SKIP参数拒绝覆盖已有变量。


10. 文件包含漏洞防御

代码层面
  • 固定文件后缀:include $_GET['page'] . '.php';
  • 映射用户输入到白名单:php
    $allowed = ['home', 'about']; $page = $_GET['page']; if (in_array($page, $allowed)) { include "$page.php"; }
配置层面
  • open_basedir = /var/www/html:限制PHP可访问的目录。
  • allow_url_include = Off:禁止远程文件包含。

11. SQL注入防御(PHP vs Java)

语言防御方案示例
PHPPDO预处理:$stmt->execute([$user])$stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?");
JavaPreparedStatement:ps.setString(1, user)PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE name = ?");

注意

  • PHP的mysqli_real_escape_string()需正确指定字符集(如mysqli_set_charset($conn, 'utf8'))。
  • Java的ORM框架(如MyBatis)需使用#{}而非${}(防止拼接)。

12. 二次注入与防御

原理

数据首次存入时未过滤(如INSERT INTO users (name) VALUES ('admin\'-- ')),后续查询时被拼接(如SELECT * FROM users WHERE name='$name'),触发注入。

防御
  • 统一过滤:入库前和出库后均转义(如htmlspecialchars() + 预处理语句)。
  • 数据分类:区分“可信数据”(如系统生成)和“不可信数据”(如用户输入),即使来自数据库也重新过滤。

示例php

// 从数据库读取数据后重新转义 $name = htmlspecialchars($db->getUserName($id), ENT_QUOTES); $sql = "SELECT * FROM posts WHERE author = '$name'"; 

总结

  • 框架审计:优先检查历史漏洞和路由配置,对比原生PHP更依赖框架机制理解。
  • SSRF利用:协议和内网探测是关键,修复需多层级校验(协议、域名、路径)。
  • 安全编码:始终遵循最小权限原则,结合白名单、预处理、严格类型比较。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com