SECURITY/pwnable
pwnable.kr 9. mistake
((•_•))
2021. 4. 28. 16:10
mistake.c 코드를 보자.
main함수에서는 먼저 file discriptor로 보이는 변수를 선언해주고,
open 함수의 반환값인 fd와 0을 비교하는 것 같다. 하지만 연산자 우선순위로 인해
open함수의 return값과 0을 비교한 뒤, 이 결과를 고려한 값이 fd에 들어가는 것으로 된다. 왜냐하면 비교연산자인 '<'
가 산술연산자인 '=' 보다 순위가 높기 때문이다. 그렇다면 open함수에서 파일이 정상적으로 열린다면 양수를 반환하
므로 0보다 크게되어 fd에는 false 즉 0이 들어가게된다.
두번째 if문에서는 현재 fd에는 위에서의 코드에 의해 0이 들어가 있다.
fd가 0이면 stdin을 의미하여 입력값을 받는다.
이 입력값은 pw_buf에 들어가게 된다.
xor함수가 pw_buf2와 10을 매개변수로 실행이 된다.
마지막 if문에서는 pw_buf의 내용과 pw_buf2의 내용이 같은지 확인한다.
xor함수에서는 len만큼의 배열에 xor 연산값의 결과를 넣는다.
pw_buf와 pw_buf2에 xor연산이 되게 다르게 집어넣어주면 된다.
Mommy, the operator priority always confuses me :(