«   2024/03   »
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
관리 메뉴

공부를 합니다.

[pwnable.kr] [bof] bof sol 본문

공부

[pwnable.kr] [bof] bof sol

sher1ock. 2016. 11. 18. 01:30

pwnable.kr 의 bof[5pt] 문제를 풀어봤다.



==============================================================

Nana told me that buffer overflow is one of the most common software vulnerability. 

Is that true?

==============================================================



bof가 가장 일반적인 s/w 취약점이라고 Nana가 말하고 있다.


5점짜리 문제니 후딱 풀어봤다.


우선 문제 파일을 다운받고 실행을 시켜봤다.



bof란 간단하게 설명하자면 말 그대로 버퍼 오버플로우, 버퍼를 넘치게 하는 기법을 말한다.


대부분 선언된 버퍼를 넘칠수 있게 한다거나, 입력을 받는데 버퍼를 지정을 안해준다거나 하는 취약점을 가지고있다.



보시다시피 overflow me : 이후 입력을 받고나서 Nah..을 출력후 프로그램이 종료된다.



주어진 bof.c파일을 보면 gets를 이용해 입력을 받는다. 


gets함수는 '\n'을 입력받기 전까지 1줄로 인식하기 때문에 bof에 매우 취약하다.


우선 gdb 로 보호기법을 체크해봤다.



까나리, NX, PIE가 걸려있었다. 


CANARY 기법이란 CANARY값을 저장하여 함수가 종료될때 저장된 값과 비교를 하여 값이 다르면


예외처리로 인식해서 프로그램(함수)를 종료시켜버리는 보호기법이다.


NX기법은 스택에서 쉘코드가 실행못하도록 막는 기법이다.


PIE 는 바이너리영역을 랜덤화하는 보호기법으로 ASLR과 비슷하다. 


생각보다 많은 보호 기법이 걸려있어서 당황했지만 분석을 해보았다.




찬찬히 훑어보니 보호기법들과는 별개로 문제가 풀릴것 같았다.


왜냐면 까나리를 체크하기 전에 system함수를 호출할 수 있고 <func + 40> cmp문 조건만 맞으면 system함수로 갈 수 있다.


훼이크였다. (사실 훼이큰줄 모르고있다가 문제를 거의 다풀고 보호기법을 확인했다....ㅎ...)

문제를 받자마자 보호기법을 확인해야하는 습관을 들여야 하는데 아직 멀었다..ㅎ


무튼 그래서 다시 문제를 보면


<gets> 함수를 실행시키기 위해 buf를 할당하는데  


lea     eax, [ebp-0x2c]


0x2c = 44


즉 44 만큼 공간이 생긴다.


그렇다면 


44 (dummy) + 4 (stp) + 4 (ret) + 원하는 (0xcafebabe) 를 넣어주면 조건문을 만족하므로 system함수로 가게된다.


[ sol.py]




[ flag ]



======================================================================================


여기서 sol.py 을 작성할 때 실수한 부분이 있었는데


nc pwnable.kr 9000 을 하면 바로 입력하게끔 되어있다. (값을 입력하고 엔터를 누르면 overflow:, Nah... 가 연달아 출력이 된다.)


로컬에서 ./bof를 하게되면 'overflow : '까지 출력이 되고 입력을 받는데


로컬에서 처럼 받고 입력을 해야하는 줄 알고 


s.sendline(' \n ')

s.recvunril( ' : ') 

을 하고 sendline()을 했는데 이렇게 해버리면 아무리 답을 입력해도 '\n' 가 들어가기 때문에 넘어가지 않는다.


앞으로 문제풀땐 서버로 인증을 하는거면 서버환경과 똑같이 생각하고 코드를 짜야겠다고 느꼈다.


'공부' 카테고리의 다른 글

[2016 securityfest] flagship  (0) 2016.11.18
[2016 tmctf] simple_bof  (0) 2016.11.18
[공부] [메모] 문제들을 풀면서 익힌 것들  (0) 2016.11.17
[poxx2016] boffee_write up  (0) 2016.10.29
[공부] 인투르 2  (0) 2016.10.29
Comments