본문 바로가기

해킹공부/pwnable.kr

mistake

뭔가 실수를 했는갑다.

hint : operator priority

 

 

뭘 어쩌란건지 한참 보다가 힌트에서 힌트를 얻고( 역시 문제를 잘 봐야되 ) 연산자 위주로 살펴보았다.

if( fd=open("/home/mistake/password",O_RDONLY,0400) < 0 )

보통은

if( ( fd=open("/home/mistake/password",O_RDONLY,0400) ) < 0 )

이렇게 한다는걸 몇번이나 지나치다 if((len=read())>0) 이걸 보고 알았다.

 

 

 

연산 순서를 찾아보니 대입연산자가 비교연산자보다 순위가 뒤인걸 알아냈다.

즉 '>'연산을 '='연산보다 먼저 수행하는 것이다.

open()함수는 파일을 성공적으로 열면 file descriptor 번호를 반환한다.

이때 0,1,2는 각각 stdin, stdout, stderr에 할당되어있으니 항상 3이상의 값을 반환한다.

즉 open("/home/mistake/password",O_RDONLY,0400) < 0 이 연산은 false의 의미로 0을 반환하고 fd엔 0이 입력 된다.

이 때 file desciptor는 stdin이므로 pw_buf와 pw_buf2 모두 stdin으로 값을 입력받는다.

 

 

pw_buf2에 사용한 xor함수이다. 똑같은 test code를 만들어 임의의 10byte를 넣어보자.

 

 

pw_buf엔 0325403254를, pw_buf2엔 1234512345를 입력하면 flag를 확인할 수 있다.

 

1점짜리 문제였지만 나도 자주하는 실수로 이렇게 flag가 털리는 걸 보니 뭔가 묘했다.

'해킹공부 > pwnable.kr' 카테고리의 다른 글

passcode  (0) 2017.08.30
lotto  (0) 2017.08.30
random  (0) 2017.08.30
flag  (0) 2017.08.30
bof  (0) 2017.08.29