이번에 풀어본 문제는 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 |