공부정리
-
패턴 검사하는 문제 풀 때공부정리 2019. 6. 18. 13:07
리얼월드나 CTF문제를 풀 때, 사용자의 입력값을 검사하는 루틴이 존재하는 경우가 있다. 예를 들면, FacebookCTF 2019 Web문제 중 'RCE Service'라는 문제에서는위와 같이 php의 preg_match( )를 이용해서 사용자의 입력값을 검사한다.이런 유형의 문제를 낸 출제자의 의도를 추측해보자면,'패턴검사를 하는 preg_match( )의 어떠한 취약점을 알려주기 위해서 이런 문제를 내지 않았을까?' 라는생각을 해볼 수 있다. 결론적으로는 preg_match( )의 취약점을 이용하는 문제가 맞다.이러한 하나의 예시로는 위의 추측이 절대적이라고 말할 수 없지만,새로운 기법이나 취약점을 알려주는 것이 CTF대회의 주된 목적 중 하나라고 봤을 때,이런 추측은 합리적이라고 말할 수 있을 것..
-
checksec없이 NXbit 확인하기공부정리 2019. 6. 17. 19:42
NXbit란 Stack, Heap, Data영역과 같이 Data가 저장되는 영역에는 실행권한을 부여하지 않는 보호기법이다. 보호기법 네이밍대로 ELF특정 헤더값에 특수한 Bit값으로 실행권한 부여 여부를 정하게 되는데,우리들이 보호기법을 확인할 때 자주 사용하는 'Checksec.sh'도 ELF특정 헤더값을 확인하고NXbit Enable/Disable 여부를 판단한다.[ GNUSTACK ] readelf -W -l check_DEP |grep 'GNU_STACK' | grep 'RWE' 위 명령어로 readelf를 이용해서 NXbit 여부를 확인할 수 있다. ELF헤더의 GNU_STACK Flag값이 RWE(7)로 설정되어 있으면 NXbit가 해제되어 있는 상태이며,Flag값이 RW(6)으로 설정되어 있..
-
vsyscall을 이용한 Exploit공부정리 2019. 6. 16. 01:55
리눅스 ELF 바이너리에는 고정적인 주소를 가진 vsyscall영역이 있다. [ vsyscall ]해당 영역은 ASLR, PIE와 같은 주소랜덤화 기법이 적용되어 있어도 항상 고정적인 주소를 갖는다. 또한, 실행권한(x)이 부여되어 있어 필요한 가젯을 가져와서 사용할 수 있다.[ vsyscall ]vsyscall영역은 syscall의 Overhead를 줄이기 위해 User Space에 할당된 커널 영역이다. syscall을 사용하면 User mode에서 Kernel mode로 Context Switching이 발생하게 된다.User의 Context는 따로 저장해두고 Kernel의 Context를 불러오고,Kernel에서 모든 작업이 종료되면, 저장해뒀던 User Context를 불러오는 작업을 하게된다...
-
gdb로 fork된 자식프로세스 디버깅하기공부정리 2019. 4. 6. 13:02
CTF를 풀다보면 Server바이너리에서 fork( )를 사용하는 경우가 많다. 이때 gdb로 바이너리를 잡으면 자식프로세스가 아닌 부모프로세스를 따라가게 된다. 우리가 분석해야 하는건 자식프로세스 이기 때문에, ' set follow-fork-mode child '를 사용하면 디버거가 자식프로세스를 따라가면서 디버깅할 수 있게 된다. [ set follow-fork-mode child ] Angrydoraemon은 Server바이너리로 fork( )로 자식프로세스를 생성하여 Client접속을 받는다. gdb에서 ' set follow-fork-mode child '를 입력한 뒤, run으로 바이너리를 실행시키면 접속 대기 상태가 된다. [ fork( ) 생성 ] nc로 서버에 접속하면 디버거에서 접속을..
-
Syscall 가젯이 없을 때공부정리 2019. 3. 6. 04:06
Pwnable문제를 풀다보면 syscall로 익스를 해야될 때가 있다. 딱 언제라고 예를 들기는 어렵지만, 여러가지 제한들이 걸려있는 상황이 그렇다.RTL이 불가능할 때? 이 때 제일 많이 사용했던 것 같다. 하지만, Syscall_gadget마저 제한을 둔 문제들이 종종 있다.이 때, Libc에 있는 syscall가젯의 하위 1Byte를 GOT_Overwrite해서 syscall을 사용할 수 있다.[ find "\x0f\x05"(syscall) ]x64의 시스템콜 opcode인 "\x0f\x05"를 검색해보면 Libc에 위치한 syscall가젯들이 대략 573개 정도 나온다.여기서 내가 syscall가젯으로 Overwrite할 함수에 위치한 syscall을 찾아야 한다. [ read_syscall ]빨..
-
Return-to-Csu 기법 정리공부정리 2019. 3. 5. 23:47
포너블 문제를 풀 때, 64Bit 바이너리가 까다로운 이유가 바로 'Gadget' 때문이다. 64Bit의 Calling Convention은 Fastcall로 호출된 함수에 인자를 레지스터로 전달한다.이 때문에 Exploit을 구성할 때도 [POP RDI]와 같은 가젯이 반드시 필요하다. 이러한 특이점 때문에 문제에서 가장 흔하게 볼 수있는게 '가젯 제한'이다.이 상황에서 EDI,RSI,RDX 를 구성할 수 있는 방법이 있는데, 바로 Return_to_csu기법이다.[ Return to csu란? ]ELF바이너리를 IDA와 같은 디버깅도구로 열어보면, __libc_csu_init( )를 볼 수 있다.이 함수가 하는일은 바이너리의 _start( )를 호출하는 함수인 gmon_start( )를 호출하는 역할..
-
메모리 보호기법 - PIE공부정리 2019. 1. 12. 22:43
TU-CTF2018에서 출제된 lisa 라는 문제를 풀면서 PIE에 대해서 공부하게 되었다. 바이너리에 PIE가 걸려있으면 주소값들이 해괴망측하게 변하는 걸 볼 수 있는데이 모습을 처음 보고 '아. 빡세다.' 라는 생각이 들어서 그런지 PIE라는 존재에 겁을 먹고 있었다.근데 막상 공부해보니까 'ASLR과 크게 다르지 않다'라는게 나의 결론이다.[ PIE란? ]Position Independent Executable의 약자로 바이너리 주소가 상대적인 주소로 랜덤하게 매핑시키는 기법이다.ASLR과 비슷하게 생각하되, 차이점은 PIE는 Code(Text)영역을 포함한 모든 영역(Data,Stack,Heap,Libc)을 랜덤하게 매핑시킨다는 것이다. [ Sample.c 소스코드 ]위 샘플코드로 확인해보도록 하..
-
[02-14 공부정리(FSB 정리)]공부정리 2018. 2. 15. 04:07
오늘은 장장 5시간만에 FSB를 이해했다.. 시스템 공부를 어느정도 한 후에 FTZ를 풀이를 진행했다.12번까지 푸는데 뭔가 너무 허무한 것이다..11번과 12번을 둘 다 RTL을 이용해서 푸는데 RPG로 비교하면200제 무기로 슬라임잡는 기분이었다.. FTZ를 다시 시작한 이유는 RTL과 ROP기법말고 다른 공격기법을 익히기 위해서 였는데정작 사용하는 공격기법을 보면 RTL만 사용하고 있는 나를 보고서" 이렇게 FTZ를 풀어봤자 무의미하겠구나.. " 라는 생각이 들었다.그래서 Level11번을 FSB로 다시 한번 풀어봤다. 무식한 BOF만 익혀오다가 좀 계산적인 부분이 있는 FSB를 익히려니까 처음엔 이해가 정말 안됐다...ㅠ뭐 지금와서 보면 계산적이라고 할 것도 없지만,,정리가 굉장히 잘해주신 블로거..