syscall

    [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] SysROP

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