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
46
47
48
49
50
51
#include <stdio.h>
#include <fcntl.h>
 
#define PW_LEN 10
#define XORKEY 1
 
void xor(char* s, int len){
    int i;
    for(i=0; i<len; i++){
        s[i] ^= XORKEY;
    }
}
 
int main(int argc, char* argv[]){
    
    int fd;
    if(fd=open("/home/mistake/password",O_RDONLY,0400< 0){
        printf("can't open password %d\n", fd);
        return 0;
    }
 
    printf("do not bruteforce...\n");
    sleep(time(0)%20);
 
    char pw_buf[PW_LEN+1];
    int len;
    if(!(len=read(fd,pw_buf,PW_LEN) > 0)){
        printf("read error\n");
        close(fd);
        return 0;        
    }
 
    char pw_buf2[PW_LEN+1];
    printf("input password : ");
    scanf("%10s", pw_buf2);
 
    // xor your input
    xor(pw_buf2, 10);
 
    if(!strncmp(pw_buf, pw_buf2, PW_LEN)){
        printf("Password OK\n");
        system("/bin/cat flag\n");
    }
    else{
        printf("Wrong Password\n");
    }
 
    close(fd);
    return 0;
}
 


문제의 힌트는 연산자 우선순위
if(fd=open("/home/mistake/password",O_RDONLY,0400< 0)
open()함수에서 파일 열람이 정상적으로 수행되면 양수를 반환, 실패 시 -1을 반환한다. 
정상적으로 파일을 열기가 실행 되어 양의 정수가 나오고 양의 정수가 0보다 작은 것은 False이므로 fd에는 0이 들어감 

if(!(len=read(fd,pw_buf,PW_LEN) > 0))
read()의 fd는 0으로 인식되므로 STDIN으로 입력받게 됨 


C 연산자의 우선 순위 및 결합성

Symbol1연산 형식결합성
[ ] ( ) . –>후위 ++ 및 후위 ––왼쪽에서 오른쪽
전위 ++ 및 전위 –– sizeof & * + – ~ !단항오른쪽에서 왼쪽
형식 캐스팅단항오른쪽에서 왼쪽
* / %곱하기왼쪽에서 오른쪽
+ –더하기왼쪽에서 오른쪽
<< >>비트 시프트왼쪽에서 오른쪽
< > <= >=관계왼쪽에서 오른쪽
== !=같음왼쪽에서 오른쪽
&비트 AND왼쪽에서 오른쪽
^비트 제외 OR왼쪽에서 오른쪽
|비트 포함 OR왼쪽에서 오른쪽
&&논리 AND왼쪽에서 오른쪽
&#124;&#124;논리 OR왼쪽에서 오른쪽
? :조건식오른쪽에서 왼쪽
= *= /= %=

 += –= <<= >>=&=

 ^= |=
단순 및 복합 할당2오른쪽에서 왼쪽
,순차적 계산왼쪽에서 오른쪽


mistake@ubuntu:~$ ./mistake
do not bruteforce...
0000000000
input password : 1111111111
Password OK
Mommy, the operator priority always confuses me :(



'WarGame > pwnable.kr' 카테고리의 다른 글

Shellshock  (0) 2016.12.11
input  (0) 2016.12.03
random  (0) 2016.11.27
passcode  (0) 2016.11.27
flag  (0) 2016.11.27

+ Recent posts