小迪安全第8天:基础入门-算法分析 & 传输加密 & 数据格式 & 密文存储 & 代码混淆 & 逆向保护

一、课程定位与核心思想

1.1 为什么要学习加密与编码?

  • 核心目的:安全测试(漏洞挖掘)时,必须按目标系统的数据格式和加密方式提交Payload,否则测试无效

  • 关键原则以数据的正确格式发送,对方才能正确接收并进入业务逻辑

1.2 影响范围

表格

场景 影响环节 具体说明
传输数据加密/编码 漏洞探针 不按格式提交Payload,服务端无法识别
传输数据格式 漏洞探针 格式错误导致请求被拒绝
回显数据格式/加密 数据分析 无法判断响应结果(成功/失败)
密码存储加密 后渗透测试 拿到密文但无法解密,无法登录利用
源代码加密/混淆 代码审计 无法阅读源码,无法分析漏洞
逆向保护(加壳/加固) 逆向分析 无法反编译,无法分析程序逻辑

二、传输数据加密与编码

2.1 典型案例:URL参数Base64编码

场景id=MQ== 而非 id=1

  • 识别MQ== 是Base64特征(大小写+数字+=填充)

  • 解码MQ==1

  • 测试要点

    1. 直接修改 id=2失败(服务端期望编码格式)

    2. 正确做法:2 → Base64编码 → Mg== → 提交 id=Mg==

核心逻辑 :服务端接收→解码→代入业务逻辑。测试时必须对Payload进行同等编码/加密后再提交。

2.2 典型案例:登录密码MD5加密

场景 :明文123456 → 传输e10adc3949ba59abbe56e057f20f883e

  • 爆破要点 :密码字典需先进行同等MD5加密后再替换

  • 错误做法 :直接替换为123456

  • 正确做法:字典 → MD5加密 → 替换password字段

2.3 APP/小程序数据传输加密

特征

  • 请求参数为乱码字符串(非明文键值对)

  • 返回数据同样加密

测试难点

  • 无法直接修改参数测试漏洞

  • 无法判断返回结果含义(1=成功?2=失败?)


三、传输数据格式

3.1 常见数据格式对比

表格

格式 特征 示例
常规表单 key=value&key2=value2 username=admin&password=123
JSON 大括号+键值对,字符串用引号 {"username":"admin","password":"123"}
XML 标签嵌套结构 <user><name>admin</name></user>
数组/列表 中括号包裹 ["admin","123"]

3.2 格式对测试的影响

关键原则Payload必须嵌入正确的格式位置

plain

复制

复制代码
JSON格式示例:
{"username":"admin","password":"123"}

- 测试用户名注入点 → 在"admin"处构造Payload
- 测试密码注入点 → 在"123"处构造Payload
- 不能破坏JSON结构(如缺少引号、括号)

3.3 工具辅助识别(Burp Suite)

  • Params:标识请求是否含参数(✓表示有参数)

  • Type字段:显示数据类型

    • text/plain:纯文本

    • application/json:JSON格式

    • application/xml:XML格式

    • text/html:HTML格式


四、密码存储加密(数据库层面)

4.1 常见Web程序密码加密方式

表格

类型 算法特征 示例 解密方式
单纯MD5 32位/16位,十六进制字符 e10adc3949ba59abbe56e057f20f883e 在线MD5解密(碰撞)
MD5+盐(Salt) MD5值后拼接随机字符串 md5(password)+salt 需知道盐值位置
多重MD5 MD5(MD5(password)) 双层或多层MD5 逐层解密
复杂加密(AES/DES等) 含密钥、偏移量、模式 需密钥+IV+模式 需获取源码中的密钥

4.2 实战案例对比

案例1:JCMS(单纯MD5)

plain

复制

复制代码
明文:123456
密文:e10adc3949ba59abbe56e057f20f883e(32位MD5)
特征:标准MD5,可直接解密
案例2:Discuz 3.2(MD5+盐)

plain

复制

复制代码
加密逻辑:MD5(MD5(password).salt)
数据库字段:password + salt(分开存储)
解密条件:必须同时获取密文和盐值
案例3:Discuz 3.5(复杂加密)

plain

复制

复制代码
特征:无盐字段,密文格式变化
加密方式:类似AES,需密钥+偏移量+模式
解密条件:必须从源码中获取密钥(K)和偏移量(IV)
难度:无法直接解密,需分析源码

4.3 系统级密码加密

表格

系统 加密方式 存储位置 工具
Windows NTLM哈希 SAM数据库 Mimikatz(提取哈希)
Linux SHA-512/SHA-256等 /etc/shadow 查看shadow文件
MySQL MySQL5哈希(SHA1双重) mysql.user 专用解密工具

Windows NTLM示例

plain

复制

复制代码
工具:Mimikatz
提取:NTLM哈希值 → 复制到在线平台解密
类型:选择"NTLM"
限制:密码复杂度高时无法碰撞解密

五、源代码加密与混淆

5.1 PHP源码加密

场景:防止源码泄露,保护商业逻辑

加密效果

  • 原始代码:<?php echo "hello"; ?>

  • 加密后:乱码/特殊编码,无法直接阅读

  • 运行正常:加密代码仍可被PHP解析执行

对安全测试的影响

  • 无法直接审计代码逻辑

  • 需先解密或寻找未加密版本

5.2 JavaScript代码混淆

