tmxklab
[pwnable.kr] passcode 본문
1. 문제 확인
[ passcode.c ]
#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;
}
음 passcode1에 338150, passcod2에 13371337을 넣으면 될 것 같다.
2. 접근 방법
근데 passcode1에 입력할 때 segmetation fault가 발생한다.
뭐지.. 궁금해서 걍 ftp로 passcode다운받아서 확인ㄱㄱ
보니깐 passcode1에 puts()의 코드영역 주소 값이 들어있다
아 생각해보니깐 scanf에서 받을 때 변수 앞에"&"안 붙였음. 그래서 세그먼테이션 폴트가 뜸
돌아와서 처음 welcome함수에서 name값을 입력받을 때 최대 100byte입력받을 수 있다. 꽉 채워서 입력을 받고 디버깅을 하다보니
스택에 있는 passcode1의 값을 변경할 수 있다.
즉, name에 96byte는 더미 나머지 4byte는 login()에서 첫 번째 scanf의 주소 값이 된다. 그러면 scanf("%d", passcode1);에서 passcode1은 값이 됨
-> 그러니깐 aaw가 쌉가능하다.
3. 문제 풀이
흠 그럼 어느 주소에다가 어떤 값을 넣어야 할까???
참고로 login()의 두 번째 scanf에서도 passcode2변수 앞에 "&"을 지정하지 않았으니 어떻게 name값 주작해서 첫 번째 scanf를 통과해도 두 번째 scanf를 호출하지 않고 통과해야 한다.
Partial RELRO이므로 GOT Overwrite가 쌉가능하다.
두 번째 scanf가 실행하기 전에 printf가 실행되니깐 printf@got Overwrite를 하자. 그리고 원래 목적은 system("/bin/cat flag");을 실행시키는거니깐 printf@got에 login()의 코드영역에 있는 system("/bin/cat flag")를 실행시키는 주소 값을 넣자
printf@got : 0x0804a000
text영역 주소 : 0x080485e3
- name에 입력 받는 값 = "A"*96 + \x00\xa0\x04\x08
- passcode1에 입력 받는 값 = \xe3\x85\x04\x08(134,514,147)
참고로 첫 번째 입력 값은 python사용해서 헥사 값 넘겨주면 되고 두 번째 passcode1에 입력 받는 값은 int형이니깐 134,514,147(0x80485e3)을 입력하면 됨
4. 몰랐던 개념
'War Game > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] input (0) | 2020.11.20 |
---|---|
[pwnable.kr] random (0) | 2020.11.20 |
[pwnable.kr] flag (0) | 2020.11.20 |
[pwnable.kr] bof (0) | 2020.11.20 |
[pwnable.kr] collison (0) | 2020.11.20 |