if문 안에서 잘못된 점을 한가지 찾을 수 있었다.

open() 함수를 이용하여 파일을 열면 파일이 정상적으로 열리게 되었을 때, 양수를 반환하고 정상적이지 않으면 -1을 반환한다.

파일이 올바른 경로에 존재 하여 정상적으로 열린다고 볼 수 있다. 따라서 open의 리턴값은 양수가 된다. 그렇지만 연산자인 = 보다 < 의 우선순위가 더 높기 때문에 양수 < 0 의 결과값인 false 이고, fd에는 0(false)이 들어가게 된다.


fd가 0이기 때문에 표준입력을 read하게되고 PW_LEN이 10이기 때문에 열자를 맞춰넣으면 

input password : 라는 문구와 함께 입력을 받는다.


입력을 받고 그 값과 1과 xor 연산을 하게된다.

그 결과와 이전에 입력받은 pw_buf가 같으면 flag가 출력된다.


random 문제 xor특징 참고 : http://oiehso0.tistory.com/55?category=639405



'System Hacking > pwable.kr' 카테고리의 다른 글

10.pwnable shellshock  (0) 2018.02.22
07.pwnable input  (0) 2018.02.19
12.Pwnable blackjack  (0) 2018.02.16
08.Pwnable leg  (0) 2018.02.15
06.Pwnable random  (0) 2018.02.15


난수를 발생하는 rand()함수를 이용하여 그 값과 scanf로 입력받은 key값과 xor연산을 한다 그값이 0xdeadbeef라면 flag값이 출력된다.



어떤 난수가 나오는지 구하기 위해 cmp하는 부분에 bp를 걸고 eax값을 확인해본다.



난수값이 0x6b8b4567이라는 것을 알 수 있다.

프로그램을 실행할 때 마다 다른값이 나와야 의미가 있지만 이 프로그램에서는 범위를 설정해 주지 않아서 항상 같은 값이 나온다.


또 한가지

a^b=c

a^c=b

b^c=a

XOR 연산의 특징을 이용하여 0x6b8b4567 ^ 0xdeadbeef = key 값을 구해본다.

0xb526fb88이 나오는데 10진수로 바꿔주고 입력해주면..




'System Hacking > pwable.kr' 카테고리의 다른 글

12.Pwnable blackjack  (0) 2018.02.16
08.Pwnable leg  (0) 2018.02.15
05.Pwnable passcode  (0) 2018.02.15
04.Pwnable flag  (0) 2018.02.13
03.Pwnable bof  (0) 2018.02.13

+ Recent posts