25
1 BOF 기기기기 기기기기 ~! Feat. LoB http:// symnoisy.tistory.com/

0 BOF 기초부터 응용까지~! Feat. LoB

Embed Size (px)

DESCRIPTION

2 RTL? What The...(feat. Level 13) 4 Remote BOF? 리모콘? (feat. Level 20) 5 INDEX.

Citation preview

Page 1: 0 BOF 기초부터 응용까지~! Feat. LoB

1

BOF 기초부터 응용까지 ~!

Feat. LoBhttp://symnoisy.tistory.com/

Page 2: 0 BOF 기초부터 응용까지~! Feat. LoB

2

INDEX.

LOB?

1

BOF! 기초 디버깅(feat. gdb)

2

BOF! 난 정말 잘하고 있는 걸까(feat. Level)

3

Page 3: 0 BOF 기초부터 응용까지~! Feat. LoB

3

RTL? What The...(feat. Level 13)

4

Remote BOF? 리모콘 ? (feat. Level 20)

5

INDEX.

Page 4: 0 BOF 기초부터 응용까지~! Feat. LoB

4

LOB?.1• LORD OF BOF = 워게임

• 해커스쿨

Page 5: 0 BOF 기초부터 응용까지~! Feat. LoB

5

BOF! 기초 디버깅

Feat.gdb2환경변수 .STACK

.HEAP

.DATA

.CODE

• 스택 프레임

– SFP– RET

• 레지스터

– ESP– EBP– EIP

• 페이로드

– NOP– 쉘코드

Page 6: 0 BOF 기초부터 응용까지~! Feat. LoB

6

BOF! 기초 디버깅

Feat.gdb2 CALLING CONVENTION

– CDECL printf()

– STD CALL SUB

– FAST CALL( 생략 )

Page 7: 0 BOF 기초부터 응용까지~! Feat. LoB

7

BOF! 기초 디버깅

Feat.gdb2[gate@localhost kucis]$ cat basic.c#include<stdio.h>int main(int argc, char* argv[]){char buffer[1024];strcpy(buffer,argv[1]);puts(buffer);}

Page 8: 0 BOF 기초부터 응용까지~! Feat. LoB

8

BOF! 기초 디버깅

Feat.gdb2

디버깅 & 공격 GO!

Page 9: 0 BOF 기초부터 응용까지~! Feat. LoB

9

3BOF! 난 정말 잘하고 있는 걸까 ?Feat. Level 1

[gate@localhost gate]$ cat gremlin.c/*

The Lord of the BOF : The Fellowship of the BOF - simple BOF

*/ 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);}

Page 10: 0 BOF 기초부터 응용까지~! Feat. LoB

10

3BOF! 난 정말 잘하고 있는 걸까 ?Feat. Level 1

int main(int argc, char *argv[])

EX)./test ``perl –e ‘print “ABCD”`’` ``perl –e ‘print “EFGH”’``

Argc: 3Argv: [0],[1],[2]

Page 11: 0 BOF 기초부터 응용까지~! Feat. LoB

11

3BOF! 난 정말 잘하고 있는 걸까 ?Feat. Level 1

BUF 256

SFP

RET

Page 12: 0 BOF 기초부터 응용까지~! Feat. LoB

12

3BOF! 난 정말 잘하고 있는 걸까 ?Feat. Level 1

풀이

RET 에 넣을 주소를 직접 구하는 방법

소스에 추가해서 뱉어주게 하는 방법

( 단 , 소스를 건들 수 있다면 )

Page 13: 0 BOF 기초부터 응용까지~! Feat. LoB

13

3BOF! 난 정말 잘하고 있는 걸까 ?Feat. Level 1

디버깅 & 공격 GO!

Page 14: 0 BOF 기초부터 응용까지~! Feat. LoB

14

4 RTL?WHAT THE.....

Page 15: 0 BOF 기초부터 응용까지~! Feat. LoB

15

4RTL? WHAT THE.......Feat. Level 13

• Canary

• DEP/NX

• ASCII Armor

• ASLR

Page 16: 0 BOF 기초부터 응용까지~! Feat. LoB

16

#include <stdio.h>#include <stdlib.h>

main(int argc, char *argv[])

{char buffer[40];int i;

if(argc < 2){printf("argv er-

ror\n");exit(0);

}

if(argv[1][47] == '\xbf'){

printf("stack betrayed you!!\n");

exit(0);}

strcpy(buffer, argv[1]); printf("%s\n", buffer);

}

if(argc < 2){printf("argv error\n");exit(0);

}

4 Feat. Level 13RTL? WHAT THE.......

Page 17: 0 BOF 기초부터 응용까지~! Feat. LoB

17

if(argv[1][47] == '\xbf'){

printf("stack betrayed you!!\n");exit(0);

}

strcpy(buffer, argv[1]); printf("%s\n", buffer);

}

4 Feat. Level 13RTL? WHAT THE.......

Page 18: 0 BOF 기초부터 응용까지~! Feat. LoB

18

4 Feat. Level 13RTL? WHAT THE.......

공격 GO!

Page 19: 0 BOF 기초부터 응용까지~! Feat. LoB

19

4 Feat. Level 13RTL? WHAT THE.......

buf | SFP | &system | &exit | &sh

Page 20: 0 BOF 기초부터 응용까지~! Feat. LoB

20

5 Remote BOF?리모콘 .....??

Page 21: 0 BOF 기초부터 응용까지~! Feat. LoB

21

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/wait.h> #include <dumpcode.h>

main(){

char buffer[40];

int server_fd, client_fd; struct sockaddr_in

server_addr; struct sockaddr_in

client_addr; int sin_size;

if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){

perror("socket");exit(1);

}

server_addr.sin_family = AF_INET; server_addr.sin_port = htons(6666);

5 Feat. Level 20Remote BOF?

리모콘 .......

Page 22: 0 BOF 기초부터 응용까지~! Feat. LoB

22

server_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(server_addr.sin_zero), 8);

if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1){

perror("bind");exit(1);

}

if(listen(server_fd, 10) == -1){

perror("listen");exit(1);

}

while(1) { sin_size =

sizeof(struct sockaddr_in);if((client_fd = ac-

cept(server_fd, (struct sockaddr *)&client_addr, &sin_size)) == -1){

perror("accept");continue;

}

5 Feat. Level 20Remote BOF?

리모콘 .......

Page 23: 0 BOF 기초부터 응용까지~! Feat. LoB

23

if (!fork()){

send(client_fd, "Death Knight : Not even death can save you from me!\n", 52, 0);

send(client_fd, "You : ", 6, 0);

recv(client_fd, buffer, 256, 0);

close(client_fd);break;

}

close(client_fd); while(waitpid(-

1,NULL,WNOHANG) > 0);}close(server_fd);

5 Feat. Level 20Remote BOF?

리모콘 .......

Page 24: 0 BOF 기초부터 응용까지~! Feat. LoB

24

공격 GO!

5 Feat. Level 20Remote BOF?

리모콘 .......

Page 25: 0 BOF 기초부터 응용까지~! Feat. LoB

25

THANK YOU!

Q&Asymnoisy.tistory.-

com