본문 바로가기

스터디122

[GDB-Analysis] GDB 바이너리 디버깅 2 이번에는 버퍼 오버플로우 취약점으로 자주 등장하는 strcpy 함수를 디버깅 해보겠습니다. 너무 쉬워보일수도 있겠지만 모든것들이 패턴이 있습니다. 함수가 호출되기전에 어떻게 인자를 참조하는지 이 작업은 무엇을 의미하는지, 저 또한 공부한지 별로 안됬지만 조금 알것같습니다. 이런 밑거름들을 차근차근 해나가다가 나중에는 워게임 하나를 디버깅해 취약점을 찾아낸다는지.. 가능할겁니다. [gate@localhost tmp]$ cat t2.c int main(int argc, char *argv[]) { char buffer[40]; strcpy(buffer, argv[1]); // argv[1] 을 buffer 에 복사합니다. printf("%s\n", buffer); // 복사된 buffer 을 출력합니다. }.. 2011. 8. 17.
[GDB-Analysis] GDB 바이너리 디버깅 1 제가 직접 간단하게 소스를 만들어 디버깅을 할 생각입니다. 워게임을 풀면서 많이나오는 소스들을 가지고 디버깅을 해볼 생각입니다. (argv, strncpy 인자 불러오기 등등) 물론 IDA 로해야지 쉽고 빠르지만 그것보다 평소 디버깅 실력을 높이기위해 도전해봅니다. 제일 처음으로 GDB 로 디버깅을 하여 강의할 프로그램은 다음과 같습니다. [gate@localhost tmp]$ cat t1.c #include int main(int argc, char *argv[]) { printf("%s ", argv[0]); printf("%s ", argv[1]); printf("%s ", argv[2]); printf("%s\n", argv[3]); return 0; } [gate@localhost tmp]$ ... 2011. 8. 17.
[IDA-Analysis] Binary Wargames Level1 안녕하세요, 이 게시판에서는 ELF 파일, 즉 바이너리 파일을 받아 C 언어로 소스화 하면서 모르는것은 알아가면서 필요한 키 값을 찾아가는 문제를 풀어가는 게시판입니다. 파일은 제공되지 않으며 만약 이렇게 분석을 하실 생각이라면 아이다 프로가 필요합니다. 이번 문제풀이의 목표는 본 파일에서 암호화를 하는데 똑같은 방법으로 "Deep into the system" 을 암호화해야 합니다. 단, UTC 2012년 12월12일 12시12분 12초 (24시간기준) 에 프로그램을 실행 했을 때의 암호화된 값을 적어야 한다. 무슨말이냐면 유닉스 시스템 용어로 타임스탬프라고 1970년 1월 1일 00:00:00를 기준으로 경과한 초를 의미하는데 이 점을 이용해 UTC 2012년 12월 12일 12시 12분 12초 에의.. 2011. 8. 17.
[BOF-Wargames] LOB Load of BOF LEVEL4 (goblin -> orc) 문제풀이 Goblin -> Orc LOB 문제풀이를 시작하도록 하겠습니다. [goblin@localhost goblin]$ ls orc orc.c [goblin@localhost goblin]$ ./orc argv error [goblin@localhost goblin]$ ./orc aa aa aa stack is still your friend. [goblin@localhost goblin]$ cat ./orc.c /* The Lord of the BOF : The Fellowship of the BOF - orc - egghunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; // Buff.. 2011. 8. 17.
[BOF-Wargames] LOB Load of BOF LEVEL3 (cobolt -> goblin) 문제풀이 [cobolt@localhost cobolt]$ ls goblin goblin.c [cobolt@localhost cobolt]$ ./goblin [cobolt@localhost cobolt]$ ./goblin aa aa aa 프로그램을 입력해도 아무 응답이 없네열... [cobolt@localhost cobolt]$ cat goblin.c /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 확인해보니 아까와 다른 방식입니다. 이번에는 프로그램을 실행하고 입력하는 방식입니다. 이럴.. 2011. 8. 16.
[BOF-Wargames] LOB Load of BOF LEVEL2 (gremlin -> cobolt) 문제풀이 [gremlin@localhost gremlin]$ ls cobolt cobolt.c [gremlin@localhost gremlin]$ ./cobolt argv error [gremlin@localhost gremlin]$ ./cobolt aa aa aa aa [gremlin@localhost gremlin]$ cat cobolt.c /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); print.. 2011. 8. 16.
[BOF-Wargames] LOB Load of BOF LEVEL1 (gate -> gremlin) 문제풀이 해커스쿨에서 진행하는 버퍼 오버플로우 워게임이라고, Load of Buffer Overflow 이란게 있습니다. 쉽게 다운로드받으실 수 있으며 버추얼박스나 VMWare 로 오픈하기만 하면 실행이 가능합니다. netconfig 명령어를 실행해 설정을 자동세팅으로 해주면 바로 자신의 컴퓨터에서 서버로 접속을 할 수 있습니다. 접속해야하는 정보는 /sbin/ifconfig 명령어로 확인이 가능합니다. 바로 문제를 풀어보겠습니다. 이 보고서는 Level1 ~ Level3 까지 바로바로 작성됩니다. 보고서를 쓰며 기본적으로 담을 내용이 있습니다. 소스코드에 대한 설명, GDB 를 이용한 분석과정 설명(중요포인트만 설명), 메모리구조 설명, 페이로드 구성 및 설명에 대한 내용은 필수적으로 담을려고 하겠습니다. [g.. 2011. 8. 16.
메모리 기본 구조 STACK_EBP EBP + 4 => RET EBP + 8 => argc EBP + 12 => argv[0] 2011. 8. 15.
[BOF-Wargames] IO SmashTheStack Level7 문제풀이 IO 워게임 레벨 7 문제풀이를 진행하도록 하겠습니다. level7@io:~$ cd /levels level7@io:/levels$ ./level07 Segmentation fault 이번 문제 또한 실행하면 세그멘테이션 폴트가 뜹니다. level7@io:/levels$ cat level07.c //written by bla #include #include #include int main(int argc, char **argv) { int count = atoi(argv[1]); // argv[1] 을 문자열 정수형으로 변환한다. int buf[10]; (EBP+12) +4 => argv[1] , if(count >= 10 ) // count 가 10보다 커버리면 프로그램이 종료됩니다. return 1;.. 2011. 8. 15.