전체 글
-
[Pwnable] RET SledNotepad/Pwnable 2021. 7. 15. 15:22
[Pwnable] RET Sled RET Sled는 스택에 있는 Return Address에 RET의 주소를 넣어 RET명령을 연속적으로 실행하는 공격이다. RET 명령은 아래와 같은데 pop eip jmp eip 이 명령을 통해 Return Address에 있는 주소로 이동한다. 여기서 Return Address에 RET 주소가 들어있으면 저 명령들을 계속하여 jmp할 주소를 조작할 수 있다. 관련 문제 : [LOB] giant > assassin
-
[LOB] giant > assassinWargame/Lord of Buffer Overflow 2021. 7. 15. 15:05
[LOB] giant > assassin no stack, no RTL ret에 스택과 libc를 못쓴다. RET Sled를 이용해서 풀면 됨 스택의 Return address에 ret주소를 넣어서 ret를 한 번 더 실행시킴 그럼 esp+8의 주소를 실행시킬 수 있다. ret : 0x804851e B가 위치한 곳이 쉘 코드가 들어갈 주소 : 0xbffffa80 assassin / pushing me away
-
[LOB] bugbear > giantWargame/Lord of Buffer Overflow 2021. 7. 15. 11:27
[LOB] bugbear > giant RTL2 execve함수로 ret를 덮어야 한다. execve함수의 ret에 system 함수를 넣고 쉘을 실행시키면 된다. 이렇게 execve와 system함수의 주소를 구하고 c코드로 "/bin/sh"을 구하면 된다. execve : 0x400a9d48 system : 0x40058ae0 "/bin/sh" : 0x400fbff9 giant / one step closer
-
[Pwnable] RTL (Return-To-Libc)Notepad/Pwnable 2021. 7. 14. 16:07
[Pwnable] RTL (Return-To-Libc) NX bit를 우회할 수 있는 기법이다. NX bit : 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않는 보호 기법 - Shell code를 스택에 넣고 실행할 수 없음 RTL은 RET를 라이브러리 내에 있는 함수를 실행하는 공격 기법이다. 보통 exploit에 system함수를 많이 사용하는데 (인자가 하나이기 때문에) 이를 이용해서 쉘을 실행시킨다. - system("/bin/sh") RTL 공격으로 system("/bin/sh") 을 호출하기 위해서는 3가지 조건이 필요하다. ● 입력으로부터 RET까지의 거리 ● system 함수의 주소 ● "/bin/sh"의 주소 [32bit] 이 세가지를 통해 payload를 짤 수 있는데 RET까지..
-
[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