1 분 소요


문제

image-20211225194258595

  • NX 활성화로 쉘코드 삽입은 불가
  • RELRO가 Partial로 GOT Overwrite 가능
    • 함수 호출 시 해당 함수의 주소를 알아와서 쓰기가 가능
    • PLT는 코드, GOT는 주소 값이 저장된 공간



소스코드

image-20211225194618487

  • initialize 함수 : 실행되고 30초 후에 TIME OUT 메시지 출력 후 함수 종료
  • get_shell 함수 : system 명령어로 /bin/sh의 주소 출력
  • main 함수
    • buf에 128byte 할당
    • initialize 함수 실행
    • read 명령어로 buf에 128byte 입력
      • BOF 불가
    • printf로 출력
      • printf(“%s”, &buf)가 아닌 printf(buf)로 FSB 발생
  • 접근
    • buf에 서식 문자를 넣어 FSB를 발생시키고
    • get_shell을 exit(0) 에서 실행되게 해야함
      • exit_got에 get_shell 함수 주소로 Overwrite
  • exit_got 주소와 get_shell 주소를 알아보자



FSB

Format String Bug

서식 문자를 사용하는 함수에서 발생

image-20211225195740754

​ 서식문자

printf()에서 발생

  • 정상적인 사용 : printf(“%s”, “buf”)
  • 잘못된 사용 : printf(buf), printf(&buf)
  • 와 같이 printf()에 문자열로 %s 등과 같은 서식문자가 들어간다면 문자가 아닌 서식 문자로 취급
  • 또한, buf가 문자열이아닌 Format String이라면 buf 값을 문자로 취급하는게 아닌, 서식문자로 취급


서식문자를 만나면 메모리의 다음 4byte 위치를 참조하여 그 서식문자의 기능대로 출력

image-20211225202222850

  • printf(buf) 실행
    • buf 배열을 가리키고 있는 parameter1(buf) 다음 4byte 주소 parameter2(buf)부터 출력



KALI - 주소

image-20211225201455132

  • exit_got 주소 : 0x804a024
  • get_shell 주소 : 0x8048609



KALI - 서식문자열 참조 위치 확인

image-20211225202611809

  • 몇번째에서 참조하는지 확인하기 위해 같은 16진수 서식문자로 입력
  • 1번째에서 aaaa를 인자로 받는 참조 확인



KALI - PAYLOAD

image-20211225235630442

  • pwn 모듈을 사용하기 위해 import
  • 문제 있는 서버로 원격접속하기 위해 remote 클래스 사용
  • exit_GOT 주소를 exit에 작성하고
  • payload 를 작성
    • 구조 : (exit_GOT+2) + (exit_GOT) + “%2044c%1$hn” + “%32261c%2$hn”
    • exit_got 주소를 리틀엔디안 패킹 방식으로 넣어줌
    • %n은 4byte 씩 인자에 write를 해주는데, get_shell 함수의 주소가 134,514,185 으로 %n으로 넘겨주기엔 값이 너무 크기때문에
    • “%2044c%1$hn” + “%32261c%2$hn” 처럼 2byte 씩 나눠 전송하기 위해 %hn(half)를 사용
    • exit_GOT + 2에 0x804(2052)를 넣어주는데 먼저 exit_GOT 주소 작성에 8바이트를 사용했으므로
    • 2044 값을 넣어주고
    • exit_GOT 에는 0x8609에서 0x804(2052)를 뺀 32261를 넣어주면 된다.
  • 2044c , 23361c 에서 c를 사용한 이유는 큰 수 사용시 c를 사용한다.
  • b”%2044c%1$hn%32261c%2$hn”에서 앞의 b는 byte로 변환하기위해 사용한다.



KALI - FLAG

image-20211225235553310

DH{59c4a03eff1e4c10c87ff123fb93d56c}



참조

https://shayete.tistory.com/entry/5-Format-String-Attack-FSB

업데이트: