[Hackerschool FTZ] level 20 - Fomat String Buffer Overflow
by jennysgap[Hackerschool FTZ] level 20 - Fomat String Buffer Overflow
Password: we are just regular guys
setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의 호출을 임의의 쉘코드 주소로 변경하는 것이 이 문제의 핵심이다.
즉, 임의의 쉘코드 등록과 실행 방법을 이해하고 있는지에 관한 문제이다
printf(bleh); 포멧스트링 취약점이 있는 코드
printf는 다양한 포맷문자형이 있다.
포맷을 정하지 않고 그냥 문자를 출력할 때 생기는 문제가 포맷스트링 취약점이다.
※ 포맷문자열은 다음 주소글짜를 표기하는데, 스택의 현재위치($esp)에서 포맷(%x)을 만나게 되면 무조건 4만큼 이동하게 된다.
4byte씩 3번 총 12byte를 넘어갔더니 버퍼의 시작지점이라는 것을 알게 되었다.
※ 이동을 통해서 버퍼의 첫 위치를 알아내는 것이 매우 중요하다.
AAAA낮은주소BBBB높은주소%8x%8x%8x | %64128c%n%50519c%n
버퍼의시작점(현재esp의 위치: AAAA)
64128: 앞에 AAAA낮은주소BBBB높은주소(40)을 찍고 64128개의 문자를 찍어라
%c: 4byte 이동 (현재위치: 낮은주소)
%n: 지금까지 출력된 모든 문자 숫자 (40+64128=64168 값을 낮은주소가 가리키고 있는 주소에 쓰라!
50519: 앞에 출력된 값에다가 50519개의 문자를 더해 찍어라
%c: 4byte 이동 (현재위치: 높은주소)
%n: 지금까지 출력된 모든 문자 40+64128+50519 값을 높은주소가 가리키고 있는 주소에 쓰라!
RET처럼 점핑 시킬 곳이 어딘가???
덮어쓸 주소 심볼 삭제 (.dtors값으로 컴파일시 제거)
# nm 명령어는 오브젝트 파일, 라이브러리, 프로그램에 쓰인 함수가 어떤 것인지 확인할 때 유용하다.
여기서 심볼은 열려 있는 라이브러리에서 실제로 호출하는 함수의 이름이다.
참고 네이버 백과사전
# objdump -h attackme
level11 Password: what!@#$?
※ 문제 푸는 순서와 개념을 정확히 이해하고 공식을 외워서 문제를 풀어도 된다.
'BOX' 카테고리의 다른 글
[webhacking.kr] Challenge 4 - Base64, SHA1 (0) | 2019.06.20 |
---|---|
[webhacking.kr] Challenge 1 - Easy (0) | 2019.06.20 |
[Hackerschool FTZ] OPCODE 만들기 - Setreuid (0) | 2019.06.20 |
[Hackerschool FTZ] OPCODE 만들기 - shellcode (0) | 2019.06.20 |
[Hackerschool FTZ] level 19 - Setreuid Shellcode (0) | 2019.06.20 |
블로그의 정보
jennysgap
jennysgap