-
Pwnable.kr mistake 풀이Wargame/Pwnable.kr 2019. 8. 11. 17:05
mistake 풀이입니다.
이번에는 코드가 간결해 보이네요 힌트인 operation priority를 참고해서 main함수의 첫번째 if문을 봅시다
음 보니까 왜 힌트가 연산자 우선순위인지 알듯하네요 대충 보면 open("/home/mistake/password",)_RDONLY,0400)의 ㅣ반환값을 fd에 넣은 뒤 이를 0과 비교하는 거 같지만 산술 연산자(=)는 비교 연산자(<)보다 우선순위가 낮습니다
고로 open("/home/mistake/password",O_RDONLY,0400) < 0 이 과정을 거친 반환값이 fd에 대입된다는 뜻입니다
저 과정은 잘 실행되므로 양수를 반환한다(파일이 잘 열림). 1 < 0은 false이므로 fd = 0이 들어감
두번째 if문을 보겠습니다. if(!(len = read(fd, pw_buf, PW_LEN) > 0)) 에서 read함수는 첫번째 인자값으로 fd를 읽는데, 이 때 우리는 fd가 0임을 알고 있고 read함수에서 fd=0 -> stdin이네요. 입력값은 pw_buf에 들어가므로 pw_buf은 우리 맘대로 정할 수 있습니다.
아 그 다음부분 보니까 pw_buf2도 우리 맘대로 할 수 있군요
마지막에는 xor을 썼죠? xor은 둘중 하나가 참일때 true를 반환하니까 하나나는 0으로 10글자를, 하나는 1로 10글자 넣어보겠습니다.
음 그러면 짜잔하고 플래그가 간단히 나오는군요
2019,8,11
'Wargame > Pwnable.kr' 카테고리의 다른 글
Pwnable.kr Blackjack 풀이 (0) 2019.08.31 Pwnable.kr shellshock 풀이 (0) 2019.08.14 Pwnable.kr leg 풀이 (0) 2019.08.07 Pwnable.kr input 풀이 (0) 2019.08.05 Pwnable.kr random 풀이 (0) 2019.07.22