PWNABLE 썸네일형 리스트형 [pwnable.kr] PASSCODE pwnable.kr passcode 풀이 2016.08.15. passcode 코드 +) fflush(stdin)? 잔류한 입력 버퍼를 지울 때 사용한다. 예를 들어 무언가를 입력하고 엔터를 쳤으면 이 엔터는 어디 가지 않고 버퍼에 남게 된다. 이런 것들을 청소할 때 쓰는 명령어 여기서는 passcode1을 입력하면 fflush로 stdin에 passcode1에 들어갔던 입력값을 지운다. 일단 코드를 실행시켜 passcode1과 passcode2에 각각 338150, 13371337을 입력해보자 코드대로라면 cat flag를 실행시켜야하지만 세그멘테이션 폴트가 떴다. 그런데 코드를 자세히보니 scanf함수에 &가 없다. ‘&변수’형태가 변수가 들어있는 주소이고 scanf가 이 주소에 들어있는 값을 가지고.. 더보기 [pwnable.kr] FD pwnable.kr fd풀이 2016.08.31. vi fd.c atoi()는 ()안의 문자열에서 정수만 받는건데 예를들어 atoi(2007)이면 2007, atoi(2007start)이면 2007이지만 atoi(start2007)이면 0이다. 문자열에 정수까지만 받는 함수라고 이해하면 될 거 같다. read(fd,buf,32)는 fd 즉 파일디스트립트 값을 읽어서 32byte만큼 읽어 buf에 데이터를 저장한다는 건데 buf와 LETMEWIN을 비교해서 맞아야한다. 우선 0x1234를 십진수로 바꾸면 4660이 나온다. 그래서 일단은 그냥 생각나는대로 페이로드를 작성해서 때려봤는데 이렇게 하는 건 아닌가 싶어서 우선 fd에 대한 정확한 개념이 없어 찾아보았다. fd는 0,1,2로 반환하는데 0은 std.. 더보기 [pwnable.kr] BOF pwnable kr bof 풀이 2016.08.14.SUN bof 코드 main함수를 보면 0xdeadbeef를 func함수로 보내는데 func함수에서는 이를 key로 받는다. 그리고 key와 0xcafebabe값이 같아야 /bin/sh 쉘을 열어 공격성공을 할 수 있는데 우선 코드를 gdb까서 스택에 쌓인 구조를 분석해보자. disas main disas func func함수를 분석해보면 gets함수로 ebp-0x2c부터 ebp+0x8까지 overflowme인자를 받아들이는데 두 주소의 차이는 10진수로 52가 차이나므로 B로 52개를 채우고 key값을 0xcafebabe로 덮으면 /bin/sh쉘을 띄울 수 있을 것이다. flag : daddy, I just pwned a buFFer :) 더보기 이전 1 다음