通过输入’\’,可以将ptr的位置往上挪,由此可修改ptr上方的内容。另外,由于会检查ptr是否低于buffer下界,另外反汇编发现main函数有stack保护,所以不能修改main的返回地址了
但他也提供了一个执行shell的机会,只要ptr的值最高位是0xca。坚持发现ptr保存在esp+14h,其初始值即buffer+sizeof(buffer)/2在esp+11ch。由于小端,ptr最高位在esp+17h,两者相距0x105=261。故先输入261个’\’,再加上”\xca”,再加上一个正常字符一跳至相应的case:
$ (perl -e 'print "\x5c"x261 . "\xca\xca"';cat) | /vortex/vortex1
这里我们还是用了一个cat来与invoked的sh进行交互。得到密码是…