场景:前端JS代码保护

示例

JavaScript

复制

复制代码
// 原始代码
alert(1);

// 混淆后( eval加密 )
eval(function(p,a,c,k,e,d){...})(...);

处理方式

  1. 识别混淆类型(eval加密、obfuscator等)

  2. 使用对应解密平台/工具还原

  3. 还原后分析业务逻辑和接口

5.3 逆向保护与加壳

适用对象:EXE、APK、JAR、DLL等

保护方式

  • 加壳(UPX, ASPack等)

  • 代码虚拟化(VMP)

  • 反调试/反Hook

对安全测试的影响

  • 无法直接反编译APK获取源码

  • 无法分析客户端逻辑和加密算法

  • 需先脱壳/去保护


六、密文识别与解密思路

6.1 识别加密类型的方法

表格

识别维度 观察要点 示例
密文长度 MD5=32/16位,NTLM=32位 e10adc3949ba59abbe56e057f20f883e(32位→MD5)
字符特征 是否含大小写、数字、特殊符号 Base64含+/=;NTLM纯十六进制
来源位置 Web数据库→MD5类;Windows系统→NTLM 结合场景判断
数据结构 是否含盐字段、密钥字段 数据库中password+salt字段→带盐加密

6.2 解密的核心逻辑

碰撞解密(非真正逆向)

plain

复制

复制代码
原理:明文 → 加密算法 → 密文(正向计算)
      密文 ← 对比 ← 预计算明文库(反向碰撞)

限制:
- 密码复杂度决定碰撞成功率
- 123456 易碰撞
- Abc@123#xyz 难碰撞(组合空间太大)

密钥类加密(AES/DES等)

plain

复制

复制代码
解密条件(缺一不可):
1. 密文
2. 密钥(Key)
3. 偏移量(IV)
4. 加密模式(CBC/ECB等)
5. 填充方式(PKCS7等)

获取途径:分析源码/逆向程序/配置文件

6.3 解密流程图

plain

复制

复制代码
获取密文 → 识别类型 → 判断来源 → 尝试常规解密 → 成功?
   ↓           ↓          ↓            ↓
分析源码   长度/特征   Web/系统/DB   在线平台/工具   否→寻找密钥/盐值
   ↓                                              ↓
定位加密代码 → 提取算法逻辑 → 提取密钥/盐 → 自定义解密脚本

七、核心考点总结(SRC/CTF/面试)

7.1 必知概念

表格

考点 关键内容
Base64 编码非加密,特征:大小写字母+数字+=填充,用于传输
MD5 32位/16位,不可逆(碰撞解密),常见加盐
Salt(盐) 随机字符串,增加破解难度,存储位置是关键
NTLM Windows系统哈希,Mimikatz提取
AES/DES 对称加密,需密钥+IV,分析源码获取
JSON/XML 数据格式,Payload需符合格式要求

7.2 实战测试原则

  1. 传输加密:Payload先加密/编码,再提交

  2. 格式匹配:Payload嵌入正确格式位置,不破坏结构

  3. 回显分析:识别返回数据格式,判断测试结果

  4. 密码破解:识别加密方式→获取盐/密钥→构造解密

7.3 CTF常见题型

  • Base64隐写:多层Base64嵌套解码

  • MD5碰撞:给定密文找明文(弱口令)

  • Salt爆破 :已知盐,构造md5($pass.$salt)爆破

  • 前端JS解密:识别混淆方式,还原后找Flag

  • 伪加密ZIP:识别加密标志位,修改后解压

7.4 面试高频问题

Q:拿到一个MD5密文,如何尝试解密?

A:1) 判断长度(32/16位确认MD5);2) 在线平台碰撞解密;3) 失败则判断是否加盐(查数据库是否有salt字段);4) 有盐则获取盐值,构造加密逻辑重新爆破;5) 复杂加密需分析源码获取密钥。
Q:APP抓包发现数据加密,如何测试?

A:1) 定位加密位置(客户端JS/Java或服务端);2) 逆向/审计获取加密算法和密钥;3) 编写脚本对Payload自动加解密;4) 使用Burp插件(如BurpCrypto)自动处理。
Q:为什么有些密文无法解密?

A:1) 密码复杂度过高,碰撞空间不足;2) 使用密钥类加密(AES)但无密钥;3) 自定义加密算法;4) 多层嵌套加密(需逐层分析)。


学习建议 :本节重点是建立"数据格式与加密意识",实际工作中需结合具体目标,通过抓包分析、源码审计、逆向工程等手段,逐步还原加密逻辑。并非所有加密都能破解,掌握信息越多(源码、配置文件、数据库),成功率越高。

相关推荐
z200509308 小时前
【Linux学习】Linux中的进程程序替换
linux·服务器·学习
ytdbc8 小时前
OSPF综合实验
网络
kaisun649 小时前
Docker 构建网络问题排查
网络·docker·eureka
lihao lihao10 小时前
软硬链接
linux·运维·服务器
TOWE technology10 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
雪度娃娃10 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
YUANQIANG202410 小时前
通信领域进行蒙特卡洛仿真的思路和步骤
网络
eam05112310 小时前
OSPF综合实验
网络
QQ154018285610 小时前
USB转千兆以太网芯片方案
网络·pt153s·千兆以太网芯片·usb转以太网·千兆网口芯片
大明者省10 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记