injection
[Windows] injection & hooking
[Windows] injection & hooking
2017.08.07Dll injection#1``c OpenProcess()``로 HANDLE을 얻는다.``c VirtualAllocEx()``로 타겟 프로세스에 injection할 dll의 path를 쓸 공간을 할당한다.``c WriteProcessMemory()``로 step 2의 주소에 path를 쓴다.``c GetProcAddress()``로 LoadLibraryA의 주소를 얻는다. ``c CreateRemoteThread()``의 네번째 인자로 실행할 함수( LoadLibraryA )의 주소를, 다섯번째 인자로 그 함수가 실행할 인자(path)를 전달한다.결과적으로 remote process가 ``c LoadLibraryA(path)``를 실행하게 되어 dll을 load하게 되고, ``c Dllmain()``이 ..
[Linux] injection
[Linux] injection
2017.08.07So injection#1리눅스는 윈도우의 CreateRemoteThread같은 API를 제공하지 않기 때문에, ptrace를 이용해야 한다.2016/12/12 - [System/LINUX & UNIX] - ptrace - Linux injection ( code injection / so injection ) #2환경변수 LD_PRELOAD가 설정되어 있는 경우 명시된 라이브러리를 먼저 로드한다.2016/12/19 - [System/LINUX & UNIX] - LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function #3쓰기 권한이 있는 경우 ELF 포맷 대로 수정해서 library를 로딩하도록 하는게 가능할 것 같기는 한데, 해보지는 않았다. Code ..
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function
2016.12.19`` LD_PRELOAD``는 prefix로 `` LD_``가 붙은, ld.so에 속하는 환경변수로,windows의 `` AppInit_Dlls`` 레지스트리와 비슷한 역할을 한다.`` LD_PRELOAD``에 설정된 shared object는 libc를 비롯한 다른 모든 shared object보다 먼저 로딩된다.`` LD_PRELOAD``에 설정된 shared library의 함수 중에 이후 로딩된 libc의 함수 이름과 동일한 함수가 있다면 먼저 로딩된( = `` LD_PRELOAD``에 설정된) shared library의 함수를 호출하게 된다. 그래서 결과적으로 보면 자동으로 후킹을 수행하는 것과 같다. 타인 소유 파일에도 동작한다.secure-execution mode로 실행되면 제약이 걸린다..
ptrace - Linux injection ( code injection / so injection )
ptrace - Linux injection ( code injection / so injection )
2016.12.12리눅스는 윈도우의 ``c CreateRemoteThread()``같은 API를 제공하지 않기 때문에, injection에 ``c ptrace()``를 이용한다.2016/12/25 - [System/LINUX & UNIX] - ptrace 타인의 권한으로 실행된 프로세스에는 TRACEME와 ATTACH가 불가능하기 때문에 동작하지 않는다.타인 소유 파일을 내가 실행하는 경우는 동작한다. code injection특정 실행파일에서 원하는 정보를 추출하거나 원하는 동작을 하게 하는 데 유용하게 쓰일 수 있다.code injection을 통해 target 프로세스가 ``c system("echo Code inject");``을 호출하게 해 "Code inject" 문자열을 출력하도록 해보았다. Ubuntu 15..