포맷 스트링 버그(2)
-
FSB 문제 풀이 (2)
- 소스코드 분석 0x20 크기의 char형 배열 format이 선언되어있습니다. 이 배열에 길이 10만큼 입력을 받고, printf() 함수로 출력합니다. 그런데, 여기서 printf() 함수에 format string이 없으니 FSB 취약점이 발생합니다. 그리고 read() 함수로 다시 입력을 받습니다. 소스코드 분석은 이 정도면 된 것 같습니다. 이번 문제는 저번 문제와는 다르게 Stack Canary 보호 기법이 걸려있습니다. 이에 초점을 맞춰서 아이디어를 짜보겠습니다. - RSI, RDX, RCX, R8, R9 5개 + ret 1개 + sfp 직전 (0x20/8) + sfp 1개 = 11개 -> return address값 leak - RSI, RDX, RCX, R8, R9 5개 + Canary..
2021.08.03 -
FSB 문제 풀이 (1)
- 소스코드 분석 우선 format이라는 크기 0x10 크기의 char형 배열이 있습니다. 이 배열에 입력을 받고, printf() 함수로 출력을 해준 뒤에 다시 read로 입력을 받습니다. 그런데 여기서 printf() 함수를 보면 포맷 스트링이 없는 것을 볼 수 있습니다. 포맷 스트링이 없다는 건 FSB 취약점이 발생한다는 거죠. 소스코드 자체는 간단해서 이 정도만 분석해도 될 것 같습니다. 이제 return address에 있는 값을 leak 해보겠습니다. 우선 레지스터의 개수는 RSI, RDX, RCX, R8, R9 이렇게 5개가 있습니다. 여기에 ret의 위치를 1개 더하면 6이 됩니다. 그리고 sfp 직전까지 가야 하니 6에 (0x10/8)을 더합니다. 그러면 8이 되고, 거기에 sfp의 크기..
2021.08.01