banner
Hi my new friend!

hacktb_第八届西湖论剑_sharkp

Scroll down

第八届西湖论剑_sharkp

参考wp:

iot 逆向思路:西湖论剑WriteUp | CN-SEC 中文网

web思路: 西湖论剑 By 金石滩小鲨鱼 | Ya1orin🍭

官方wp: 第八届西湖论剑·中国杭州网络安全技能大赛初赛官方Write Up(上)

流量分析法

  1. 恶意文件可以使用在线安全沙箱来分析出恶意ip

  2. 导出文件(又记了一次_悲_)(但是实际上这次不在这里):

    首先确认恶意文件是在http中上传的,然后就可以使用导出对象找到对应协议

    可以看到这里面有好几个协议,选择http

    image-20250420165603461

    然后wireshark就会过滤出所有的http协议中有的内容,然后上选择对应的目标文件setFirmwareUpgrade另存

    image-20250420165722293


然后是大大的教训


  1. 沙箱

    安恒云沙箱-下一代沙箱的领航者

    样本报告-微步在线云沙箱

    奇安信情报沙箱

  2. 与他人wp中hash相同但是一直无法检测出外联行为,无法进行,疑似木马检测了时间,设置了发送时间限制,故无法从沙箱中判断

  3. 所以需要尝试逆向来进行ip获取

逆向解法

  1. f5将汇编翻译成c语言

    image-20250420183200482

  2. 搜索syscall 0x40404发现上下文

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    .shellcode:00410114                 syscall 0x40404
    .shellcode:00410118 move $s5, $v0
    .shellcode:0041011C bnez $v0, main_lab
    .shellcode:00410120 nop
    .shellcode:00410124 li $t9, 0xFFFFFFFD
    .shellcode:00410128 nor $a0, $t9, $zero
    .shellcode:0041012C li $t9, 0xFFFFFFFD
    .shellcode:00410130 nor $a1, $t9, $zero
    .shellcode:00410134 slti $a2, $zero, -1
    .shellcode:00410138 li $v0, 0x1057
    .shellcode:0041013C syscall 0x40404
    .shellcode:00410140 sw $v0, var_4($sp)
    .shellcode:00410144 lw $s0, var_4($sp)
    .shellcode:00410148 li $t9, 0x47DDFFFD
    .shellcode:00410150 nor $t1, $t9, $zero
    .shellcode:00410154 sw $t1, var_8($sp)
    .shellcode:00410158 li $t1, 0xA158C373
    .shellcode:00410160 sw $t1, var_4($sp)
    .shellcode:00410164 addiu $sp, -8
    .shellcode:00410168 sw $s0, 8+var_10+4($sp)

    ai发现注入了

    1
    2
    .shellcode:00410158  li $t1, 0xA158C373    # 写入魔数
    .shellcode:00410160 sw $t1, var_4($sp) # 存储到栈

    0xA158C373转化过来是

    image-20250420183355437

    对于1010 0001 0101 1000 1100 0011 0111 0011,ip地址的编码规则是8位二进制分,解析出来是

    161.88.195.115,实际上答案应该是:115.195.88.161

  3. 存在字节序问题

    你发现了一个关键细节!0xA158C373 在不同字节序下会解析出不同的 IP 地址。以下是完整解释:


    1. 根本原因:字节序(Endianness)问题

    0xA158C37332位十六进制值,但它在内存中的存储方式取决于 CPU 的字节序:

    • 大端序(Big-Endian):高位字节在前 → A1 58 C3 73161.88.195.115
      (人类直觉顺序,网络传输标准)
    • 小端序(Little-Endian):低位字节在前 → 73 C3 58 A1115.195.88.161
      (x86/ARM等常见CPU的默认顺序)

    2. 你的代码场景分析

    (1) MIPS架构的字节序

    • MIPS CPU 可能是大端或小端(取决于具体型号):

      • 如果你在 小端序 MIPS 系统(或模拟器)中运行代码,0xA158C373 会被当作 73 C3 58 A1 解析 → 115.195.88.161
  • 如果是 大端序 MIPS,则解析为 161.88.195.115

(2) 指令中的隐式转换

当代码执行以下操作时:

1
2
li  $t1, 0xA158C373    # 将值加载到寄存器
sw $t1, var_4($sp) # 存储到内存
  • li 指令:直接加载 0xA158C373 到寄存器,不改变字节序

    • sw 指令:将寄存器的值按当前CPU字节序写入内存。

3. 如何验证正确的IP?

(1) 动态调试检查

在调试器中查看 $t1 寄存器的实际字节排列:

1
2
(gdb) x/4xb $t1    # 显示$t1的4个字节
0x73 0xc3 0x58 0xa1 # 小端序 → 115.195.88.161

(2) 代码上下文

  • 如果后续代码将 $t1 作为 网络数据包 发送(如通过 sendto),需按 大端序(网络字节序) 转换:

    1
    2
    li    $t1, 0xA158C373
    swl $t1, 0($sp) # 强制按大端序存储

    此时IP为 161.88.195.115

  • 如果直接用于 本地计算(如加密密钥),则保持小端序 115.195.88.161

收集wireshark使用方法

1
http.request.method == "POST"

过滤出二进制流传输判断传输了文件

1
http.content_type == "application/octet-stream"

教训

  1. 遇到意义不明的二进制流放沙箱! 是否改后缀无所谓,但是一定要通过导出对象

  2. 另存为只能获得txt!

    获取response返回的文件

    1
    http.content_type == "application/octet-stream"

    找到之后选择另存为

    image-20250420172518508

    总结发现这个另存为只会被识别为text!

其他文章
cover
GPG密钥过期
  • 25/04/23
  • 19:44
  • 协议学习
cover
hacktb_应急响应SU_forensics
  • 25/04/18
  • 00:00
  • 打靶日记
目录导航 置顶
  1. 1. 第八届西湖论剑_sharkp
    1. 1.1. 流量分析法
    2. 1.2. 逆向解法
      1. 1.2.1. 1. 根本原因:字节序(Endianness)问题
      2. 1.2.2. 2. 你的代码场景分析
        1. 1.2.2.1. (1) MIPS架构的字节序
        2. 1.2.2.2. (2) 指令中的隐式转换
      3. 1.2.3. 3. 如何验证正确的IP?
        1. 1.2.3.1. (1) 动态调试检查
        2. 1.2.3.2. (2) 代码上下文
    3. 1.3. 收集wireshark使用方法
    4. 1.4. 教训
请输入关键词进行搜索