Root-me App/System 챌린지 1번! Stack buffer overflow 문제입니다!
편의상 영어를 쓰지않고 스택 버퍼오버플로우라고 하겠습니다.
스택 버퍼오버플로우는 포맷스트링과
더불어 시스템해킹의 첫걸음이라고 할 수 있는데요
차근차근 유치원생에게 설명하듯 쉬운것부터 알아보겠습니다.
네 난이도 1짜리 문제구요
기본적으로 버퍼오버플로우는 유입되는 글자수에 제한을 두지 않아,
말그대로 오버플로우, 흘러넘침이 발생하여 메모리 다른 영역을 침범하여 발생하는 버그입니다.
이를 이용하여 root의 권한을 얻는것이 일반적인 목적이라고 하겠습니다.
1번문제라 그런지 버퍼의 크기를 확인 할 수 있는 소스코드가 주어졌습니다.
check 변수의 값을 0x04030201에서 0xdeadbeef 로 바꿔야 하는 문제로 보입니다.
사실 버퍼의 크기가 40이라고 나와있기 때문에 이것만 확인해도 되겠지만,
소스코드가 주어지지 않았을 경우를 대비하여,
gdb 기본명령어와 함께 간단하게 사용해 보겠습니다.
서버에 접속하여 ls 명령어를 실행하면 위와 같은 파일이 나열됩니다.
아마도 히든파일로 되어있는 .passwd의 값을 읽어야 하는 문제인 것 같습니다.
gdb를 이용하여 디버깅 하는 명령어는 gdb [파일명] 입니다.
set disassembly-flavor intel 명령어로 어셈블리 코드를 intel 문법으로 보겠다고 선언해줍니다.
버퍼오버플로우를 공부할 때 문서들이 대개 intel 문법으로 설명하고 있는 것들이
많기 때문에 해주는 작업이므로, 기호에 따라 하지 않아도 상관 없습니다.
b main 명령어를 사용해 main 함수에 브레이크 포인트를 걸어줍니다.
그리고 실행하면??
소스코드에서 확인한대로 40byte의 크기만큼 문자를 받는 것을 확인 할 수 있습니다.
자 이제 버퍼를 가득채워 흘러 넘치게 합시다!
40byte를 A라는 임의의 값으로 채워넣고 바로 이어서 deadbeef 라는 값을 채워
넣어야 하는데 python을 사용한 문법은 위와 같습니다.
check 값이 deadbeef 라고 성공적으로 들어갔으면 .password를 읽을 수 있는
권한의 쉘이 열리게 됩니다.
히든 파일로 되어있는 .password 파일을 읽으시면
클리어!!!
perl을 사용한 문법은 아래와 같고요
python과 perl의 문법은 조금 차이가 있으므로 이 것 역시 기호에 맞는 언어를 사용하여 풀면 되겠습니다.
"A"x40 이후에 적어주는 영어 구문이 왜 deadbeef가 아니냐? 의문이 들겁니다.
바로 리틀인디언 방식으로 기재하기 때문인데요
이에 대한 자세한 내용은 구글에서
빅인디언 리틀인디언을 검색하여 한번 보시길 바랍니다.
그럼 다음 문제에 뵙겠습니다~!
'War-Game > Root-me' 카테고리의 다른 글
ROOT-ME CHALLENGES - CRACKING : 8 ELF - ARM Basic (0) | 2019.04.03 |
---|---|
ROOT-ME CHALLENGES - CRACKING : 9 PYC - ByteCode (0) | 2019.04.03 |
ROOT-ME CHALLENGES - CRACKING : 7 ELF - Ptrace (0) | 2019.04.03 |
ROOT-ME CHALLENGES - Web Server : 32 SQL injection - numeric (0) | 2019.04.03 |
ROOT-ME CHALLENGES - CRACKING : 6 ELF - Fake Instructions (0) | 2019.04.03 |