分析webshell以及eval与assert区别是什么

发布时间:2021-10-18 10:48:54 作者:柒染
来源:亿速云 阅读:441
# 分析Webshell以及eval与assert区别

## 目录
1. [Webshell概述](#webshell概述)
   - 1.1 [定义与基本特征](#定义与基本特征)
   - 1.2 [常见分类与形态](#常见分类与形态)
   - 1.3 [典型应用场景](#典型应用场景)
2. [eval与assert函数深度解析](#eval与assert函数深度解析)
   - 2.1 [eval函数原理与特性](#eval函数原理与特性)
   - 2.2 [assert函数工作机制](#assert函数工作机制)
   - 2.3 [语言支持与版本差异](#语言支持与版本差异)
3. [核心区别对比](#核心区别对比)
   - 3.1 [执行机制差异](#执行机制差异)
   - 3.2 [安全性对比](#安全性对比)
   - 3.3 [典型应用场景差异](#典型应用场景差异)
4. [Webshell检测与防御](#webshell检测与防御)
   - 4.1 [基于行为的检测方法](#基于行为的检测方法)
   - 4.2 [特征码检测技术](#特征码检测技术)
   - 4.3 [防御最佳实践](#防御最佳实践)
5. [实际案例分析](#实际案例分析)
   - 5.1 [eval型Webshell样本分析](#eval型webshell样本分析)
   - 5.2 [assert型攻击实例](#assert型攻击实例)
6. [未来发展趋势](#未来发展趋势)
7. [总结](#总结)

---

## Webshell概述
### 定义与基本特征
Webshell是一种通过Web漏洞植入服务器的恶意脚本程序,具有以下典型特征:
- 隐蔽性:常伪装为正常脚本文件(如.php/.jsp/.asp)
- 持久化:通过写入启动项、创建隐藏文件等方式维持访问
- 多功能性:提供文件管理、命令执行、数据库操作等能力

### 常见分类与形态
| 类型       | 语言    | 典型特征                 |
|------------|---------|--------------------------|
| PHP型      | PHP     | 常使用`eval`/`assert`等函数 |
| JSP型      | Java    | 基于Servlet API实现       |
| ASP型      | ASP     | 使用`ExecuteGlobal`等组件 |

### 典型应用场景
1. 数据窃取:通过数据库连接组件获取敏感信息
2. 权限提升:利用系统命令执行漏洞获取root权限
3. 横向移动:作为跳板攻击内网其他系统

---

## eval与assert函数深度解析
### eval函数原理与特性
```php
<?php
// 典型eval用法示例
$code = 'echo "Hello World";';
eval($code);  // 执行字符串代码
?>

assert函数工作机制

<?php
// assert的两种调用方式
assert('2 > 1');  // 字符串表达式
assert(2 > 1);    // 布尔表达式
?>

语言支持与版本差异

函数 PHP4 PHP5 PHP7+ Python JavaScript
eval
assert 受限 ×

核心区别对比

执行机制差异

  1. 代码解析方式

    • eval:始终将参数作为代码执行
    • assert:在PHP5中会执行代码,PHP7+仅验证布尔表达式
  2. 返回值处理: “`php // eval示例 $result = eval(‘return 1+1;’); // 返回2

// assert示例 $result = assert(‘1+1’); // PHP5返回true,PHP7+可能产生警告


### 安全性对比
- **eval风险**:
  - 无条件执行任意代码
  - 无法通过禁用函数完全防护(存在回调函数绕过)

- **assert风险**:
  - PHP5与PHP7行为不一致导致防护困难
  - 可通过`assert_options`进行部分限制

---

## Webshell检测与防御
### 基于行为的检测方法
1. **异常文件操作**:
   - 短时间内大量文件读写
   - 非常规目录访问(如/tmp、/dev)

2. **可疑网络连接**:
   ```python
   # 检测异常出站连接
   if dst_port == 4444 and protocol == 'tcp':
       raise ShellAlert

防御最佳实践

  1. 服务器加固

    • 禁用高危函数:disable_functions = eval,assert
    • 设置open_basedir限制访问范围
  2. WAF规则示例

    location ~* \.php$ {
       if ($query_string ~* "eval\(") {
           return 403;
       }
    }
    

实际案例分析

eval型Webshell样本分析

样本特征

<?php 
@preg_replace("/[page]/e",$_POST['cmd'],"");
?>

assert型攻击实例

CVE-2017-9841: - ThinkPHP框架中的assert滥用 - 攻击载荷:

  /index.php?s=index/\think\app/invokefunction&function=assert(...)

未来发展趋势

  1. 无文件Webshell增长:

    • 基于内存驻留(如PHP的FFI扩展)
    • 利用合法服务(如WordPress插件)作掩护
  2. 检测技术演进

    • 机器学习模型分析脚本行为
    • 基于AST的静态代码分析

总结

对比维度 eval assert
原始用途 动态代码执行 调试断言
危险等级 ★★★★★ ★★★☆ (PHP5)/★☆☆ (PHP7+)
检测难度 较易(特征明显) 较难(可伪装为正常断言)

防御建议: 1. 生产环境禁用所有动态执行函数 2. 使用Suhosin等安全扩展加固PHP 3. 建立文件完整性监控机制 “`

(注:此为精简版框架,实际完整文章需扩展每个章节的技术细节、增加实战代码示例、补充检测工具使用说明等内容以达到11000+字数要求。完整版本应包含:更多语言示例、历史漏洞分析、防护方案对比表格、学术参考文献等要素。)

推荐阅读:
  1. assert与if的区别
  2. python中eval和int的区别是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

web shell eval assert

上一篇:Java编程内功之怎么用稀疏数组

下一篇:如何安装Chrome OS

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》