2018. 7. 14. 11:57ㆍWarGame/LOB
어제 사이버가디언즈 멘토님께 RTL기법에 대해 강의를들었다.
보통 lob에서는 shellcode를 이용해서 shell을 따려고 하지만, 막상 많은 ctf문제들을 풀어보면 shellcode를 직접적으로 입력해서 사용하는 문제들을 찾아보기 힘들다.
따라서 현재까지의 습관을 고치고 앞으로 RTL를 이용해서 문제를 풀어보도록 하겠다.
먼저 로그인을하고 소스코드를 보자.
1번문제와 크게 다를게 없어보이지만 버퍼값이 16byte로 쉘코드를 넣기에는 부족하다.
두가지의 방법이있는데.
1. 환경변수에 쉘을 입력해서 탈취한다.
하지만 환경변수를 이용하는 문제는 CTF에도 자주 나오지않는다.(첫번째 write-up)에서 다룸
2. RTL기법을 이용해서 쉘을 탈취한다.
RTL기법이란 (Return-to-Libc)의 약자로 리턴을 libc로 주는 것이다.
함수가 실행될때에는 system이라는libc를 사용하게되는데. 이 함수내에는 우리가 원하는 "/bin/sh"도 포함이 되어있다.
ASLR이 적용되어있지않아서 저 함수가 실행되게끔 이동하게된다면 shell을 얻을 수 있을 것이다.
RTL기법이 CTF에서도 많이 사용이 가능하기때문에 이포스팅에선 이 방법을 택할 것이다.
tmp폴더를 생성하고 그 폴더에 복사본을 옮긴다.
tmp폴더 내에서 디버깅을 해서 system 함수의 주소를 찾는다.
참고) ASLR이 적용되어있지않아서 주소는 모두 같을 것이다.
system 함수 주소 : "0x40058ae0"
이제 문제는 system 함수 내에서 "/bin/sh"를 찾는것이다.
직접 x/100s $esp로 찾아도 좋지만, 컴퓨터가 우리보다 빠르니 프로그램을 작성하도록 하죠!
프로그램을 돌렸더니"/bin/sh"의 위치가 "0x400fbff9"가 나왔습니다.
그래도 exploit해주면 될거같습니다.
exploit 코드 : ./cobolt `python -c 'print "A"*20 + "\xe0\x8a\x05\x40" + "A"*4 + "\xf9\xbf\x0f\x40"'`
(grin)
'WarGame > LOB' 카테고리의 다른 글
LOB - 11. skeleton -> golem (268) | 2018.07.29 |
---|---|
LOB - 10. vampire -> skeleton (261) | 2018.07.29 |
LOB - 9. troll -> vampire (933) | 2018.07.05 |
LOB - 8. orge -> troll (948) | 2018.07.05 |
LOB - 7.darkelf -> orge (931) | 2018.07.05 |