System Hacking

Double Staged FSB

jir4vvit 2021. 5. 30. 14:13

이 문제 풀다가 첨으로 봄


FSB

FSB는 스택의 값을 조작하여 원하는 결과가 나타도록 공격하는 방법이다.

지역변수(buffer)가 선언되어 있고, 이 값을 쓰기도 가능하며, 출력도 가능한데, 출력을 할 때 포맷스트링을 지정해주지 않아 발생하는 취약점이다.

 

FSB는 %p 등을 이용하여 스택의 값을 엿볼수도 있고, %n을 이용하여 원하는 스택 위치에 값을 쓰는 것도 가능하다.

 

보통 exploit을 하려면, 변조하고 싶은 주소(got)를 넣고 해당 값이 나오는 곳에 %n 포맷스트링을 이용하여 실행하고 싶은 주소를 넣는 방법을 쓴다.

 


하지만 어떤 변수를 printf로 출력을 하는데, 그 변수가 지역변수(buffer)가 아닌 전역변수로 선언이 되었다면 어떻게 될까? (Double Staged FSB)

기존 FSB취약점은 스택을 컨트롤 가능한데,,, 

 

이 Double Staged FSB는 전역변수에서 입력을 받아 스택을 컨트롤 할 수 없는 상황이다.

Double Staged FSB

name에다가 원하는 got에 원하는 주소 쓰는거 payload를 넣었는데, 스택이 컨트롤되지 않는 모습을 확인할 수 있다...

 

Double Staged FSB

  • 전역변수에서 입력을 받아 스택을 컨트롤할 수 없는 불가능한 상황일때
  • exploit 방법 : 스택에 존재하는 스택 포인터를 이용하여 포인터가 가르키는 주소를 변조하고 싶은 주소(got)로 바꾸고 해당 값이 나오는 곳에 (똑같이) %n 포맷스트링을 이용하여 실행하고 싶은 주소를 넣는다.
  • 그래서 FSB 한번만으로 익스는 불가능하다.
  • 적어도 두번,, 첫번째는 변조를 원하는 함수 got를 스택포인터가 가리키는 곳에 넣고 두번째는 원하는 함수 got 위치에 실행되었으면 좋겠는 주소를 써야 한다.

1. %6$n으로 저 0x~240 주소에다가 puts@got 쓰기

2. %36$n으로 puts@got에다가 win주소 쓰기

'System Hacking' 카테고리의 다른 글

type confusion  (0) 2021.06.28
main 함수가 호출, 종료되는 과정(.init_array&.fini_array)  (0) 2021.06.03
integer overflow 2  (0) 2021.05.19
Sigreturn-oriented programming (SROP)  (0) 2021.05.10
Stack Pivoting (스택 피봇팅)  (0) 2021.05.03