[해커스쿨_FTZ] level12
언제나와 같이 ls명령어로 디렉토리를 확인해준 후 hint파일을 열어봅시다.
버퍼오버플로우 문제입니다.(gets()함수는 크기에 제한을 두지 않음)
디버거로 메인함수를 확인해봅시다.
main+3 부분에서 0x108(264)바이트의 메모리를 확보해둡니다.
즉, 메모리는
| buffer: 256 byte | dummy: 8 byte | SEP: 4 byte | RET: 4 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"'`
export 명령어로 SHELLCODE라는 환경변수를 만들어 준 후 호출하면 쉘코드가 채워지게 내용을 넣었습니다.
env 명령어로 만든 환경변수를 확인해줍니다.
vi편집기로 환경변수의 주소를 가져올 코드를 작성합시다.
그냥 getenv()함수를 쓰면 오차가 생기기때문에 오차를 최소화하기 위한 코드를 작성했습니다.
gcc명령어로 sss.c를 실행파일 sss로 만들어줍시다.
./[실행파일명] [환경변수명] /home/level12/attackme
를 입력해 환경변수의 주소를 얻어옵니다.
이제 268(buffer+dummy+SEP)만큼 null값을 채워준 후 만들어준 환경변수의 주소를 넣으면 됩니다.
그러나 gets()함수로 작성되었기 때문에 cat명령과 공격문을 괄호로 묶고(두 가지 명령이기에 ;(세미콜론) 사용) 파이프로 cat의 출력을 attackme의 표준 입력으로 바꿔주면 됩니다.