ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • pwnable.kr mistake
    Pwnable/Pwnable.kr 2017. 2. 27. 01:46

    문제를 보면 hint : operator priority(우선순위) 가 있다.  




    우선순위를 찾아보면 알겠지만 fd 변수를 다르는 부분에서 오류가 생긴다. 바로 우선순위가 1.< 2. =  라는 뜻이다. 

    원래 저 소스를 짤떄 바라던 것은 open 함수로 파일을 열고 그 것의 파일디스크립터(반환값) 을 fd에 넣고 그 값이 0 보다 작은지 확인 하기위한것이었을것이다. 


    그래서 open 함수는 오류가 나지 않고 OPEN이 성공하면 음수가아닌 1234~~.. 처럼 양수로 되는데 그 양수는 0보다 작지 않기 떄문에 FALSE(0) 이 된다. 그럼 그 FALSE 값인 0이 FD변수에 들어가게 된다.


    그래서 FD(파일디스크립터) 는 0이된다.


    파일 디스크립터는 0입력 1출력 2오류 3.. 4소켓 이런식으로 된다. 


    그럼 len=read(0,pw_buf,PW_LEN) <- 이 부분에서 fd값이 0(입력) 이기 때문에 PW_BUF에 값을 입력하게된다.




    그 후에 pw_buf2에도 입력할 수 있기때문에 pw_buf, pw_buf2 둘다 입력이 가능하다 !



    이 사진을 볼면 아시다시피 안된다 .. 그 이유는 두 가지가 있다. 소스를 보면 pw_buf 와 pw_buf2는 초기화를 하지 않았기 떄문에 쓰레기값을 가지고 있어서 우리가 넣을 값 10개 + NULL 으로 10개를 채워야한다.


    그리고 두 번쨰로는 xor(pw_buf2,10) ; 이 부분에서 XOR을 해준다.


    조금이라도 멋있게 보이기위해 C언어로 ..


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main()
    {
        char a[] = "값 지움";
     
        for (int i = 0; i < 10; i++)
        {
            printf("%c", a[i] ^= 1);
        }
    }
    cs


    저기서 ^= 1을 하는이유가 


    이 떄문이다. 


    그래서 저 소스를 돌린 후 두 가지 조건을 맞춰주면  플래그가 나온다 !

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

    pwnable.kr blackjack  (0) 2017.03.05
    pwnable.kr dragon  (0) 2017.02.27
    pwnable.kr cmd2  (0) 2017.01.23
    pwnable.kr cmd1  (0) 2017.01.23
    pwnable.kr lotto  (0) 2017.01.23
Designed by Tistory.