news 2026/2/16 12:17:33

基础编码与加密:URL 编码 + Base64 + MD5(渗透测试常用)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础编码与加密:URL 编码 + Base64 + MD5(渗透测试常用)

目录

合规免责声明

渗透测试中编码加密应用流程图

思维导图​编辑

一、URL 编码:渗透测试中最常用的字符 “伪装术”

1. 核心原理

2. 渗透测试核心场景

(1)WAF 字符过滤绕过

(2)SQL 注入参数传递

(3)XSS 载荷隐藏

3. 工具操作指南

(1)BurpSuite 编码操作

(2)在线工具编码(应急场景)

(3)命令行编码(Kali Linux)

4. 避坑要点

二、Base64:渗透测试中的 “载荷隐身衣”

1. 核心原理

2. 渗透测试核心场景

(1)Webshell 载荷隐藏

(2)文件上传绕过

(3)API 参数绕过

(4)函数拼接绕过

3. 工具操作指南

(1)命令行编码解码(Linux/Mac)

(2)BurpSuite 编码操作

(3)在线工具(应急场景)

4. 避坑要点

三、MD5:渗透测试中的 “密码破解利器”

1. 核心原理

2. 渗透测试核心场景

(1)密码哈希破解

(2)碰撞攻击绕过校验

(3)数据篡改检测

3. 工具操作指南

(1)Hashcat 破解 MD5(Kali Linux)

(2)在线哈希破解(应急场景)

(3)命令行计算 MD5 哈希(验证场景)

4. 避坑要点


合规免责声明

本文所讲解的 URL 编码、Base64 编码、MD5 加密相关技术,仅用于授权的网络安全渗透测试、漏洞排查、安全加固等合法合规场景。禁止将相关技术用于未经授权的攻击、入侵、数据窃取等违法犯罪行为。所有操作需遵守《网络安全法》《数据安全法》等相关法律法规,因违规使用本文技术导致的一切法律责任,均由使用者自行承担。

渗透测试中编码加密应用流程图

思维导图

一、URL 编码:渗透测试中最常用的字符 “伪装术”

1. 核心原理

URL 编码(也叫百分号编码)的核心是将 URL 中非 ASCII 字符、特殊字符(如空格、&、=、%、单双引号等)转换为%+十六进制ASCII码的形式。其本质是一种 “字符转换协议”,而非加密技术 —— 编码后的内容可通过解码完全还原,核心价值在于解决 “特殊字符无法在 URL 中传输” 和 “避开安全设备检测” 两大问题。

常见特殊字符的 URL 编码映射(渗透测试高频使用):

原始字符

URL 编码(一次)

二次编码

应用场景

单引号 '

%27

%2527

SQL 注入绕过

双引号 "

%22

%2522

XSS 载荷隐藏

空格

%20 / +

%2520

命令执行参数分隔

<

%3C

%253CXSS 标签绕过(如<script>标签伪装)

>

%3E

%253E

XSS 标签绕过(如<script>标签伪装)

管道符

%7c%257c命令执行拼接(如whoami%7Cipconfig绕过管道符过滤)

URL 编码的核心逻辑:服务器接收请求后,会自动对 URL 参数进行解码(默认一次),若存在多层编码,需手动或通过工具实现多轮解码,这也是 “二次编码绕过” 的核心原理。

2. 渗透测试核心场景

(1)WAF 字符过滤绕过

这是 URL 编码最核心的应用场景。多数 WAF 会直接检测 URL 中的敏感关键字(如UNION、OR、'、` 但不会对所有请求进行多层解码。此时通过 “二次编码” 将敏感字符转换为 WAF 无法识别的形式,服务器解码后仍能正常执行恶意逻辑。

例如:SQL 注入中常用的1' OR 1=1 #,一次编码后为1%27 OR 1=1 #(WAF 可能识别 %27 对应的单引号),二次编码后为1%2527 OR 1=1 #(WAF 解码一次得到 %27,无敏感字符,服务器二次解码得到 ')。

(2)SQL 注入参数传递

部分网站的输入过滤规则仅拦截 “原始特殊字符”,不处理编码后的内容。例如,当网站禁止输入单引号时,将'编码为%27后,参数能正常传入数据库,执行拼接后的 SQL 语句。

(3)XSS 载荷隐藏

XSS 攻击中的 `alert ()`函数等,直接提交会被WAF或前端过滤。通过URL编码将标签和函数转换为百分号格式(如3C%73%63%72%69%70%74%3E`),可绕过基础检测,服务器解码后执行脚本。

3. 工具操作指南

(1)BurpSuite 编码操作
  • 打开 BurpSuite,拦截目标请求包;
  • 选中需要编码的参数值(如1' OR 1=1 #);
  • 右键选择「Encode as URL」完成一次编码;
  • 若需二次编码,选中已编码的字符(如%27),再次执行「Encode as URL」;
  • 直接发送编码后的请求,无需额外配置。
(2)在线工具编码(应急场景)

推荐工具:URL 编码 / 解码在线工具(如站长工具、菜鸟工具)

操作逻辑:

  • 输入原始载荷(如 `1)
  • 选择 “URL 编码”(一次 / 多次);
  • 复制编码结果,直接粘贴到请求参数中。
