利用pwntools自带的shellcraft生成的shellcode 所消耗的字节数比较多 并且还含有很多的不可见字符
from pwn import* |
有些题目会对症下药 限制shellcode长度的题目已经屡见不鲜 本篇文章来讲一下限制字符范围的shellcode
国际上普遍采用ascii码作为字符的编码 其中规定了95个可见字符 即打印字符 可以被直接输出 剩下的则是不可见的字符
而pwn题中的可见字符shellcode通常指使用可见字符构成的shellcode
这里我们需要借用alpha3这款工具来将一串不可见的字符shellcode转化为可见字符
手动转化的办法这里就不介绍了 毕竟我也不会 哪天学会了再补充吧
由于官方的alpha3只支持win32 在linux系统中会出现报错 需要我们修改源码 比较麻烦 再加上需要我们自己编译
所以这里直接采用这个师傅的修改版进行下载使用
https://blog.csdn.net/SmalOSnail/article/details/105236336 |
下载指令:
git clone https://github.com/TaQini/alpha3.git |
其内置了两个脚本和两个文本文件
各自对应32位和64位系统的shellcode生成脚本 我们只需要修改shellcode文本文件中的shellcode 并且指定shellcode的基地址后运行脚本
这里使用open read write函数来写入shellcode
from pwn import* |
用python2运行就好了 3的话区分了str和byte型 会导致write出错
随后cd到alpha3目录下 ./shellcode_x??.sh shellcode基地址
这个基地址要怎么看 以mrctf2020_shellcode_revenge这一题为例
其将shellcode的地址赋值给了rax寄存器 那么call rax 就是调用shellcode 所以我们这里的shellcode基地址应该是rax