푸르미르

pwnable.kr 9. mistake 본문

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 :(

 

 

 

'SECURITY > pwnable' 카테고리의 다른 글

pwnable.kr 11. coin1  (0) 2021.05.05
pwnable.kr 10. shellshock  (0) 2021.05.05
pwnable.kr 8. leg  (0) 2021.04.28
pwnable.kr 7. input  (0) 2021.04.06
pwnable.kr 6.random  (0) 2021.04.06