728x90

password 파일의 fd를 fd변수에 저장시킨다.

이후 fd에 해당하는 파일을 read를 통해서 읽어들여 pw_buf에 저장한다.

pw_buf2 변수에는 직접 데이터를 입력시켜준다.  pw_buf2 값을 xor 연산 한값을 pw_buf와 비교하여 문자열이 일치하면 flag를 보여준다.



pw_buf2를 XOR 연산해주는 xor 함수입니다. 각각 문자열들을 XORKEY 값인 1 을 이용해서 XOR연산 해줍니다.




해당문제의 취약점은 연산자 우선순위를 이용한 것이다.

>, < 가 = 연산보다 우선순위로 연산을 하기 때문에 빨간색 상자

open("/home/mistake/password".0,RDONLY,0400)< 0 의 연산의 경우 

fd를 반환하는  open 함수에서 음수를 반환하지 않으므로 false 결과가 나온다.. false == 0

이후 fd에 해당 연산의 결과값인 0이 들어가게 되고


노란색 상자의 read함수의 fd에 0이 설정되어있기 때문에 우리가 원하는값을 입력시켜줄 수 있다. pw_buf 위치에

PW_LEN의 값은 10 이기때문에 10만큼 입력을 해줄 수 있다. 


분석한것을 정리해보면

pw_buf 값 입력가능

pw_buf2값 입력가능

pw_buf2 값을 1과 xor 연산한 값이 같으면 플래그를 준다.

입력 사이즈는 10


xor 연산은 두개의 비트가 다르면 1 이 나오고 같으면 0을 출력해준다.

그로므로 pw_buf의 값엔 1111111111을 입력해주고

xor 연산을 하는 pw_buf2에는 0000000000을 입력해주어


xor 연산후 1111111111이 나오게 한다.



728x90

'Wargame_writeup > Pwnable.kr' 카테고리의 다른 글

blackjack  (0) 2018.12.19
shellshock  (0) 2018.12.19
flag  (0) 2018.12.19
bof  (0) 2018.12.19
collision  (0) 2018.12.19

+ Recent posts