(3)命令行编码(Kali Linux)
# 一次URL编码(echo -n 避免换行符干扰) echo -n "1' OR 1=1 #" | xxd -plain | tr -d '\n' | sed 's/../%&/g' # 输出:31%27%204f52%20313d31%2023 # 二次编码(对一次编码结果再次编码) echo -n "31%27%204f52%20313d31%2023" | xxd -plain | tr -d '\n' | sed 's/../%&/g'

4. 避坑要点

  • ❌ 误区 1:编码次数越多越好 → 多数服务器仅支持 1-2 次解码,三次及以上编码会导致参数解析失败,需先通过 “测试参数” 验证服务器解码能力(如提交test%2520,若服务器返回test ,说明支持二次解码);
  • ❌ 误区 2:所有场景都适合二次编码 → 若 WAF 支持 “多层解码检测”,二次编码可能失效,需切换其他绕过方式(如字符替换:将OR替换为O%20R);
  • ✅ 关键:先判断目标防护设备类型(如阿里云 WAF、云盾),不同 WAF 的解码规则不同,可通过 “少量试探” 确定编码策略;
  • ✅ 防御视角:服务端必须实现 “解码后校验”,对解码后的参数进行字符白名单过滤,而非仅校验原始请求;同时限制参数长度,避免超长编码载荷攻击。

二、Base64:渗透测试中的 “载荷隐身衣”

1. 核心原理

Base64 是基于 64 个可打印字符(A-Z、a-z、0-9、+、/,补位符 =)的二进制到文本编码方式,核心逻辑是将 3 字节二进制数据拆分为 4 个 6 位的二进制片段,每个片段对应一个 Base64 字符(不足 3 字节时用 = 补位)。

其核心特点(渗透测试关键价值):

  • 编码结果仅包含可打印字符,无特殊符号,不会触发 URL 参数转义或过滤规则;
  • 可逆性:通过base64_decode函数可直接还原原始内容,无需密钥;
  • 隐蔽性:恶意载荷(如 Webshell、命令执行代码)编码后,表面上是普通字符串,易绕过关键字检测。

Base64 编码的核心公式:编码后长度 = ceil(原始长度 / 3) * 4,例如:

  • 原始内容 “whoami”(5 字节)→ 编码后 “d2hvYW1p”(8 字节);
  • 原始内容 “php eval ($_POST ['pass']);?>”(28 字节)→ 编码后 “PD9waHAgZXZhbCgkX1BPU1RbJ3Bhc3MnXSk7Pz4=”(36 字节)。

2. 渗透测试核心场景

(1)Webshell 载荷隐藏

Webshell(如 PHP 木马)的特征字符串(eval、assert、$_POST)是安全设备的重点检测对象。将 Webshell 编码为 Base64 后,特征字符串被隐藏,仅表现为随机字符,可绕过文件查杀和关键字拦截。

例如:原始木马<?php @eval($_POST['pass']);?>编码后为PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOz8+,上传或嵌入文件时,不会触发 “恶意代码” 检测。

(2)文件上传绕过

部分网站仅允许上传特定类型文件(如 txt、jpg),且对文件内容进行关键字检测。此时可将恶意代码(如 PHP 脚本)Base64 编码后保存为 txt 文件,上传后通过后端 “解码执行” 逻辑(如文件包含漏洞)还原并执行恶意代码。

(3)API 参数绕过

部分 API 接口会对参数中的命令执行关键字(如whoami、ipconfig)进行过滤。将命令编码为 Base64 后传递,接口接收后解码执行,可避开参数检测。

例如:命令cat /etc/passwd编码为Y2F0IC9ldGMvcGFzc3dk,作为 API 参数传递时,不会被识别为敏感命令。

(4)函数拼接绕过

若 WAF 拦截base64_decode等敏感函数,可通过字符串拼接、变量替换等方式构造等效函数,避开检测。

例如:base64_decode可拆分为base64_de.''.code(PHP 中字符串拼接会自动合并)、$func = 'base64_dec' . 'ode'; $func($data);等形式。

3. 工具操作指南

