안녕하세요 개인적으로 많이 삽질한 문제였습니다 .. 

goblin의 소스코드입니다 

gets 함수를 쓰고있네요 gets 함수는 엔터를 누를때까지 문자열로 입력을 쭈우욱 받아들여서 
버퍼오버플로우를 만드는 취약점을 가진 함수랍니다 (그래서 fgets를 사용하는것을 권장하죠?)

처음에 생각햇던 페이로드 구성도입니다

A*20(buf+sfp)+4(버퍼 오버 플로우시켜서 리턴주소를 쉘코드의 주소가 담긴부분으로 변경할곳)+B*100(쉘코드를 담기위한부분)+25(쉘코드) 이렇게 생각을 해두었습니다.

<main> push %ebp
<main+1> mov %ebp,%esp
스택 프레임을 설정하였다
<main+3> sub %esp,16
esp에서 16을 뺴줬습니다 [buf를 16만큼 할당]
<main+6> lea %eax , [%ebp-16]
eax에 ebp-16의 주소를 넣어줬습니다 
<main+9> push %eax
스택에 ebp-16의 주소를 넣어줬습니다
<main+10> call 0x804830c <gets>
gets 함수를 호출합니다
<main+15> add %esp,4
gets의 인자값 정리
<main+18> lea %eax, [%ebp-16]
eax에 [%ebp-16]의 주소를 넣어줍니다
<main+21> push %eax
eax를 스택에 넣습니다
<main+22> push 0x8048470
stdin같은 함수겟지요? 넣어줍니다
<main+27> call 0x804833c <printf>
printf 함수를 호출합니다
<main+32> add %esp , 8 
printf의 인자값 정리

gdb로 대강 분석을 해보겠습니다 .
main+3 버퍼의 크기만큼 할당되었군요 
그 후에 main+6 부터 gets함수로 입력을 받은뒤 ebp-16에다가 넣어버리네요 

이번 문제는 삽질을 엄청 많이했습니다...

먼저 브레이크 포인트를 main+15지점에 걸어두었습니다 gets함수가 쓰인 직후죠

그 뒤에 gdb에      "A"*20 +"B"*4 +"C"*100 

`python -c 'print "A"*20 +"B"*4+"C"*100`'  

등등등등...많이 넣어봤습니다 

이렇게 나온 주소값들을 일일히 넣어보고 x/~~x $esp x/~~x$ebp-16 등등  여러가지 명령어를 또 사용해봐서 나온 주소값들을 넣어봐도 
반응이없거나 쉘이들어가기만 하고 제대로 안된다거나 하는 경우들이 계속 발생하였습니다 ..

일단 스택을 대충 생각해보겠습니다 

  buf      sfp     ret    쉘코드를 넣기위한친구들 + 쉘코드 
ebp-16   ebp  ebp+4                 ebp+8 

대충 이러하게 스택의 위치가 잡혀있을거같다는 생각으로 시도를 해봤는데도 열리지않았습니다 ..

또한 공격을 할때 gets 함수는 파이프 함수를 써야 하는것을 잊고 

`python -c 'print "A"*100 +"주소값"+"B"*100+"쉘코드"`' 이러한 식으로 공격을 해서 계속 해맷습니다 -_-;; 

여하튼..gets 함수는 문자열로 쭈욱 인식하는 함수기에 파이프를 이용했습니다 

파이프란 왼쪽 명령어 친구들을 오른쪽으로 보내주는 역할을합니다.


정말 간단하게도 이렇게 값을 넣었습니다 

쉽게 주소 파악을 위해서 A(buf+sfp=20) B(RET) C(그냥막넣음) 이렇게 했습니다 


414141 4242424 434343 . . . .값이 나오는걸 볼 수 있습니다 .
여기서 C를 이용해 쉘코드를 넣어야 하기 때문에 쉘의 일정한 주소값을 (전 적절하게 중간즈음을 택했습니다 .)


(눌러서 봐주세요)

이러한식으로 처음 생각했던 공격코드를 짯더니 드디어 열렸습니다 .
처음에 짠 공격코드를 파이프를 통해서 ./goblin으로 보내버린겁니다 

간단하기도 하지만 하나의 간단하고도 사소한 실수때문에 많은 시간이 소요되버렸네요 -_- 좀 더 공부를 열심히 해야겠습니다 

'해커스쿨 lob' 카테고리의 다른 글

LOB darkelf  (0) 2016.05.02
LOB wolfman  (0) 2016.05.02
LOB goblin  (0) 2016.05.01
LOB gremlin  (0) 2016.04.30
LOB gate  (0) 2016.04.30

+ Recent posts