본문 바로가기

PWNABLE/pwnable.kr

[pwnable.kr] PASSCODE

pwnable.kr passcode 풀이

2016.08.15.

 

passcode 코드


+) fflush(stdin)?

        잔류한 입력 버퍼를 지울 때 사용한다. 예를 들어 무언가를 입력하고 엔터를 쳤으면 이 엔터는 어디 가지 않고 버퍼에 남게 된다. 이런 것들을         청소할 때 쓰는 명령어

 여기서는 passcode1을 입력하면 fflushstdinpasscode1에 들어갔던 입력값을 지운다.

 

일단 코드를 실행시켜 passcode1passcode2에 각각 338150, 13371337을 입력해보자



코드대로라면 cat flag를 실행시켜야하지만 세그멘테이션 폴트가 떴다.

그런데 코드를 자세히보니 scanf함수에 &가 없다. ‘&변수형태가 변수가 들어있는 주소이고 scanf가 이 주소에 들어있는 값을 가지고온다고 알고 있는데 &가 없으면 변수자체를 주소로 인식하여 여기에 입력한 값을 가져온다. 변수자체가 주소이므로 passcode에 숫자 입력 시 세그멘테이션 폴트

따라서 name도 주소

변수자체가 주소가 되므로 passcode1passcode2338150, 13371337과 비교하는 것은 안된다. 그래서 여기를 넘어가야하는데 여기서 plt,got를 사용한다.


name변수는 ebp-0x70부터 받는다.


passcode1변수는 ebp-0x10부터 받는다.

실제 name변수는 96byte입력 ( 0x70-0x10 )

 

+) PLT, GOT?

    http://expointer.tistory.com/13

    printfPLT주소는 GOT영역의 주소를 가리키고 있다. 그리고 다시 PLT 영역으로 돌아오는데 dl_runtime_resolver( got의 위치에 함수의 주소     찾아 저장 )로 점프

 

(\x90*96)+(GOT@printf or GOT@exit)+system(“/bin/cat flag”)로 구성

                    →got주소를 부름으로써 scanf의 변수로 들어가 passcode1대신 입력받음


plt의 주소 : 0x08048410                                 got의 주소 : 0x08049ff4

 

pltgot가 어떻게 들어가 있나 확인


login함수를 통해 “/bin/cat flag”의 주소를 확인한다.


0x080485e3


Flag : Sorry mom.. I got confused about scanf usage :(

 

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

[pwnable.kr] FD  (0) 2016.09.27
[pwnable.kr] BOF  (0) 2016.09.27