본문 바로가기

워게임/protostar

stack4

(gdb) disas main

Dump of assembler code for function main:

0x08048408 <main+0>: push   ebp

0x08048409 <main+1>: mov    ebp,esp

0x0804840b <main+3>: and    esp,0xfffffff0

0x0804840e <main+6>: sub    esp,0x50

0x08048411 <main+9>: lea    eax,[esp+0x10] //입력받은 값을 저장할 버퍼

0x08048415 <main+13>: mov    DWORD PTR [esp],eax

0x08048418 <main+16>: call   0x804830c <gets@plt>

0x0804841d <main+21>: leave  

0x0804841e <main+22>: ret    

End of assembler dump.

(gdb) disas win

Dump of assembler code for function win:

0x080483f4 <win+0>: push   ebp

0x080483f5 <win+1>: mov    ebp,esp

0x080483f7 <win+3>: sub    esp,0x18

0x080483fa <win+6>: mov    DWORD PTR [esp],0x80484e0

0x08048401 <win+13>: call   0x804832c <puts@plt>

0x08048406 <win+18>: leave  

0x08048407 <win+19>: ret    

End of assembler dump.


이번에도 코드 흐름을 바꿔야하는데 아마 RTL이 아닐까 싶네요.

 

일단 제 기억엔 버퍼 다음에 오는 공간이 SFP 4바이트, 그다음이 RET인걸로 기억해요.

 

일단 0x50byte 할당했고 esp+0x10부터 입력된 버퍼가 저장되니까 0x40byte 즉 64byte를 더미로 입력하고 4byte SFP 추가 + 4byte의 리턴 주소를 넣으면 되겠군요..

 

근데 안됨.. 보니까 버퍼랑 sfp 사이에 더미가 있었어요

 

[BUFFER][DUMMY][SFP][RET]

64byte  8byte  4byte4byte

 

음 이렇게 더미까지 계산해서 76byte넣어주고 win() 주소 입력해주면 통과할것같네요


코드는 그냥 void main(){ printf(“code flow ~”); } int main(){ buffer[64]; gets(buffer); } 일듯한..




'워게임 > protostar' 카테고리의 다른 글

stack6,7  (0) 2015.10.15
stack5  (0) 2015.10.15
stack3  (0) 2015.10.15
stack2  (0) 2015.10.15
stack1  (0) 2015.10.15