十年网安,精通 OWASP Top 10 及各类攻击手段(恶意软件、钓鱼、SQL 注入、XSS、DDoS、中间人攻击、APT 等),擅长漏洞扫描、渗透测试与安全审计。
网站入侵/渗透服务器/搭建网站/黑客接单/破解APP/修改成绩等
认准TG:@Beckyminimoo
网站入侵/渗透服务器/搭建网站/黑客接单/破解APP/修改成绩等
认准TG:@Beckyminimoo
📝 这到底是什么? JWT 简单解析
JSON Web Token — 是用户和服务器之间交换的紧凑型数字凭证。
如果看一下示意图,可以清楚地看到:任何 JWT 都严格由三个部分组成,这些部分被编码并用点分隔成一行(X.Y.Z)。想象一下这是一个密封的包裹。
里面有三样东西:
1. 头部 — 是包裹上的外部标签。它以普通的 JSON 格式(括号内的数据集)呈现,告知这是一个什么类型的令牌,以及用于保护它的加密算法。
2. 有效负载 — 是包裹的实际内容。这些是我们想要传输的实际数据:你的姓名、用户 ID、年龄或访问权限。同样以便捷的 JSON 格式编写。
3. 签名 — 是安全印记。它使用只有服务器知道的密码自动生成。这份签名确保没有人可以在传输过程中打开令牌并更改你的数据。如果黑客更改了有效负载中的哪怕一个字符,签名都会失效。
在实践中是如何运作的?
- 你在网站上输入登录名和密码。
- 服务器验证它们,从你的数据中收集 JWT,使用私钥进行签名,然后将其发送回你的浏览器。
- 浏览器在本地保存这个令牌。
- 现在,每当浏览器向网站发送请求时,它都会在标头中附加这个令牌。
- 服务器读取标头和有效负载,验证签名,识别你的身份,并立即授予访问权限。它不再需要在数据库中存储你的会话数据了!
JSON Web Token — 是用户和服务器之间交换的紧凑型数字凭证。
如果看一下示意图,可以清楚地看到:任何 JWT 都严格由三个部分组成,这些部分被编码并用点分隔成一行(X.Y.Z)。想象一下这是一个密封的包裹。
里面有三样东西:
1. 头部 — 是包裹上的外部标签。它以普通的 JSON 格式(括号内的数据集)呈现,告知这是一个什么类型的令牌,以及用于保护它的加密算法。
2. 有效负载 — 是包裹的实际内容。这些是我们想要传输的实际数据:你的姓名、用户 ID、年龄或访问权限。同样以便捷的 JSON 格式编写。
3. 签名 — 是安全印记。它使用只有服务器知道的密码自动生成。这份签名确保没有人可以在传输过程中打开令牌并更改你的数据。如果黑客更改了有效负载中的哪怕一个字符,签名都会失效。
在实践中是如何运作的?
- 你在网站上输入登录名和密码。
- 服务器验证它们,从你的数据中收集 JWT,使用私钥进行签名,然后将其发送回你的浏览器。
- 浏览器在本地保存这个令牌。
- 现在,每当浏览器向网站发送请求时,它都会在标头中附加这个令牌。
- 服务器读取标头和有效负载,验证签名,识别你的身份,并立即授予访问权限。它不再需要在数据库中存储你的会话数据了!
关于现代EDR架构、检测机制、规避技术及逆向工程方法的技术参考。内容涵盖内核回调API、文件系统迷你过滤器、ETW提供程序、四种检测引擎模型、系统调用门(FreshyCalls、RecycledGate、SysWhispers4、Acheron、Sysplant)、睡眠混淆(Ekko、FOLIAGE、DreamWalkers)、调用栈伪造(SilentMoonwalk、VulcanRaven)、ETW-TI硬件断点绕过、通过VEH实现无补丁AMSI绕过、针对漏洞驱动程序黑名单的BYOVD,以及八阶段EDR研究方法。
⏺️限制SSH允许的功能:即使有密钥,用户也不应能访问所有内容。禁用转发、X11和代理转发:
cat >> /etc/ssh/sshd_config << 'EOF'
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 30
EOF⏺️强制空闲超时:如果会话长时间无活动就会自动关闭:
cat >> /etc/ssh/sshd_config << 'EOF'
ClientAliveInterval 300
ClientAliveCountMax 2
EOF10分钟无活动后会断开连接。遗忘的开放会话不再持续数天。
⏺️限制登录用户 - 不是通过权限,而是直接在SSH配置文件中:
echo "AllowUsers [email protected]/24 [email protected]" >> /etc/ssh/sshd_config即使攻击者获得了其他用户的有效密钥,SSH也不会允许其登录。
⏺️通过chroot限制用户权限,仅允许SFTP访问,无shell权限:
cat >> /etc/ssh/sshd_config << 'EOF'
Match User sftp-user
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
EOF
mkdir -p /data/sftp/sftp-user
chown root:root /data/sftp/sftp-user
chmod 755 /data/sftp/sftp-user用户只能看到自己的目录,无法超出其范围。
⏺️在重启前检查配置是否正确 - 这是必须的,否则可能会失去访问权限:
sshd -t && systemctl reload sshdBIP39(Bitcoin Improvement Proposal 39)定义了助记词生成的标准,它的核心目的是通过易于记忆的助记词来表示私钥或种子。BIP39 是一种基于词汇的助记词生成方案,常用于多种加密货币钱包。
BIP39 标准的关键点:
1. 熵 (Entropy)
• BIP39 依赖于一个随机生成的熵(通常为 128 位、160 位、192 位、256 位等),熵的长度决定助记词的数量:
• 128 位熵 → 12 个助记词
• 160 位熵 → 15 个助记词
• 192 位熵 → 18 个助记词
• 256 位熵 → 24 个助记词
• 熵是一个随机生成的二进制值,用来表示信息。
2. 校验码 (Checksum)
• 在生成助记词时,BIP39 通过对熵执行SHA-256哈希,然后从哈希值中提取一定数量的位作为校验码。
• 这意味着每个助记词的选择都必须符合一定的校验规则,从而避免生成无效的助记词。
3. 词汇表 (Word List)
• BIP39 使用2048 个单词作为词汇表(通常为英文),每个单词代表 11 位二进制数据。
• 所以每个助记词能够代表 11 个二进制位。通过组合多个单词,你可以存储更多的信息。
• 如果熵的长度是 128 位,那么对应的助记词会由 12 个单词构成,每个单词代表 11 位数据,总共就是 128 位。
• BIP39 还支持其他语言(如法语、德语、日语、韩语等),每种语言都有自己的 2048 个单词的词汇表。
4. 助记词生成过程:
1. 生成熵(128 位、160 位等)。
2. 计算校验码:对熵进行 SHA-256 哈希,取哈希值的前 N 位作为校验码(N = 熵长度/32)。
3. 组合熵和校验码:将熵和校验码合并在一起。
4. 将二进制数据分割成 11 位:将合并后的二进制数据按 11 位一组切分。
5. 根据 11 位索引查找词汇表:通过将每 11 位数据映射到 2048 个单词的词汇表中,生成助记词。
5. 助记词的生成和恢复:
• 生成助记词:通过上述步骤生成的助记词可以唯一地表示私钥或种子。
• 恢复助记词:通过助记词,可以将其转换为原始的熵,再通过 BIP32 或 BIP44 等标准恢复私钥和钱包地址。
BIP39 的流程图
1. 生成熵 (128-bit, 160-bit, 192-bit, 256-bit)
2. 计算校验码:SHA-256 哈希 → 校验位
3. 将熵和校验码组合成一个二进制字符串
4. 将二进制字符串拆分成 11 位的块
5. 查找词汇表,映射到助记词
BIP39 助记词的示例
假设有 128 位熵,经过计算,生成了 12 个助记词:
pistol enact swarm jacket face hold ketchup slender rebel pork eyebrow
总结
BIP39 标准遵循以下步骤生成助记词:
1. 生成熵;
2. 计算并附加校验码;
3. 根据熵和校验码映射到一个单词列表中,每个单词代表 11 位二进制数据;
4. 最终生成合法的助记词。
通过这种方式,BIP39 将复杂的加密信息转化为一组易于记忆的单词组合,从而简化了私钥和钱包的备份和恢复过程。
BIP39 标准的关键点:
1. 熵 (Entropy)
• BIP39 依赖于一个随机生成的熵(通常为 128 位、160 位、192 位、256 位等),熵的长度决定助记词的数量:
• 128 位熵 → 12 个助记词
• 160 位熵 → 15 个助记词
• 192 位熵 → 18 个助记词
• 256 位熵 → 24 个助记词
• 熵是一个随机生成的二进制值,用来表示信息。
2. 校验码 (Checksum)
• 在生成助记词时,BIP39 通过对熵执行SHA-256哈希,然后从哈希值中提取一定数量的位作为校验码。
• 这意味着每个助记词的选择都必须符合一定的校验规则,从而避免生成无效的助记词。
3. 词汇表 (Word List)
• BIP39 使用2048 个单词作为词汇表(通常为英文),每个单词代表 11 位二进制数据。
• 所以每个助记词能够代表 11 个二进制位。通过组合多个单词,你可以存储更多的信息。
• 如果熵的长度是 128 位,那么对应的助记词会由 12 个单词构成,每个单词代表 11 位数据,总共就是 128 位。
• BIP39 还支持其他语言(如法语、德语、日语、韩语等),每种语言都有自己的 2048 个单词的词汇表。
4. 助记词生成过程:
1. 生成熵(128 位、160 位等)。
2. 计算校验码:对熵进行 SHA-256 哈希,取哈希值的前 N 位作为校验码(N = 熵长度/32)。
3. 组合熵和校验码:将熵和校验码合并在一起。
4. 将二进制数据分割成 11 位:将合并后的二进制数据按 11 位一组切分。
5. 根据 11 位索引查找词汇表:通过将每 11 位数据映射到 2048 个单词的词汇表中,生成助记词。
5. 助记词的生成和恢复:
• 生成助记词:通过上述步骤生成的助记词可以唯一地表示私钥或种子。
• 恢复助记词:通过助记词,可以将其转换为原始的熵,再通过 BIP32 或 BIP44 等标准恢复私钥和钱包地址。
BIP39 的流程图
1. 生成熵 (128-bit, 160-bit, 192-bit, 256-bit)
2. 计算校验码:SHA-256 哈希 → 校验位
3. 将熵和校验码组合成一个二进制字符串
4. 将二进制字符串拆分成 11 位的块
5. 查找词汇表,映射到助记词
BIP39 助记词的示例
假设有 128 位熵,经过计算,生成了 12 个助记词:
pistol enact swarm jacket face hold ketchup slender rebel pork eyebrow
总结
BIP39 标准遵循以下步骤生成助记词:
1. 生成熵;
2. 计算并附加校验码;
3. 根据熵和校验码映射到一个单词列表中,每个单词代表 11 位二进制数据;
4. 最终生成合法的助记词。
通过这种方式,BIP39 将复杂的加密信息转化为一组易于记忆的单词组合,从而简化了私钥和钱包的备份和恢复过程。