2026/03/30 3

[Dreamhack] Return Address Overwrite

문제는 다음과 같다. 서버를 만들어보고 들어가면이렇게 뜨는데 도무지 뭔지 모르겠으니 코드를 보자.코드 구조를 보면, buf 배열의 크기가 고작 0x28 정도인데, %s를 사용하면 엔터나 띄어쓰기를 만나기 전까지 계속 입력받으므로 버퍼오버플로가 발생할 수 있다!또한 위에 컴파일 옵션에 스택 카나리 보호 기법이 해제되어 있고 바이너리의 메모리 주소가 고정되어있는 것을 알 수 있다. 스택 구조는 아마 아래와 같을 것이다.buf (0x28)SFP(8 bytes)RET (8 bytes)입력 데이터 저장이전 함수의 스택 베이스 포인터함수 종료 후 돌아갈 주소우리의 목표는 /bin/sh 를 실행하는 get_shell() 함수다! 저길 노리면 쉘을 얻을 수가 있다.즉, 버퍼오버플로로 RET 영역을 get_shell()..

Security/Pwnable 2026.03.30

[Dreamhack] bof

제목부터 버퍼오버플로우문제라고 광고 중이다.실행해보면 웬 고양이가 뮤뮤거리며 나를 반겨준다. (귀엽다) 파일에 따로 C파일이 없어서 마찬가지로 IDA로 디컴파일해서 보자.보면 scanf에서 최대로 144바이트까지의 값을 받고 있는 것을 확인할 수 있다.근데 v4 배열은 128바이트 크기를 가지고 있다! 거기에 v4를 입력받은 다음 바로 v5 변수가 사용되므로, v4 값을 버퍼오버플로우로 넘치게 만들면 v5 변수의 내용을 내가 원하는 대로 덮어쓸 수 있겠다. 또한 flag는 /home/bof/flag 에 있다고 했으므로 v5 영역에 들어갈 값이 바로 저 위치 문자열이 될 것이다.이를 바탕으로 익스플로잇 코드를 작성해보자.아까 전에 쓴 코드보다 더 쉽다. 살짝만 수정해서 오버플로될 곳에 주소가 들어가도록 만..

Security/Pwnable 2026.03.30

[Dreamhack] Basic_exploitation_001

문제는 다음과 같다. 우선 파일부터 다운받아보자. 압축 파일 내의 C 파일을 보면 저렇게 생겼다. 저중에서도 cat flag 명령을 내는 read_flag() 함수가 중요할 것 같다. 이걸 실행시키는 게 목표일 것 같은데, 어디에도 read_flag()를 실행하는 명령은 없다.main() 함수를 보면 gets 함수가 보인다. 얘는 입력값의 길이를 검증하지 않아서 128바이트보다 큰 데이터를 입력하면 버퍼오버플로가 일어나는 취약점이 있다고 했었다.즉, gets 함수에 버퍼오버플로우를 이용하면 read_flag에 닿을 수 있지 않을까?! 32비트인 x86 환경에서 main 함수의 스택 프레임 구조는, buf (128 bytes)SFP (4 bytes)RET (4 bytes)gets() 입력이 저장되는 곳이전..

Security/Pwnable 2026.03.30