(1)命令行编码解码(Linux/Mac)
# Base64编码(-w 0 取消换行,避免编码结果拆分) echo -n "($_POST['pass']);?>" | base64 -w 0 # 输出:PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOz8+ # Base64解码 echo -n "PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOz8+" | base64 -d # 输出:POST['pass']);?> # Windows命令行(PowerShell) [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("whoami")) [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("d2hvYW1p"))
(2)BurpSuite 编码操作
  • 拦截请求包,选中需要编码的参数值;
  • 右键选择「Encode as Base64」,自动生成编码结果;
  • 若需结合 URL 编码(双重绕过),可先 Base64 编码,再 URL 编码;
  • 发送请求,服务器需具备 Base64 解码逻辑(如代码中包含base64_decode)。
(3)在线工具(应急场景)

推荐工具:Base64 在线编码解码工具

操作逻辑:输入原始内容(如木马、命令)→ 选择 “编码”→ 复制结果直接使用,无需额外处理。

4. 避坑要点

  • ❌ 误区 1:Base64 编码 = 加密 → Base64 是编码而非加密,任何人获取编码结果都能解码,仅用于 “隐藏特征”,不可用于敏感数据传输;
  • ❌ 误区 2:编码后一定能绕过检测 → 主流 WAF 已支持 “Base64 解码后检测”,若编码内容解码后包含敏感字符,仍会被拦截,需结合多层编码(如 Base64+URL 编码);
  • ❌ 误区 3:忽略补位符 = 的影响 → Base64 编码后的 = 补位符可能被部分接口过滤,可通过 “拆分编码内容” 规避(如将PD9waHAg...Pz4=拆分为$a='PD9waHAg...'; $b='Pz4='; base64_decode($a.$b););
  • ✅ 关键:编码前尽量压缩原始载荷(如移除多余空格、注释),减少编码后长度;同时了解后端是否存在 “解码后长度限制”,避免载荷被截断;
  • ✅ 防御视角:服务端对接收的 Base64 内容,必须解码后进行恶意代码检测;限制base64_decode、eval等函数的调用权限,禁止在文件包含、参数解析场景中直接解码执行。

三、MD5:渗透测试中的 “密码破解利器”

1. 核心原理

MD5(Message-Digest Algorithm 5)是一种哈希算法,核心是将任意长度的输入数据转换为128 位(32 个十六进制字符)的固定长度哈希值,其核心特性:

  • 不可逆性:理论上无法从哈希值反推原始输入(无解密算法);
  • 确定性:相同输入必产生相同哈希值,不同输入大概率产生不同哈希值(存在碰撞漏洞);
  • 高效性:计算速度极快,适合批量处理大量数据。

渗透测试中,MD5 的核心应用场景均围绕 “哈希值与原始数据的映射关系” 展开,而非加密传输 —— 因为哈希值本身不包含原始数据,仅用于 “验证匹配” 或 “破解还原”。

常见 MD5 哈希示例:

原始内容

MD5 哈希(32 位小写)

应用场景

admin

21232f297a57a5a743894a0e4a801fc3

弱密码破解

123456

e10adc3949ba59abbe56e057f20f883e

数据库密码破解

test123

cc03e747a6afbbcbf8be7668acfebee5

登录密码校验

2. 渗透测试核心场景

(1)密码哈希破解

这是 MD5 最高频的应用场景。多数网站 / 系统会将用户密码通过 MD5 哈希后存储在数据库中(而非明文),渗透测试中获取数据库后,可通过 “哈希匹配” 还原明文密码。

破解逻辑:通过字典、暴力破解等方式,将字典中的字符串计算 MD5 哈希,与目标哈希值对比,若一致则字典中的字符串即为明文密码。

(2)碰撞攻击绕过校验

MD5 存在碰撞漏洞 —— 不同的输入数据可能产生相同的 MD5 哈希值。渗透测试中,可利用该漏洞构造 “恶意文件” 与 “合法文件” 具有相同的 MD5 哈希,绕过系统的 MD5 校验机制(如文件上传、数据完整性校验)。

(3)数据篡改检测

渗透测试过程中,若需验证目标文件(如配置文件、脚本)是否被防御系统篡改,可计算文件的 MD5 哈希,与原始哈希值对比,若不一致则说明文件被修改。

3. 工具操作指南

(1)Hashcat 破解 MD5(Kali Linux)

Hashcat 是渗透测试中最常用的哈希破解工具,支持字典攻击、暴力攻击、掩码攻击等多种模式,MD5 对应攻击模式为 0。

# 基础字典攻击(使用Kali自带rockyou字典) # 格式:hashcat -m 模式 哈希文件 字典文件 --force(--force强制运行) hashcat -m 0 md5_hash.txt /usr/share/wordlists/rockyou.txt --force # 掩码攻击(针对已知密码格式,如6位数字密码) hashcat -m 0 md5_hash.txt -a 3 ?d?d?d?d?d?d --force # ?d表示数字,?l小写字母,?u大写字母,?s特殊字符 # 加盐MD5破解(若密码哈希为MD5(明文+盐),如admin+abc=MD5(adminabc)) hashcat -m 0 md5_hash.txt -a 1 /usr/share/wordlists/rockyou.txt -1 abc --force # -1 指定盐值为abc,-a 1 表示组合攻击
(2)在线哈希破解(应急场景)

