2025/04/01 3

[dreamhack] level 1 basic_exploitation_001

문제 분석AAA만 입력했을 때는 아무런 동작을 하지 않는다. 하지만 A를 엄청나게 많이 입력했을때는 Segmentation fault 에러가 뜨는 것을 확인할 수 있다. 따라서 core 파일이 생성되었다. core 파일 분석core 파일을 gdb로 분석해보면 0x61616161에서 violation이 발생하였다. 그리고 esp에 우리가 입력한 aaa의 값의 일부인 aaa가 저장되어 있는 것을 확인 할 수 있다. 따라서 너무 많은 값을 입력하여 반환 주소를 aaa가 덮어쓴 것이다. basic_exploitation_001.c 코드 분석해당 파일의 코드를 보면 read_flag라는 함수에서 cat을 이용하여 flag를 읽고 있는 것을 확인 할 수 있다. 또한 buf라는 버퍼에는 0x80만큼의 공간이 있다. ..

[dreamhack] level 2 basic_exploitation_000

문제 분석buf = ( 뒤에 랜덤한 주소가 출력되고 AAAAA를 입력하면 아무런 동작을 하지 않는다. 따라서 AAAA를 엄청나게 많이 입력해보았더니 Segmentation fault 에러가 뜨는 것을 확인할 수 있다. basic_exploitation_000.c 파일 확인#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}int main(..

[dreamhack] Return Address Overwrite

문제 분석해당 문제에 AAAAA 라고 입력해보면 아무 동작도 하지 않는다. 하지만 A를 64개 정도 입력해보면 Segmentation falut라는 에러가 뜨고 core 파일이 위와 같이 생성된다.  코어 파일 분석gdb로 core 파일을 확인해보면 버퍼오버플로우로 인해 버퍼의 크기를 초과하여 반환 주소를 0x4141414141로 덮어쓴것 같다. 따라서 return address를 변조하면 될 것 같다.rao 파일 분석스택 프레임 구조를 파악하기 위해 rao를 분석해보니 위와 같은 어셈블리 코드를 확인할수 있었다.사용자의 입력이 들어갈 버퍼의 위치는 rbp-0x30이다. 이후에는 sfp가 저장되고 rbp+0x8엔 ret address가 저장된다.  따라서 버퍼의 위치와 반환 주소 사이에는 0x38만큼의 ..