ls명령어로 디렉토리 안을 살펴봅시다.
"attackme" 라는 실행파일과 hint파일이 보입니다.
cat명령어로 힌트파일의 내용을 확인했습니다.
gdb로 attackme의 실행 과정을 확인해보려 하니 권한이 없다 뜨기에 힌트로 주어진 소스코드를 /tmp디렉토리에 복사하여 attackme.c라는 파일을 만들어주었습니다.
attackme.c를 attackme라는 실행파일로 만들어줍시다.
만든 attackme실행파일을 디버거로 확인해봅시다.
main+3 에서 0x108의 공간을 할당해주는데 0x108은 10진수로 264바이트입니다.
그러나 선언해준 배열의 크기는 256바이트이므로 나머지 8바이트는 더미 값 입니다.
따라서 이 실행파일의 메모리의 구조는
| buffer: 256 byte | dummy: 8 byte | SEP: 4 byte | RET: 4 byte |
total: 272 byte
인 것을 확인할 수 있습니다.
export SHELLCODE=`python -c 'print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
를 입력해 이름이 SHELLCODE인 환경변수를 만들어주었습니다.
만들어진 환경변수를 한 번 확인해줍시다.
이제 환경변수의 메모리 주소 값을 얻어올 코드를 작성해야 합니다.
vi 편집기를 열어줍시다. 이름은 sss.c로 하였습니다.
이렇게 적어준 후 :wq명령어를 이용해 나와줍니다.
getenv함수는 환경변수의 값을 읽어오는 함수입니다.
gcc로 sss이름의 실행파일을 만들어줍니다.
밑에 경고가 뜨는데 무시하셔도됩니다.
./[프로그램이름] [환경변수이름] /home/level11/attackme
를 입력해 sss를 실행시켜주면 SHELLCODE의 주소가 나타나게 됩니다.
attackme를 실행시킨 후 null값으로 268바이트를 채운 후 리턴 값이 나오는 주소에 SHELLCODE의 주소를 덮어주면 끝!
'Security > 해커스쿨_FTZ' 카테고리의 다른 글
[해커스쿨_FTZ] level13 (0) | 2018.10.07 |
---|---|
[해커스쿨_FTZ] level12 (0) | 2018.10.05 |
[해커스쿨_FTZ] level10 (0) | 2018.10.04 |
[해커스쿨_FTZ] level9 (0) | 2018.10.04 |
[해커스쿨_FTZ] level8 (0) | 2018.10.03 |