雾島风起時 的文章

核心价值观

0 条评论 crypto Crypto 雾島风起時

核心价值观

话不多说,直接上题(BUUCTF)

查看图片属性发现编码

核心价值观编码特点:

就那 16 个词语

UUencode

0 条评论 crypto Crypto 雾島风起時

UUencode

话不多说,直接上题(BUUCTF)

UUencode 将每三个字节的二进制数据分割为四个可打印字符

具体来说:

每 3 字节(24 位)被拆分为 4 个 6 位的组
每个 6 位的组对应一个 ASCII 字符(共 64 个字符,从 ! 到 ~)

因此,UUencode 编码的每个字符是由原始数据的 6 位表示,使用了一个特定的字符集,字符集中的每个字符是从 ASCII 字符集中选择的

编码后的文本总是按 4 字符一组呈现

Unencode 编码特点:

对于长消息来说,每行开头都是M
对于短消息特征就是字符串有 '($<>) 这类字符

.

中文电码

0 条评论 crypto Crypto 雾島风起時

中文电码

话不多说,直接上题(BUUCTF)

中文电码表采用了四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号

中文电码特点:

每四位数字组成一个字符,可以理解为长度是 4 的倍数,并且全都是数字

Quoted-printable

0 条评论 crypto Crypto 雾島风起時

Quoted-printable

话不多说,直接上题(BUUCTF)

Quoted-printable 编码规则相对简单,它将字符转换为 ASCII 可打印字符(尤其是 7 位字符集)

其核心思想是将非 ASCII 字符和某些特殊字符转换为等效的 ASCII 字符表示,并且用 = 符号作为转义符

编码规则:

ASCII 字符(可打印字符):例如字母、数字和一些常见符号,在编码后保持不变

非 ASCII 字符:这些字符使用 = 符号后跟两位十六进制表示:
    例如,字符 é(ASCII 码 233)被编码为 =E9

特殊字符(如空格、换行符等):
    空格( )如果位于行尾会被编码为 =20
    换行符(\n)通常被编码为 =0A 或 =0D=0A(根据不同的操作系统,Windows 使用 CRLF 即 \r\n,Unix/Linux 使用 LF 即 \n)

最大行长度:根据 MIME 标准,每行最大长度为 76 字符,如果一行超过 76 字符,则在换行处插入一个 = 符号

例子:

字符 `A`(ASCII 65)直接表示为 `A`,因为它是一个可打印字符
字符 `é`(ASCII 233)编码为 `=E9`
字符换行(`\n`)被编码为 `=0A`

Quoted-printable 编码特点:

编码由 = + 两个十六进制数组成

URL

0 条评论 crypto Crypto 雾島风起時

URL

话不多说,直接上题(BUUCTF)

URL 编码通过将每个非字母数字字符(包括特殊符号和空格)转换为 % 后跟两位十六进制数的形式来实现

例如,空格字符()在 URL 中会被编码为 %20

在 URL 编码中,每个字符都用 3 个字符表示:

`%` 表示转义开始
接下来的两位数字是该字符的十六进制 ASCII 值

例如:

空格字符(` `)的 ASCII 值是 32,转换为十六进制是 `20`,所以空格在 URL 中编码为 `%20`
特殊字符 `#` 的 ASCII 值是 35,十六进制表示为 `23`,因此 `#` 被编码为 `%23`

URL 编码特点:

每个字符以 % 开头 + 十六进制

Base64

0 条评论 crypto Crypto 雾島风起時

Base64

话不多说,直接上题(BUUCTF)

Base64 编码步骤

步骤 1:将数据按 3 字节分组

  • 二进制数据按每 3 字节(24 位)为一组拆分
    例如:字符串 "Man" 的 ASCII 码为 0x4D 0x61 0x6E

步骤 2:将 24 位拆分为 4 个 6 位块

  • 3 字节(24 位) → 分割为 4 个 6 位块
    示例:
    0x4D (01001101) + 0x61 (01100001) + 0x6E (01101110)
    合并为 24 位:010011 010110 000101 101110
    对应 4 个 6 位值:1922546

步骤 3:将 6 位值映射到 Base64 字符表

  • 查表(索引 0~63 对应 A-Z,a-z,0-9,+,/):
    19→T22→W5→F46→u
    结果:"TWFu"

步骤 4:处理不足 3 字节的情况

  • 情况 1:剩余 1 字节(8 位)
    • 补 4 个 0 位 → 生成 2 个 6 位块,后补 ==
      例如:"A"0x41)→ 010000 010000"QQ=="
  • 情况 2:剩余 2 字节(16 位)
    • 补 2 个 0 位 → 生成 3 个 6 位块,后补 =
      例如:"BC"0x42 0x43)→ 010000 100100 001100"QkM="

Base64 解码步骤

  1. 移除填充的 =,计算有效字符数
  2. 每个字符查表转换为 6 位二进制
  3. 合并所有 6 位块,按 8 位分组恢复原始数据

Base64 编码特点:

由 A-Za-z0-9+/= 组成的 64 个字符,通常末尾有 == 的就是 Base64

flag{THE_FLAG_OF_THIS_STRING}

32 位栈迁移 ROP

0 条评论 pwn Pwn 雾島风起時

32 位栈迁移 ROP 话不多说,直接上题(BUUCTF) 漏洞代码如下: 缓冲区 s 能构成溢出,但是 ret 太小了构造不了完整的 ROP 当缓冲区溢出空间不足以布置完整的 ROP 链时,利用栈迁移扩展攻击空间 在 32 位中关键指令是 leave; ret 主要用于 改变 ESP,让程序跳转到新的栈地址 因为 leave 会 将 esp 设为 ebp,...

仅有 sh ROP

0 条评论 pwn Pwn 雾島风起時

仅有 sh ROP 话不多说,直接上题(BUUCTF) 反编译代码要先输入 administrator 通过验证 其中有三个选项以及一个隐藏选项 先看隐藏选项,它将 src 值给了 dest 最后打印 在第一个选项中发现这个 src 值是有我们决定的最多 128 字节 看 dest 缓冲区明显存在栈溢出,同时左边 plt 表中有 system 函数可直接调用...

64 位 ROP

0 条评论 pwn Pwn 雾島风起時

64 位 ROP 话不多说,直接上题(BUUCTF) 扔进 IDA64 中反编译,发现调用了一个函数,进去看看 缓存区 buf 大小居然为 200,肯定存在溢出 双击 buf 可以算出需要 136 个字节垃圾数据 没有给后门函数,但是给了相关字符串,需要构造 ROP 64 位系统还格外需要一个 pop rdi; ret 指令,使用工具 ROPgadget 获...

32 位 ROP

0 条评论 pwn Pwn 雾島风起時

32 位 ROP 话不多说,直接上题(BUUCTF) 32位 IDA 反编译 啊哈,一眼存在栈溢出 查看内存需 140 个字节覆盖 Shift + F12 查看字符串,有可利用函数与字符串,构造 ROP 在 plt 表中拿到 system 地址 32 位中调用 system 函数时需要传入一个将来的返回地址,这个返回地址随意,但必须要有,返回地址后面则是参数...