Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Un_Woo

pwnable.kr mistake 본문

System/pwnable.kr

pwnable.kr mistake

언우s 2018. 4. 4. 10:19

mistake

문제를 보면 무엇인가 실수를 했고 연산자 우선순위를 힌트로 줬다.

일단 실행을 해보니 두 번 입력을 받는 것을 알 수가 있다.

그리고 gdb에서도 실행시켜 봤는데 open 함수가 실패하여 -1을 리턴한 것으로 보인다.

그런데 can't open password 뒤에 1이 있는 것이 이해가 되지 않았다.

코드를 보면 그 뒤에 있어야 하는 것은 fd의 값인 -1이라고 생각했기 때문이다.

하지만 왜 1이 나오는지 이해를 못 하고 있었던 중 힌트였던 연산자 우선순위가 생각나 구글링을 해봤다.

그리고 코드에서 문자가 있는 부분은if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0)이라고 생각했으므로 이 코드에 쓰인 = <만을 봤다.

그 결과, < =보다 우선순위가 높다는 것을 알 수 있었다.

그러므로 if((fd=open("/home/mistake/password",O_RDONLY,0400)) < 0)라고 써야했던 것을 실수해서 저렇게 썼다는 것을 알 수 있었다.

이 정보들을 조합하면 open이 실패해서 -1이 리턴되었고 그게 0보다 작으므로 true(=1)이 리턴되어 fd 1이 된 것이다.

그렇다면 open이 성공했을 경우에는 3이 리턴될텐데 그게 0보다 크므로 false(=0)이 리턴되어 fd 0이 된다.

그러므로 read(fd,pw_buf,PW_LEN) read(0,pw_buf,10)이 되고 여기서 pw_buf에 입력을 할 수 있다.

결론적으로 pw_buf pw_buf2에 전부 입력을 하는 것이다.

그리고 pw_buf2 1 xor연산하는데

xor연산한 값이 pw_buf와 같아야 한다

1 b xor연산한 값이 c이므로 pw_buf에는 bbbbbbbbbb pw_buf2에는 cccccccccc를 입력했다.

'System > pwnable.kr' 카테고리의 다른 글

pwnable.kr cmd1  (0) 2018.04.04
pwnable.kr lotto  (0) 2018.04.04
pwnable.kr random  (0) 2018.04.04
pwnable.kr passcode  (0) 2018.04.04
pwnable.kr flag  (0) 2018.04.04
Comments