-
[Pwnkr] Mistake Write-up표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 1. 23:30
이번 문제는 Mistake 풀다보니까 풀려버린문제다;;
우선 코드를 보도록 하자.
파란상자는 주어진값들과 입력받은 값을 XOR연산하는 함수가 정의된 내용이고
빨간상자는 이상하다고 느껴서 표시를 해두었다.
첫 번째 빨간상자를 보면 open을 기준으로 양쪽에 " = " 와 " < " 가 있다.
두 번째 빨간상자 역시 read를 기준으로 양쪽에 " = " 와 " > " 가 있다.
흠.. 여기서 힌트를 떠올려 보게 되었다.
operator priority ??? 연산자 우선순위?? 힌트를 통해 연산자 우선순위에
대한 문제라고 예상할 수 있었다. 이 문제에서 중요한 것은 우선순위이다.
" 비교연산자가 대입연산자보다 우선순위가 높다!! "
첫 번째 빨간상자의 if문을 보면 password파일이 저 경로에 있기 때문에
양수값을 반환하고 양수 < 0을 진행하면 당연히 거짓이다.
그러므로 fd에는 거짓이 들어가게되고 if문은 실행되지않을 것이다.
다음에 나오는 if문을 보자.
입력을 하는 부분인데 fd=0이고 pw_buf는 우리가 입력할 수 있는 공간이다.
PW_LEN은 10으로 선언되어 있다. 이 역시 read 함수가 실행되면 반환 값으로
입력한 바이트의 수를 반환할 것임으로 0보다 크다. 반환된 바이트 수 > 0은
참이므로 len의 값은 참인 1이 될 것이다. 참값에 !이므로 거짓이된다.
그러므로 두 번째 if문도 통과하게된다.
이제 우리가 입력할 수 있는 나머지 버퍼인 pw_buf2의 값들을 1과 XOR해서
나온 값이 이전에 입력한 pw_buf와 같으면 flag를 볼 수 있다.
나는 pw_buf에 "cccccccccc"를 넣고 그것을 XOR연산한
값 "bbbbbbbbbb"을 pw_buf2에 넣어주었다.
Password OK라는 문자열과 같이 FLAG가 튀어나왔다~
반응형'표튜터와 함께하는 Pwnable > Pwnable.kr Write-up' 카테고리의 다른 글
[Pwnkr] Leg Write-up (0) 2019.04.02 [Pwnkr] Shellshock Write-up (0) 2019.04.01 [Pwnkr] Random Write-up (0) 2019.04.01 [Pwnkr] Passcode Write-up (0) 2019.03.31 [Pwnkr] Horcruxes -> Write-up (0) 2019.03.29 댓글