ssoL2 TISTORY

lob [Level2] gremlin > cobolt (1) 본문

challenge/pwn

lob [Level2] gremlin > cobolt (1)

ssoL2 2018. 11. 4. 21:17

하롱하롱 ~~~ 여러분

ssoL2가 또 왔습니다 ㅎㅎ

 

 

이번에는 LOB Level2gremlin > cobolt writeup 인데요 !

 

 

실력은 많이 부족하지만 열심히 준비 했으니까 잘 봐주시고 ~~

 

피드백 해주실 거 있으시면 댓글 남겨주시면 감사하겠습니다 ㅎ3ㅎ

 

 

 

START ~~~~ 

 

 

 

 

 

 

 

 

login : gremlin

password : hello bof world

 

 

 

 

 

 

 

 

 

ls -al

cobolt가 만든 cobolt 파일 발견 ! 

 

바로 cat cobolt.c해서 어떤 프로그램인지 분석해보자 

 

 

 

 

 

level1의 gate > gremlin과 같은 형태지만

buffer의 바이트가 256 > 16으로 줄어들었다 !

 

취약점

 level1과 같은 strcpy 으로 인한 bof(buffer over flow) 이고,

어떻게 해결할 것인가 고민해야 한다

 

근데, 16바이트라서 buffer에 shellcode를 넣을 수가 없어 ㅜ3ㅜ

shellcode는 25바이트니까 !

 

 

그럼 이 shellcode를 어디에다 넣어서 해결해야 할까?

방법은 세 가지 ! (내가 아는..)

 

1. 환경 변수를 이용해서 혹은 2. 파일이름에 올리거나 3. argv[2]에 넣는 것

 

 

근데 현재 왕초보ssoL2가 할 수 있는 방법은

1과 3뿐인데

 

 

이번 문제는

1번 환 경 변 수를 이용해서 풀어보겠어용 ~!

 

 

 

 

 

흑 !!!!!!!!!!!!!!!! 

LOB 풀면서 매우매우 중요한 단계지만

첫 게시물에서 못올려서 아차 싶었답니다 ㅜ3ㅜ

 

LOB 문제를 풀기 전에 로그인 하고 나서 가장 먼저 해야 할 일은

bash2를 해줘야 합니다 !

 

꼭 기억하세요

 

 

 

 

 

export 명령어를 하면 환경변수를 모두 볼 수 있습니다 ~

 

 

 

 

 

 

사진으로는 첨부를 못했지만 ㅜ ㅇ ㅜ 

 

mkdir shellcode를 해서 shellcode 디렉토리를 만들고

 

이 안에서 풀었습니다 

 

푸는데 전혀 지장없습니다 ㅎㅎ

 

 

저도 왜 만들었었는지 ㅎㅎ;;

 

 

 

 

 

export 환경변수이름=`python -c 'print "쉘코드 25바이트"'` 해주면 되는 데요

 

제가 처음 풀 때 계속 안만들어져서 

왜그러지 고민했었는데

 

export 환경변수이름 = `python -c 'print "쉘코드 25바이트"'` 

위에 처럼

이름과 파이썬 사이에 어쓰기 절대 하면 안되요 !

 

그래서 계속 환경변수가 안되던 ㅜ3ㅜ

참고하시길 바라요 ㅎ3ㅎ

 

 

 

 

 

환경변수를 만들어 줬으면

이를 이용해줘야겠죠 !

 

어떻게 이용하는지 궁금하시죵 ?

 

일단 vi 편집기를 사용해서 code.c를 만들어 봅시다 ~

위 사진은 code.c를 만들어 놓고 vi를 쓴 상태에요 ! 혹시나 궁금해 하실까봐 ㅎㅅㅎ

 

 

 

 

 

getenv라는 함수는 환경 변수를 가져오는데요 !

 

뭔지 궁금하시죠 ! 

저도 궁금해서 찾아봤는데요

 

 

https://m.blog.naver.com/PostView.nhn?blogId=hoon2huny&logNo=50005636846&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

 

여기 들어가서 참고하시면 좋을 거 같아용 

 

 

 

 

 

 

그래서 gcc -o KEY code.c

즉, gcc -o 환경변수 소스파일

이 명령어로 이제 컴파일 시키고

 

ls 해서 보면

KEY 파일이 만들어져 있음을 볼 수 있는데요

 

./KEY 하면 

환경변수가 담긴 즉, shellcode가 있는 주소를 출력해주십니다

왜냐면 아까 code.c에서 getenv로 %x > 16진수로 출력하도록 해줬으니까여 ~~

 

 

자 이제 파이썬으로 짜기만 하면 완료

 

 

cd .. 으로 shellcode라는 디렉토리에서 나간다음

 

16바이트의 buffer과 이전 ebp를 \90인 nop으로 채워주고 

return address에 아까 구한 주소를 넣으면 끝 ㅎㅎ

 

 

 

다음 게시물에서 만나욤

 

 

 

안뇽 ~~~~~~~~~~

 

 

 

 

 

'challenge > pwn' 카테고리의 다른 글

pwnable.kr [flag]  (0) 2019.07.09
pwnable.kr [bof]  (0) 2019.07.08
pwnable.kr [collision]  (0) 2019.07.08
pwnable.kr [fd]  (0) 2019.07.08
lob [Level1] gate > gremlin  (4) 2018.11.03
Comments