ROP

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

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