Wargame
-
[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
-
[HackCTF : Pwnable] Random Key (200p)Wargame/HackCTF 2021. 7. 12. 10:51
[HackCTF : Pwnable] Random Key (200p) 문제 파일을 실행하면 이렇게 key를 입력받는다. 바로 ida로 확인해보자. 입력받은 값이 rand() 함수로 생성된 key값과 같아야 한다. srand에 현재 시간을 불러와서 rand 함수를 실행하기 때문에 같은 시간에 rand 함수로 key값을 만들어주면 된다. 이렇게 똑같은 코드를 짜주고 컴파일해준다. 이제 실행과 동시에 nc로 접속하면 된다. HackCTF{5087686686858549173307745189}
-
[HackCTF : Pwnable] Poet (200p)Wargame/HackCTF 2021. 7. 9. 14:38
[HackCTF : Pwnable] Poet (200p) 먼저 실행해보면 Enter : 이렇게 내용을 입력받고 저자를 입력받는데 1,000,000 점이 필요한 것 같다. dword_6024E0이 1000000이면 while문을 탈출하고 reward함수를 실행한다. flag를 읽어준다. 그리고 나머지 함수들을 살펴보자. poem이라는 변수에 입력을 받고 dword_6024E0에 0을 넣기 때문에 이 함수는 이용하지 못할 것 같다. &unk_6024A0에 입력을 받는다. dword_6024E0와 같은 bss영역이기 때문에 여기서 오버플로우를 일으켜 dword_6024E0를 1000000으로 만들면 될 것 같다. 0x6024E0 - 0x6024A0 = 0x40 만큼 dummy로 채우고 1000000을 넣어..
-
[HackCTF : Pwnable] RTL_Core (250p)Wargame/HackCTF 2021. 7. 8. 17:51
[HackCTF : Pwnable] RTL_Core (250p) 실행해보니 코어 파일에 액세스 하기 위해서 패스코드가 필요한 것 같다. 입력받은 것을 check_passcode함수로 넘기고 그 return값이 hashcode와 같아야지 core함수가 실행된다. hashcode = 0xC0D9B0A7 for문 돌 때마다 입력받은 값의 주소에 4byte씩 더해가며 들어있는 값을 더한다. 즉 0xC0D9B0A7를 5로 나눈값을 20바이트에 갈쳐서 넣어주면 된다. 0xC0D9B0A7를 5로 나누면 0x2691F021인데 나누어 떨어지지않고 2가 부족하기 때문에 0x2691F021 * 4 + 0x2691F023 이렇게 해줘야 한다. 자세히 보기 위해 gdb를 이용했다. check_passcode가 끝날 때에 br..
-
[HackCTF : Reversing] Handray (100p)Wargame/HackCTF 2021. 7. 8. 10:45
[HackCTF : Reversing] Handray (100p) 문제에서 주어진 파일을 받아봅시다. 64bit ELF 이렇게 권한 주고 실행해보면 flag를 뛰어넘었다고 한다. gdb로 까보면 main+15에서 cmp DWORD PTR [rbp-0x4], 0x0 이렇게 비교를 하는데 이게 같지 않으면 main+103으로 가서 "flag를 뛰어넘었습니다!"를 출력한다. 그럼 DWORD PTR [rbp-0x4]를 0으로 바꿔서 실행해보자. 비교하기 전에 break를 걸고 실행한다. 값을 0으로 바꿔준다. flag is HackCTF{HotToHanDleC0ldT0H000ld!}