이번에 풀어본 문제는 mistake!



(mistake 문제)



아래는 문제화면이다.



(mistake 문제화면)



일단 로그인!
소스코드를 살펴보자



(소스코드)



소스코드를 보니 내가 읽을 수 없는 파일을 읽어서 그 값과 내가 입력한 값을 비교하고 있다.
어떻게 맞추지...

그런데 문제 화면에서 진지하게 생각하지말라고 나와있다. 단순한 실수라고
연산자 우선순위 실수?
아무리봐도 특별한 연산자가 없는거 같은데... 괄호를 잘 뒤져봤다.

?!?!?!?


(이상함 발견)



이상함이 발견되었다.
fd에 들어가는 값이 open 이 아니라 bool 연산값?? password 파일의 fd가 0보다는 클테니...
이 비교는 거짓이 되고 고로 fd에는 0이 들어가게 된다..

fd 0은 표준 입력이다.
즉 내가 입력한 표준 입력과 비교하는 것이다. 오케이!

내가 패스워드로 입력한 값을 xor 연산 해주므로 그 함수를 고대로 복붙해서
내가 입력할 것을 넣어서 비교해본다.



(xor)


내가 A 10개를 입력할 것이므로 xor 하면 @ 10개가 된다. 즉 표준입력으로 @ 10개를 입력하고
패스워드로 A 10개를 입력한다.

exploit을 만들어보자.


(exploit 코드)


그 전전 문제에서 표준입력하는 방법을 배워서 여기서 써먹을 수 있었다.

@10개를 입력한 후, A 10개를 입력해준다.! 구분자는 \n 개행으로 하였다.


(문제 해결)



문제해결!


'WarGame > 500 Project' 카테고리의 다른 글

(52/500) pwnable.kr - coin1  (0) 2017.07.12
(51/500) pwnable.kr - shellshock  (0) 2017.07.11
(49/500) pwnable.kr - leg  (0) 2017.07.10
(48/500) pwnable.kr - random  (0) 2017.07.06
(47/500) - pwnable.kr - passcode  (0) 2017.07.06

+ Recent posts