推荐工具:CMD5、Hashkiller

操作逻辑:

  • 输入目标 MD5 哈希值(32 位 / 16 位);
  • 工具自动查询内置彩虹表(预计算的哈希 - 明文映射库);
  • 若查询到匹配结果,直接返回明文密码;若未查询到,可选择 “深度破解”(需等待)。
(3)命令行计算 MD5 哈希(验证场景)
# Linux/Mac:计算字符串MD5 echo -n "admin" | md5sum # 输出:21232f297a57a5a743894a0e4a801fc3 - # 计算文件MD5 md5sum test.txt # 输出:d41d8cd98f00b204e9800998ecf8427e test.txt # Windows(PowerShell) Get-FileHash -Path test.txt -Algorithm MD5

4. 避坑要点

  • ❌ 误区 1:MD5 哈希一定能破解 → 仅弱密码(如 123456、admin、生日等)可通过字典快速破解,复杂密码(16 位以上 + 字母 + 数字 + 特殊字符)破解难度极大,几乎不可能还原;
  • ❌ 误区 2:忽略哈希加盐防护 → 若目标哈希是 “加盐哈希”(如 MD5 (明文 + 随机盐)),普通字典攻击无效,需获取盐值后进行针对性破解;
  • ❌ 误区 3:碰撞攻击万能 → MD5 碰撞仅能生成特定格式的碰撞文件(如 PDF、EXE),对自定义数据校验(如文本内容校验)可能失效,且碰撞文件生成工具(如 fastcoll)的使用有一定门槛;
  • ✅ 关键:破解前先判断哈希是否加盐(可通过哈希长度、格式初步判断,如加盐后哈希可能为 “哈希 + 盐” 拼接形式),优先使用大型字典(如 rockyou.txt)+ 掩码攻击组合;
  • ✅ 防御视角:禁止使用 MD5 存储密码,改用 bcrypt、Argon2 等 “慢哈希算法”(计算速度慢,破解成本高);密码存储必须加盐(盐值随机且唯一),避免彩虹表破解;文件校验需结合 MD5 + 文件大小 + 内容特征,而非仅依赖 MD5。

本文为渗透测试基础系列文章之一,后续付费专栏将深入讲解编码加密的高阶绕过技巧(如多层编码嵌套、MD5 加盐碰撞、定制化 tamper 脚本开发)、实战靶场全流程解析,关注作者获取更多深度内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 9:49:38

【记录】kali制作绕过火绒检测的木马(仅通过MSF的方式)

目的&#xff1a;制作一个能够绕过火绒检测的简单木马&#xff0c;熟悉一下怎么使用msfvenom制作木马&#xff0c;因此此处使用的火绒版本较低。 工具准备&#xff1a;火绒安全-3.0.42.0 【点击免费下载工具】 **实验环境&#xff1a;**kali-2019.4 &#xff08;攻击方&…

作者头像 李华
网站建设 2026/2/14 22:30:19

即时im直播

即时通讯&#xff08;Instant Messaging&#xff0c;简称IM&#xff09;作为数字化时代最核心的实时通信方式&#xff0c;已深度融入个人社交与企业协作场景&#xff0c;其技术演进与应用创新持续重塑人类信息交互模式。从早期基于TCP/IP协议的简单文本传输&#xff0c;到如今融…

作者头像 李华
网站建设 2026/2/14 22:30:16

01_C语言数据结构与算法入门:为什么这是程序员的核心竞争力?

C语言数据结构与算法入门&#xff1a;为什么这是程序员的核心竞争力&#xff1f; 你有没有过这样的经历&#xff1f;同样是实现一个功能&#xff0c;别人写的代码运行如飞&#xff0c;你的却卡顿半天&#xff1b;面对海量数据处理&#xff0c;别人的程序轻松应对&#xff0c;你…

作者头像 李华
网站建设 2026/2/16 2:55:29

C++ 智能指针详解

智能指针的原理智能指针是C中的一种工具&#xff0c;它基于RAII&#xff08;资源获取即初始化&#xff09;机制&#xff0c;将动态内存的管理封装为一个对象。其核心原理包括&#xff1a;‌自动释放‌&#xff1a;智能指针的析构函数会自动调用delete或自定义删除器&#xff0c…

作者头像 李华
网站建设 2026/2/14 22:30:09

Day16 ROC曲线和PR曲线

浙大疏锦行 一、前置代码 # 先运行之前预处理好的代码 import pandas as pd import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据。 import numpy as np #用于数值计算&#xff0c;提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘…

作者头像 李华