DreamHack

Wargame/Dreamhack

[Dreamhack] basic_exploitation_001

문제 정보를 보면, 보호 기법이 없다는 것을 알 수 있다. basic_exploitation_001.c를 보면, buf의 크기가 0x80이고 입력의 크기를 제한하지 않는 gets함수로 입력을 받음으로써 BOF가 발생할 수 있고, 이를 이용해서 read_flag로 "cat /flag"를 실행킬 수 있다. gdb로 basic_exploitation_001을 확인해보니, push ebp로 sfp의 크기가 0x4인 것을 확인할 수 있다. exploit을 작성하기 위해 gdb로 "print read_flag"를 실행해 read_flag의 주소를 알아내었다. 지금까지의 내용들을 바탕으로 pwntools로 exploit을 작성하였다.

Wargame/Dreamhack

[Dreamhack] basic_exploitation_000

문제 정보를 보면, 보호 기법이 없다는 것을 알 수 있다. basic_exploitation_000.c를 보면 buf가 0x80(128)의 크기를 가지고, 셸코드를 실행할 함수가 내장되어 있지 않은 것을 확인할 수 있다. 또한, scanf가 141만큼 입력을 받을 수 있어 0x80보다 크므로 BOF가 일어날 수 있고, 이를 이용해야 한다. 그리고, scanf는 \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못하므로 인터넷에서 scanf 우회셸코드를 가져왔다. 실행하면, exploit을 작성할 때 필요한 buf의 주소가 계속 변한다는 것을 알 수 있다. gdb로 basic_exploitation_000을 뜯어보면, push ebp를 통해서 sfp의 크기가 0x4인 것을 알 수 있다. 지금까지의..

Wargame/Dreamhack

[Dreamhack] Return Address Overwrite

Return Address Overwrite를 실습하는 문제이다. 문제 파일 중에서 rao.c를 열면 아래처럼 나온다. rao.c를 보면, buf의 크기가 0x28이고 "Input: "다음에 입력을 받고, 마지막으로 get_shell을 통해 /bin/sh를 실행한다. 더 자세히 보기 위해서 gdb로 뜯어본다. 앞에서는 buf의 크기가 컴퓨터의 최적화로 인해서 0x28에서 0x30으로 변경되었다. 그리고 push rbp로 sfp의 크기가 0x8임을 확인할 수 있다. 그 다음에 /bin/sh를 위해서 get_shell의 주소를 확인한다. 지금까지를 바탕으로 pwntools를 사용해서 exploit을 작성한다. 마지막으로, "python3 exploit.py"로 exploit을 실행하고 최종 결과를 확인한다.

Wargame/Dreamhack

[Dreamhack] shell_basic

문제 정보를 보면 execve, execveat 시스템 콜을 사용하지 못한다는 것을 알 수 있고, flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong 라고 주어진 것을 확인할 수 있다. 하지만, 그 전에 꼭 알아야 할 것들이 있다. 엔디언(Endian)은 프로그래밍에서 메모리같은 1차원 공간에서의 데이터 배열 방법을 의미하는데, 이러한 Endian은 각각의 architecture에 의해 Little Endian과 Big Endian으로 나뉘게 된다. Big Endian은 왼쪽에서부터 데이터를 넣지만, Little Endian은 반대로 데이터를 넣는다는 특징이 있다. 문제로 돌아와서, intel x86-64 architecture는 Little Endia..

Wargame/Dreamhack

[Dreamhack] Welcome

접속정보를 확인하고 "nc host3.dreamhack.games 22999" 을 입력하면 Welcome문제이다 보니, 접속만 하면 FLAG가 나왔다.

leginwos
'DreamHack' 태그의 글 목록