Wargame/HackCTF

    [Pwnable] BOF_PIE

    오늘은 BOF_PIE라는 문제를 풀어보겠습니다 ! 우선 mitigation 체크를 해봅시다. NX bit와 함께 PIE가 Enabled 되어 있네요 그래서 문제 이름이 BOF_PIE인가 봅니다 문제를 풀기 앞서 PIE에 대해 간단히 공부하여 봅시다. PIE (Position Independent Executable) 위치 독립 코드로 이루어진 실행 가능한 바이너리 (위치 독립 코드 : 실행할 때마다 매핑되는 주소가 어디든지에 상관없이 실행되는 파일) → 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다. 이런 보호 기법이라고 합니다.. 제가 이해한 느낌대로 설명을 해보자면 Non-PIE 상태에서는 주소가 offset값으로 mapping 되어 나오지만 PIE상태에..

    [Pwnable] Offset

    이번에는 offset 문제입니다. 문제를 풀기 전에 offset에 대해 간략히 정리를 하겠습니다 offset이란? '어느 주소와 다른 주소와의 거리를 나타내는 값' 라고 되있습니다. 문제를 풀면서 offset에 대해 익혀보겠습니다 Mitigation을 체크를 해봤는데 오랜만에 보는 초록색 친구들이 있네요 굳이 안나와도 되는데....👀 무슨 Function을 부르고 싶은지를 묻고 입력을 받은 후 종료되는 Binary입니다. IDA로 열어보겠습니다 Which function would you like yo call? 이라는 문자열을 출력하고 gets로 S라는 변수에 입력을 받습니다 select_func라는 함수가 있습니다. strncpy로 문자열을 복사하는데 dest라는 변수는 0x2A만큼의 Buffer을 ..

    [Pwnable] Simple_Overflow_ver_2

    이번에도 BOF 문제이군요 Mitiagtion 체크 Data를 입력받고 주소 값 출력후에 한 글자씩 띄어서 출력합니다. 그 후 반복 여부를 묻는 간단한 Binary 파일 같습니다. IDA로 열어보겠습니다. BOF 문제인 만큼 BOF가 터지는 부분을 찾아야겠죠? 처음 변수 S에 __isoc99_scanf로 입력받는 부분에서 length 체크를 해주지 않아 BOF가 터질 듯 합니다🙆‍♀️ 전 문제와 굉장히 유사하게 실행시켰을때 나오는 Buf Addr에 ShellCode를 올린 후 ret에 Buf Addr을 넣으면 될거 같습니다. 전 문제와 굉장히 유사하기 때문에 바로 페이로드를 작성해보겠습니다 Binary를 실행시키면 나오는 Buf Addr을 받아와 ShellCode를 넣는 작업을 해줬습니다. 쉘이 잘 따이..

    [Pwnable] x64 Simple_size_BOF

    오늘은 x64 Simple_size_BOF 문제를 정리해보겠습니다. 문제부터 64비트 환경에서 BOF를 터트리라는 냄새가 솔솔 납니다 👋 우선 Mitigation부터 확인을 해보면 확실히 쉬운 문제답게 아무런 보호기법도 걸려있지 않습니다. Binary를 실행시켜 보겠습니다 자살방지 문제랍니다 허헣👀 일단 buf의 주소를 알려주니 NX bit가 걸려 있지 않아 buf 주소에 shellcode를 올린뒤 ret 대신 buf 주소를 호출 하면 되겠습니다. 근데 문제점이 있습니다🤷‍♀️ 계속 buf의 주소값이 바뀝니다 그렇다는 것은 ASLR이 걸려있다는건데 우리는 buf주소를 어떻게 받아올 수 있을까요? 바로 pwntools에 포함되어 있는 기능을 활용할 겁니다. 그건 이따 확인하시져🤘 IDA로 확인해보겠습니다...

    [Pwnable] x64 Buffer Overflow

    오늘은 x64 Buffer Overflow를 정리하겠습니다 제목부터 64비트에서 BOF를 터트리라는거 같군요👀 우선 Mitigation을 확인해보면 NX와 FULL RELRO가 걸려있습니다. IDA로 까보겠습니다. 너무 짧은 코드라 굉장히 쉬운 문제이다. 맨처음 _isoc99_scanf로 변수 S에 입력을 받을텐데 Buffer Check를 해주지 않으니 BOF가 터질 것이다. 그럼 우리는 여기서 쉘을 띄울 수 있는 방법을 생각해야된다. 우선 Mitigation을 확인하였을때 NX bit가 걸려있어 쉘코드 삽입은 불가능 할 것이다. ASLR은 걸려있지 않은거 같으니 RTL 기법으로 풀면 될거 같다. 공교롭게도 callMeMaybe라는 함수가 존재한다. 이 함수의 주소값으로 RET Overwrite를 진행하..

    [Pwnable] 내 버퍼가 흘러넘친다!!!

    오늘은 내 버퍼가 흘러넘친다!!!를 정리하겠습니다 먼저 Mitigration을 먼저 체크하겠습니다 👀 확실히 기초적인 문제여서 그런지 Mitigation이 깔끔합니다. 바로 IDA로 까보겠습니다. name은 전역변수로써 bss 영역에 위치해 있으므로 read에서 BOF가 터지지는 않을거 같습니다. 하지만 변수 s는 0x14만큼 Buffer가 할당되어 있지만 gets로 입력을 받게 되면 Buffer length check를 해주지 않아 BOF가 터질 것 같습니다👏 일단 리눅스에서 Binary를 실행시켜 보겠습니다. 아까 예상했던 것처럼 input을 입력받을때 변수 S에 할당되어 있는 Buffer보다 입력을 더 받을 때 Segmentation Fault가 뜨는 것을 볼 수 있습니다 👍 그럼 우리는 어떻게 쉘..