반응형 LOB20 LOB Level 8 orge orge -> troll 에 접속합니다. 소스코드를 봅시다. 우선 argv[1]사용 못하고.... 버퍼 초기화되고 실행 인자 두가지 흠.... 그럼 argv[0]을 이용하면 되겠군요 argv[0]에는 파일명이 저장 되니깐 파일명을 심볼릭 링크로 쉘코드로 지정해준 다음 RET를 argv[0]쪽으로 바꿔주면 되겠네요 그런데!! 만약에 쉘코드에 \x2f가 있으면 안된다네요 새로운 코드를 구합시다. \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\.. 2021. 8. 9. LOB Level 7 darkelf darkelf -> orge 접속해서 소스파일을 봅니다. Egghunter, buffer hunter, check the length of argument, argv[1][47] != "\xbf"는 저번과 같은데 새로운게 추가되었습니다. argv[0] 의 크기가 77이 아니면 안되네요 ./orge 라는 명령을 실행하면 argv[0]이 6이 됩니다. 그렇다면 python을 이용하여 ./////////~~////orge를 해서 77을 맞춰주면 argv[0]!=77이라는 조건을 맞춰줄 수 있겠군요. `python -c 'print "."+"/"*72+"orge"'` argv[0]에러가 나타나지 않는 걸 보니 해결된 것 같습니다. 그렇다면 이전에 풀었던 것 처럼 하면되겠군요. 소스코드를 복사하여 argv[1]의.. 2021. 8. 9. LOB Level 6 wolfman wolfman -> darkelf 접속합니다. 흠.. 에그헌터, 버퍼헌터, 그리고 argv[1]의 길이를 체크하네요 전까지 했던 exploit코드는 사용하지 못하네요 우선 메모리구조는 저번과 비슷할 것 같지만 그래도 한번더 확인하면 같군요 4RET 4SFT 44BUFFER Exploit 코드를 구상해봅시다. 우선 전 공격과 다르게 48바이트를 넘기면 안됩니다. 25바이트 쉘코드를 사용하므로 쉐코드를 argv[1]에 넣어주고 argv[1]의 주소를 리턴시켜주면 되겠네요 null(10) + shellcode(25) + null (9) + argv[1]_add 소스코드를 수정해서 argv[1]의 주소를 출력해줍니다. 아 실수로 argv[1]이 아니라 buffer의 주소를 출력했네요... printf("0x%x.. 2021. 8. 9. LOB Level 5 orc Level5 orc -> wolfman 으로 접속합니다. 우선 힌트를 봅시다! 에그헌터 있고 버퍼 초기화하는게 있네요. 전체적인 메모리구조를 RET4 SFT4 buffer40 int4 이렇게 유추해봅시다. GDB로 까보면 main+3에서 44바이트가 할당된것을 알 수 있습니다. 4바이트RET 4바이트SFP 40바이트BUFFER 4바이트i 이제 buffer 의 주소를 알아내기 위해 break걸고 살펴보려고 하는데 퍼미션... 파일을 복사해서도 해보는데 퍼미ㅕㅅㄴ..... 다른 방법을 찾아보던중에 힌트로 제공된 소스 코드를 복사하여서 현재 버퍼의 주소를 출력해주는 코드를 추가합니다. printf("0x%x\n", buffer); 그리고 컴파일 후 실행합니다. 버퍼의 주소를 알아냈습니다. 0xbffffa70 .. 2021. 8. 9. LOB Level 4 goblin Level 4 goblin > orc 로 접속합니다. 소스를 살펴보면 이번에는 에그쉘을 쓰지 못하네요 egghunter에서 환경변수는 주소를 모두 0으로 만들어 버리네요 그리고 argv[1][47]이 \xbf여야 한다네요. 우선 gdb를 사용해 메모리 구조를 나타내면 RET4 SFP4 BUFFER40 i4 가 됩니다. 이번에도 더미값은 없네요 대충 공격코드를 작성해보면 nop(44byte) + ret + nop + shellcode 가 되겠군요 buffer의 주소를 알아내기 위해 gdb를 활용합니다. strcpy함수가 호출되고 난 후의 부분에 break 를 걸고 살펴보려는데... 권한문제 ;; orc프로그램을 따로 컴파일해서 해보았으나 주소가 맞지않아 안되네요.. 다른 방법을 찾던중 orc 소스파일 자체.. 2021. 8. 9. LOB Level 3 cobolt Level 3 cobolt로 접속합니다. goblin의 소스파일을 보면 Level2와 유사합니다. 차이점은 strcpy함수 대신 gets함수를 사용하였습니다. 메모리구조도 똑같네요 low - buffer 16 - sfp 4 - ret 4 - high 입니다. 바로 익스플로잇 코드를 작성합시다. 쉘코드를 환경변수로 올려주고 getenv로 주소를 알아낸 후 (python -c 'print "\x90"*20+ "\x주소"';cat)|./goblin 실행하면 됩니다. 2021. 8. 9. 이전 1 2 3 4 다음 반응형