포맷스트링버그 취약점이 있는 프로그램입니다.
readfile로 flag.txt를 읽고 strncpy로 저장하는 것을 볼 수있습니다. 저장된 공간은 0x804b0c0 바이너리에 저장된 것을 볼수 있습니다.
클라이언트측에서 %p %p %p를 입력하니 스택에 쌓여있던 주소가 출력되었습니다. 앞에서 출력 형식을 지정해주면 그 뒤에있는 인자들이 1대1 대응으로 해당 값이 출력됩니다. 포맷스트링에서 형식 인자 사이에 [숫자$]을 입력하면 출력될 인자에서부터 숫자만큼 떨어져있는 값이 출력됩니다.
이게 포맷스트링버그인데, 포맷스트링 버그를 이용하여 바이너리에 박혀있는 flag.txt를 읽어오면 됩니다.
알고 있어야 할 정보는 flag.txt가 저장된 위치와, 출력하려는 스택의 위치인데, flag.txt저장위치는 위에서 봤듯이 0x804b0c0 이고 출력하려는 스택 위치 계산은 아래와 같이 하면 됩니다.
([값이 있는 BUF] - [현재 스택위치]) / 4, 위의 이미지를 예로 들면 ([0xbffff52c] - [0xbffff104])/4 = 266이 됩니다. 즉, 출력할 값은 266번째 뒤에 있다고 보시면 되고 최종 payload는 다음과 같습니다. 호출하고자하는 주소를 먼저 buf에 입력하고 %265$s로 다시한번 buf를 출력하면 끝!!!
'Security > [게임] CTF 풀이' 카테고리의 다른 글
[Reversing] DEFKTHON 2014 Reversing100 (0) | 2014.03.04 |
---|---|
[MISC] DEFKTHON 2014 MISC200 (0) | 2014.03.04 |
[exploit] Sharif CTF 2013 exploiting 100 (0) | 2014.02.27 |
[exploit] CODEGATE2014 4stone writeup (0) | 2014.02.26 |
[풀이모음]CODEGATE2014 writeup (0) | 2014.02.25 |