文章851
标签121
分类10

PHP 变量注册与安全隐患:WebShell 攻击示例

2024-10-18T10:03:48.png

在 PHP 的实际开发中,常见的代码片段如下:

<?php
foreach ($_REQUEST as $key => $value) {
    $$key = $value;
}

这段代码从 HTTP 请求中注册变量。开发者通过这种方式可以快速地获取请求参数,便于后续处理。然而,如果处理不当,这种便利性可能导致严重的安全问题。

变量注册的风险

上述代码使用 foreach 遍历 $_REQUEST 数组,根据 HTTP 参数名动态创建变量。虽然这在开发中使用方便,但当某些关键变量被攻击者控制时,后果可能相当严重。

示例代码

考虑以下代码:

<?php
$security_check = true;
foreach ($_REQUEST as $key => $value) {
    $$key = $value;
}

if ($security_check) {
    $id = parse_sql($_POST['id']);
} else {
    $id = $_POST['id'];
}

$result = $sqlOperator->query($id);
var_dump($result);

在这段代码中,$security_check 变量的值直接影响后续 SQL 查询的安全性。攻击者如果能够通过 GET 或 POST 请求控制 $security_check,则可能会关闭 SQL 注入检查。

攻击示例

假设攻击者通过 HTTP 请求传入以下参数:

?security_check=false&id=1; DROP TABLE users; --

由于 $security_check 被设置为 false,代码会直接执行未经过滤的 SQL 查询,导致 SQL 注入。攻击者可以执行任意 SQL 语句,包括删除数据表。

WebShell 攻击

在这种情况下,攻击者可能利用一个 WebShell 来控制关键参数。WebShell 是一种恶意脚本,攻击者可以通过它在服务器上执行任意代码。

攻击者可以通过发送请求来覆盖 $security_check 变量:

GET /path/to/script.php?security_check=false&id=1; DROP TABLE users; --

此时,如果 parse_sql 函数未能有效过滤输入,攻击者将能够执行恶意 SQL 语句,从而导致数据泄露或破坏。

预防措施

为了避免上述问题,开发者应采取以下措施:

  1. 避免动态变量注册:尽量避免使用 $$key 的方式动态创建变量。可以使用数组来代替。

    $params = [];
    foreach ($_REQUEST as $key => $value) {
        $params[$key] = $value;
    }
  2. 严格的输入验证:无论是从 $_POST 还是 $_GET 接收的输入,都应进行严格的验证和过滤。
  3. 使用预处理语句:在进行数据库操作时,使用预处理语句(Prepared Statements)来防止 SQL 注入。

    $stmt = $sqlOperator->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$id]);
  4. 设置合适的安全策略:确保关键变量的控制逻辑不易被外部请求修改,使用更安全的逻辑来管理安全检查。

在 PHP 命令行中实现进度条

2024-10-18T02:16:10.png
在命令行应用程序中,显示任务的进度条是一种常见的用户体验改进手段。本文将介绍如何在 PHP 中实现一个简单的进度条,并特别讲解 \r 在覆盖打印中的作用。

什么是 \r

\r 是一个控制字符,表示回车(Carriage Return)。在命令行中使用 \r 可以将光标移动到当前行的开头,而不换行。这使得我们能够在同一行上更新之前输出的内容,而不是每次都换行,从而实现覆盖打印的效果。

示例代码

以下是一个用 PHP 实现的进度条的完整示例:

<?php

function displayProgressBar($progress, $total)
{
    $barWidth = 50; // 进度条的宽度
    $progressPercentage = ($progress / $total);
    $barCount = (int) ($barWidth * $progressPercentage);
    $bar = str_repeat('=', $barCount) . str_repeat(' ', $barWidth - $barCount);
    
    // 使用 \r 进行覆盖打印,避免换行
    printf("\r[%s] %.2f%%", $bar, $progressPercentage * 100);
}

$total = 100; // 假设总任务数为 100

