System Hacking Advanced

System Hacking Advanced

[dreamhack] shell_basic

쉘코드를 작성하는 문제다. execve(), execveat()처럼 쉘을 실행하는 함수는 사용할 수 없다. 문제 의도는 다른 함수를 이용해서 flag를 읽을 수 있도록 쉘코드를 작성하는 것이 목표다. 설명에서 flag 파일 위치를 절대경로로 알려주고 있다. 일반적인 쉘코드는 execve("/bin/sh", ..., ...) 처럼 쉘을 실행하는 유형이 대부분이다. 그러나 execve()를 사용할 수 없는 상황이므로 일반적인 쉘코드를 사용해서 쉘을 획득하는 것은 불가능하다. 그렇다면, flag를 어떻게 획득할 수 있을까? 목표는 쉘을 실행하는 것이 아니라 flag를 획득하는 것이다. 그렇다면, execve()를 사용하지 않고 read(), write()로 flag를 읽는 방식으로 접근해볼 수 있다. read..

System Hacking Advanced

[dreamhack] basic_exploitation_001

문제풀이void read_flag() { system("cat /flag");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0;}gets(buf)에서 입력 길이 검증이 없다. 따라서 BOF가 발생한다. BOF 취약점으로 RET을 read_flag() 주소로 덮으면 쉘을 얻을 수 있다. read_flag() 주소를 구해보자. gdb로 read_flag() 주소를 출력한 결과다. 0x80485b9라는 것을 확인할 수 있다. 다음으로 payload를 구성해보자. "\x90"*132 + [read_flag() 주소]RET 이전 공간을 NOP sled로 덮고 RET을 read_flag..

System Hacking Advanced

[dreamhack] basic_exploitation_000

문제분석 & 풀이int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0;}scanf("%141s", buf)를 보자. 입력 길이를 141 바이트로 제한하고 있지만 buf의 크기는 128 바이트다. 따라서 128 바이트 이상의 데이터를 입력하면 BOF(Buffer Over Flow) 취약점이 발생한다. BOF 취약점으로 RET을 조작하고 임의의 주소에 있는 코드를 실행할 수 있다. 코드에서 printf("buf = (%p)\n", buf)로 buf 주소를 출력해준다. buf에 쉘코드를 삽입하고 RET을 buf 주소로..

keyme
'System Hacking Advanced' 카테고리의 글 목록 (7 Page)