从 shell 代码中删除空字节

信息安全 缓冲区溢出 外壳代码
2021-09-07 00:23:15

我正在学习 shell 编码的基础知识,以便学习如何利用缓冲区溢出。问题是,我编写的示例字节码包含空字节。这是示例:

xor    %edi,%edi      >       31 ff         
mov    $0x3c,%eax     >       b8 3c 00 00 00          
syscall               >       0f 05   

字节码:"\x31\xff\xb8\x3c\x00\x00\x00\x0f\x05"

消除空字节的常用技术有哪些?我听说人们在这类事情上使用编码器,但我找不到任何很好的资源。

1个回答

mov可以用push和代替pop所以例如这个:

mov    $0x3c,%eax

可以变成这样:

push $0x3c
pop %eax

这会给你这个空字节免费代码:

   0:   31 ff                   xor    %edi,%edi
   2:   6a 3c                   push   $0x3c
   4:   58                      pop    %eax
   5:   0f 05                   syscall