for ($i = 0; $i <= $total; $i++) {
    // 模拟任务执行时间
    usleep(50000); // 暂停 50 毫秒

    // 输出进度条
    displayProgressBar($i, $total);
}

echo "\n任务完成!\n";
?>

代码解析

  1. displayProgressBar 函数

    • 该函数接受当前进度和总进度作为参数。
    • barWidth 是进度条的总宽度,barCount 计算当前进度的比例。
    • 使用 str_repeat 方法构建进度条的视觉效果。
    • printf("\r[%s] %.2f%%", $bar, $progressPercentage * 100) 使用 \r 将光标移动到行首,从而实现覆盖打印。
  2. 主循环

    • for 循环模拟任务的进度。
    • usleep(50000) 用于暂停 50 毫秒,以模拟任务执行的时间。
  3. 输出

    • 进度条在命令行中实时更新,直到任务完成。最后输出一条“任务完成!”的消息。

输出示例

运行上述代码后,您将在命令行中看到类似下面的输出:

[==================================================] 100.00%
任务完成!

进度条会随着进度的增加而变化,直到填满。

结论

使用 \r 实现覆盖打印可以有效减少命令行界面的输出行数,使得进度条的显示更加清晰。同时,这种方式在执行长时间运行的任务时,能够为用户提供实时反馈。希望这篇博客能帮助你在 PHP 命令行应用中实现更好的用户体验!

kali 安装中文输入法

一、安装fcitx

命令:apt install fcitx
2024-10-18T01:04:55.png

二、安装google拼音输入法

命令:apt-get install fcitx-googlepinyin

2024-10-18T01:05:18.png

三、重启

命令:reboot

四、添加Google输入法

点击桌面右上角输入法图标,点击Configure

2024-10-18T01:05:45.png

点击+号添加
2024-10-18T01:06:00.png

在搜索框中搜索Google,发现没有,去掉Only Show Current Language,选中 Google Pinyin,然后点击OK。

2024-10-18T01:06:26.png
2024-10-18T01:06:34.png
添加完成

2024-10-18T01:06:45.png

五、验证

2024-10-18T01:06:57.png

注:

  kali系统中切换中英文输入法是“ctrl+空格”。

将Kali终端提示符更改为单行显示

在Kali Linux 中,默认ZSH终端使用双行来显示,这在执行一些简单命令时可能显得冗长;为了简化终端界面,可以将终端配置改为单行显示模式。以下是详细的步骤;

2024-10-17T10:03:16.png

修改步骤

使用文本编辑器编辑 /home/kali/.zshrc文件:

vim ~/.zshrc

将大概位于119行的PROMPT_ALTERNATIVE的值修改为oneline

将大概位于120行的NEWLINE_BEFORE_PROMPT的值修改为 no

2024-10-17T10:04:35.png

保存修改,并重启终端,最终效果如下:

2024-10-17T10:04:57.png

Kali Linux常用工具使用指南

本页面提供了对Kali Linux中常用工具的详细使用方法,帮助您了解如何高效利用这些工具进行网络安全测试。我们覆盖的内容包括:

  • Nmap:了解如何使用Nmap进行网络扫描,识别主机和服务。
  • Metasploit:学习如何使用Metasploit框架进行漏洞利用和安全测试。
  • Burp Suite:掌握Burp Suite的基本使用方法,进行Web应用安全测试。
  • Wireshark:探索如何使用Wireshark进行网络流量分析和故障排除。
  • John the Ripper:了解如何使用John the Ripper进行密码破解和密码安全测试。
  • Aircrack-ng:学习如何利用Aircrack-ng套件进行无线网络安全测试。
  • 其他工具:提供对Kali Linux中其他常用工具的简要介绍和使用技巧。

每个工具的介绍都包括详细的操作步骤、实际应用示例和最佳实践,确保您能有效掌握并应用这些工具。无论您是网络安全新手还是有经验的专业人士,这些指南都将帮助您提升网络安全技能。

">