[어설픈] LOB 3번 cobolt 문제풀이

2019. 3. 13. 23:51System Hacking/[LOB] Hacker School

안녕하세요!

오늘은 LOB 3번

Cobolt 문제를 풀어보도록 하겠습니다!


문제에 들어가니 

아래와 같은 소스코드가

주어지네요!


근데 사실 바로 직전 문제

gremlin과 달라진 게 별로 없습니다!

달라진 게 있다면


gremlin: argv 형식으로 입력을 받았다

cobolt: stdin(standard input)으로 입력을 받는다


이게 끝이에요....

입력 방식만 차이가 있지

풀이나 exploit은 똑같아요


왜냐면 소스코드를 보시면

버퍼가 16byte가 있죠?

그리고 gets 함수로 입력을 받고 

그 값을 버퍼에 저장

다음에 버퍼에 저장된 값을 printf 함수로 출력!


여기서 취약점은 마찬가지로 gets 함수가 

얼만큼 읽을지 크기를 안정해줘서

오버플로우가 발생하는 것이죠?


즉 gremlin과 마찬가지로 

main 함수의 ret addr을 

system으로 바꾸고 

system 함수의 인자로 /bin/sh

넣으면 되겠죠?

 

[스택]

buffer (16 byte)

EBP (4byte)

ret_addr(4byte) =>시스템 함수 주소

aaaa

/bin/sh주소


그래서 바로 아래와 같이 payload를 작성했습니다!


gremlin과 달라진 점은 딱 하나입니다!

| 이걸 통해서 stdin 으로 입력한 거요!

a로 EBP까지 채우고

system함수 주소로 return

system함수 ret_addr은 aaaa로 설정

그리고 /bin/sh의 주소


일부러 nm 이랑 strings명령어로 system함수 주소와 /bin/sh 주소

찾는 것은 생략했습니다


궁금하신 분들은

바로 직전 gremlin에 있으니 보고 참고하시면 될 것 같아요!

(이미 많이 했어서요 :) )


고생하셨습니다!