Wargame/HackCTF

    [Pwnable] j0n9hyun's secret

    이번에는 j0n9hyun's secret이다. 바로 mitigation check! Partial Relro, no canary, NX, none pie 보호기법이 많이 걸려있지는 않아서 익스가 힘들거 같지는 않다. 바로 코드부터 살펴보자 main이 잡히지 않고 이상한 함수들도 엄청 많은걸 보니 stripped + statically linked binary인거 같다. 그럼 start 함수의 첫번째 인자(sub_4009C9)가 main 함수이므로 바로 살펴보자 stripped binary라 잘 봐서는 모르겠다. 코드만 보고 대충 유추를 해보면 "input name:"이라는 내용을 출력하고 %s format string이 있으니까 문자열을 입력받는거 같다. 그리고 나머지는 알아볼 수 없으니 한번 바이너리를..

    [Pwnable] Unexploitable #2

    이번에는 Unexploitable #2이다. 이 문제는 약간의 trick 문제라 그 trick을 잘 알고 있으면 쉽게 풀 수 있다. 우선 Mitigation check부터 하자 Partial Relro, no canary, NX enable, none pie 코드를 살펴보자 main에서는 그냥 평범하게 fgets 부분에서 BOF 터져서 ROP가 가능해보인다. 근데 이제 문제점이 있다. 사용 가능한 함수중에 출력을 해주는 함수가 존재하질 않는다. 출력을 해주는 함수가 없는 got를 구할 수 없어 libc base를 구할 수 없다. 그래서 gift 함수를 보면 system 함수를 이용한다. 우리는 system 함수로 libc leak 후에 libc base를 구할거다. system 함수는 출력해주는 기능을 ..

    [Pwnable] World Best Encryption Tool

    이번에는 World Best Encryption Tool이다. 이것도 취약점이 대놓고 보여서 쉬우니까 후딱 풀자 Canary, NX, Partial Relro, none pie이다. main이다. src에 입력받는 부분에 %s로 length check가 없어서 BOF가 터진다. 그리고 입력한 문자열을 0x31만큼 0x1C랑 xor연산해준다. dest로 src 문자열을 복사하고, s1에 또 입력받는데 다시 BOF가 터진다. 그럼 우선 익스 시나리오를 구상해보자 1. src 입력 받는 부분으로 canary leak -> strncpy 이용해서 canary 1byte 덮으면 가능 2. s1에 Yes 입력해서 다시 src에 입력받음 3. libc leak, return to main 4. return to sy..

    [Pwnable] Register

    이번에는 register 문제이다. 이건 풀면서 되게 재밌었던 기억이 난다. canary, NX, partial Relro main은 심플하다. 바로 build로 넘어가보자 build에서는 SIGALRM이 발생하면 handler라는 놈으로 처리한다. handler 내부를 뒤적거리다가 exec_syscall_obj가 보이는데 result에는 obj의 주소값이 넘어간다. 그리고 syscall을 해준다. 그리고 get_obj 함수이다. get_obj에는 문제 제목처럼 register 값을 입력하는거 같다. 그리고 validate_syscall_obj 함수인데 v0[0] = rax를 체크하는 루틴같다 그러면 대충 전체적인 로직을 파악했을때 어떻게 익스를 할 수 있을까 간단하다 exec_syscall_obj에서 ..

    [Pwnable] RTC

    진짜 오랜만에 롸업이다 사실 문제는 푼 지는 되게 오래됬지만 최근들어 대학은 가야되는데 해킹 공부를 하고 있는게 맞는건가 싶기도 하고 그냥 요즘 들어 마음이 복잡하기도 해서 여태까지 문제는 많이 풀었는데 롸업은 올리지 않았다 뭐 사실 최근에 힙 다 까먹어서 다시 정리하고 있기는 한데ㅋㅋ; 그냥 오늘은 새벽에 생각 정리도 할려고 롸업을 써보려고 한다 아마도 롸업 여러개가 올라갈거 같긴 한데 어짜피 어려운 문제는 아니니까 후딱 써보도록 하자 잡담이 길어졌는데 진짜 시작~ - Mitigation - 0x200만큼 받아서 bof 발생 -> rop 가능 사용 가능한 함수에 puts가 없어서 rdi 가젯만으로는 libc leak 불가능 그러면 read, write로 libc leak을 해야되는데 gadget도 없음..

    [Pwnable] SysROP

    오늘은 SysROP 문제를 풀어보자 우선 NX Bit만 Enabled 되어 있어서 그냥 심플한 ROP 문제일거라고 생각했다. ??: 물론 디버깅을 하기 전까지 별 특별한 거는 없고 read에서 BOF가 터진다. 근데 문제가 생겼다. 출력을 해주는 함수가 없어 leak을 하지 못한다. 이럴때는 Syscall을 이용한 ROP 방법이 있다. 우선 Syscall에 대해서 간략하게 알아보자 What Is Syscall? user단에서 커널단에게 파일을 읽거나 쓰는 특정 작업을 요청할 때 사용되는 어셈블리이다. 유저단에서 커널단으로 요청할때 사용되는 어셈블리가 syscall, int 0x80 이다. (int는 자료형이 아니라 interrupt의 줄임말이다) 우리는 "int 0x80" 명령어가 없으니 syscall ..