Wargame/Lord of Buffer Overflow
-
[LOB] golem > darkknightWargame/Lord of Buffer Overflow 2021. 7. 14. 13:24
[LOB] golem > darkknight 이번 문제는 FPO를 이용한 문제다. FPO(Frame Pointer Overflow)는 SFP를 조작해 eip를 변조시키는 공격이다. 이 과정을 이해하려면 함수 에필로그 과정을 알고 있어야 한다. 먼저 소스코드를 보면 problem_child함수에서 strncpy로 41byte를 복사하는데 여기서 sfp의 끝 1byte를 조작할 수 있다. gdb로 보면 0xbffffab0에 쉘 코드의 주소가 들어있다. 쉘 코드를 buffer에 넣고 sfp 마지막 1byte를 [0xbffffab0 - 4]으로 변조하면 main 에필로그의 pop eip를 통해 eip가 0xbffffab0주소에 있는 값(0xbffffab4)이 된다 그럼 결국 0xbffffab4로 jmp 해서 쉘..
-
[LOB] skeleton > golemWargame/Lord of Buffer Overflow 2021. 7. 14. 09:51
[LOB] skeleton > golem 24번째 줄이 이번 문제에 핵심같다. stack destoryer 말 그대로 스택을 파괴시킨다. 쉘 코드를 사용할 위치를 찾아야하는데 LD_PRELOAD를 이용하면 된다. LD_PRELOAD에 환경변수를 설정하면 프로세스가 실행 중 라이브러리를 불러올 때 설정한 라이브러리를 먼저 불러온다. ( 공유 라이브러리영역에 존재 ) 이렇게 -fPIC과 -shared 옵션으로 공유라이브러리로 컴파일하고 환경변수에 등록해준다. 그리고 gdb로 환경변수로 등록한 쉘 코드의 위치를 찾아주면 된다. golem / cup of coffee
-
[LOB] vampire > skeletonWargame/Lord of Buffer Overflow 2021. 7. 13. 14:05
[LOB] vampire > skeleton argv를 다 초기화한다. gdb로 쓸만한 곳이 있는지 확인해보자. 이렇게 메모리 끝 부분에 파일 실행 경로가 남아있다. 파일명을 쉘코드로 바꿔주면 될 것 같다. 이렇게 파일명을 바꿔주고 core파일을 통해 주소를 찾아보자. 적당히 0xbfffffb0 쯤으로 잡으면 될 것 같다. ㅇ 이제 링크를 걸고 exploit 해보자. ㅅ 성공적으로 쉘이 실행되었다. skeleton / shellcoder
-
[LOB] troll > vampireWargame/Lord of Buffer Overflow 2021. 7. 5. 11:47
[LOB] troll > vampire 소스코드를 보면 20번째 코드가 바뀌었는데 0xbfff????으로 시작하는 곳을 사용할 수 없다. 그럼 어떻게 하냐 dummy를 0x10000 만큼 채워서 0xbffe????에 쉘 코드를 넣고 실행하면 된다. gdb로 확인 해봤을 때 주소가 0xbffe로 내려온것을 볼 수 있다. 이 공간에 쉘 코드를 넣고 ret를 대충 0x90이 있는 곳으로 바꿔주면 쉘이 실행된다. vampire / music world
-
[LOB] orge > trollWargame/Lord of Buffer Overflow 2021. 5. 28. 11:44
[LOB] orge > troll 바로 메인 함수부터 보면 이전 문제들과 같이 환경변수, 버퍼를 초기화하고 argv[1]길이 검사, argv[1]의 48번째가 \xbf 가 되어야 한다. 그리고 이 부분이 추가되었는데 메인 함수 인자의 개수를 확인하여 인자가 2개가 아니면 종료시킨다. 그래서 argv[2]에 쉘 코드를 넣어 실행시키는 것이 불가능하다. 그럼 쉘 코드를 어디에 넣어주냐! 바로 argv[0] 즉 파일 명을 쉘 코드로 주면 된다. 하지만 원본 파일은 권한 문제로 파일명 변경이 불가능하기 때문에 파일명을 쉘 코드로 cp 해서 심볼릭 링크를 걸어 실행해주면 된다. 파일명을 쉘 코드로 하여 cp 하고 core dumped를 일으켜 argv[0]의 주소를 구해보았다. 여기서 주의해야 할 점은 쉘 코드에..
-
[LOB] darkelf > orgeWargame/Lord of Buffer Overflow 2021. 5. 27. 23:01
[LOB] darkelf > orge 바로 소스코드를 보면 이곳이 바뀌었다고 나와있다. argv[0]의 길이가 77이어야 한다. argv[0]에는 첫 번째 인자 즉 파일을 실행할 때 들어가는 ./orge 이 부분이다. 이 부분의 길이가 77이 되어야하는건데 .///////orge 이런 식으로 길이를 늘려주면 된다. 즉 /를 72개 넣고 실행해주면 된다. 나머지는 이전 문제와 같은 방식으로 풀이하면 된다. core dumped 일으키고 바꿔서 해봅시당. orge / timewalker
-
[LOB] wolfman > darkelfWargame/Lord of Buffer Overflow 2021. 5. 25. 10:06
[LOB] wolfman > darkelf 소스 코드를 먼저 보면 지난 문제와 동일한데 아래 부분이 추가되었다. 메인 함수 첫 번째 인자의 길이 검사가 48보다 크면 프로그램을 종료한다. 그래서 쉘 코드를 ret 뒷부분에 넣을 수 없다. 여기서 생각할 수 있는 것은 2번째 인자에 쉘 코드를 넣는 것이다. 2번째 인자에 쉘 코드를 넣고 ret에 2번째 인자의 주소를 넣으면 된다. 이번에도 core파일로 2번째 인자의 주소를 알아내 보자. 42가 들어간 부분이 2번째 인자의 주소가 된다. payload는 아래와 같다. dummy [44btye] | ret [4byte] | 공백 | shell code [25byte] core 파일을 확인해보자 ret 주소를 0xbffffc34로 해봅시다. darklef / ..