전체 글
생성자, 소멸자 low-level
생성자, 소멸자 low-level
2017.01.13소멸자.dtors```080495f4 d __DTOR_END__```소멸자로 프로그램이 종료되기 전에 여기에 명시되어 있는 주소(함수)가 호출된다.`` __DTOR_END__``의 위치는 nm을 사용해도 좋고 readelf나 objdump로 확인해도 좋다. .fini_arraygcc 4.7 이상 버전은 .ctors .dtors를 사용하지 않는 대신 다음을 사용한다.``` [18] .init_array INIT_ARRAY 0000000000600e10 00000e10 0000000000000008 0000000000000000 WA 0 0 8 [19] .fini_array FINI_ARRAY 0000000000600e18 00000e18 0000000000000008 0000000000000000 WA 0..
LOB golem → darkknight : strncpy size overflow
LOB golem → darkknight : strncpy size overflow
2017.01.12golem - cup of coffee void problem_child(char *src){ char buffer[40]; strncpy(buffer, src, 41); printf("%s\n", buffer); } main(int argc, char *argv[]){ check argc
secure-execution mode
secure-execution mode
2017.01.11secure-execution mode어떤 바이너리를 실행하면, dynamic linker(ld.so)는 getauxval()를 이용해 auxiliary vector인 `` AT_SECURE`` 값을 가져와 ``c 0``인지 확인하고 ``c 0``이 아니면 secure-execution mode로 실행한다.2017/09/02 - [System/Exploit] - Return to VDSO using ELF Auxiliary Vectors leck 다음과 같은 경우, ``c AT_SECURE != 0``이 된다.``c eUID != rUID`` 또는 ``c eGID != rGID`` 인 경우 ( => setUID나 setGID가 걸려있는 경우 )non-root UID process가 capability를 ..
ltrace & strace
ltrace & strace
2017.01.07ltracelibrary trace. userspace API call의 흐름을 볼 수 있다.```bash-S -- Display system calls as well as library calls``` strace ( man )system call trace. system call의 흐름을 볼 수 있다.출력되는 binary값이 16진수가 아니라 8진수 이므로 주의!```bash-i -- print instruction pointer at time of syscall-f -- follow forks, -ff -- with output into separate files-e func -c | -C -- count time, calls, and errors for each syscall and report ..
/proc/<pid>/maps
/proc/<pid>/maps
2017.01.04proc filesystemman procprocfs ( proc filesystem )은 유닉스 기반 OS에서 프로세스에 대한 정보나, 시스템 정보를 파일 형식으로 제공하는 것을 말한다. `` /proc/``의 파일들을 확인해보면 크기가 0인데, 이는 procfs 파일은 내부 자료구조에 접근하기 위한 인터페이스에 가깝기 때문이다.procfs 파일을 출력하려는 순간, procfs driver가 system call을 수행하여 procfs 파일에 대한 결과값으로 출력할 내용을 생성하게 되고, 이를 procfs 파일을 통해 출력하는 것이다.때문에 출력되는 procfs의 내용은 디스크에 존재하지도 않고, 메모리에 적재되어 있는 것도 아니며 크기가 얼마가 될지는 런타임에 결정되기 때문에 알 수 없어 0으로 잡힌..
[Ubuntu] 초기 설정 / 업데이트
[Ubuntu] 초기 설정 / 업데이트
2016.12.25https://subicura.com/2017/11/22/mac-os-development-environment-setup.html[OS/LINUX & UNIX] - [*-nix] apt* family 및 OS update & upgrade[OS/LINUX & UNIX] - Java 관련 (JDK, 설치, ...)[OS/LINUX & UNIX] - SSH Server 설정 한글 설정 18.04 LTS메뉴-검색 - Language support 들어가서 `` Install/Remove Language`` 클릭하고 Korean 설치.재부팅메뉴-검색 - input sources 들어가서 Korean (Hangul) 추가. ( 꼭 이거여야 함. 그냥 Korean이나 Korean 101이런거 말고.) 원래 우분투..
ptrace
ptrace
2016.12.25ptrace ( process trace )```c#include long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);```ptrace를 호출하는 tracer 프로세스가 타겟 프로세스인 tracee 프로세스를 컨트롤할 수 있도록 하는 함수.gdb에서도 내부적으로는 ptrace를 사용한다.windows에서는 ATTACH에 ``c DebugActiveProcess()``를 사용하고, 아직 실행되지 않은 프로그램을 디버거로 실행할 때는 ``c CreateProcess()``에서 `` dwCreationFlags`` 속성에 `` DEBUG_PROCESS``를 지정해서 실행한다.그러나 Unix-based 에서는 둘 다 ``c ..
John the ripper
John the ripper
2016.12.25이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
로컬 접근으로 SAM & SYSTEM 획득 및 Windows password crack
로컬 접근으로 SAM & SYSTEM 획득 및 Windows password crack
2016.12.25Windows 설치 시 SYSTEM권한으로 실행되기 때문에 파일 시스템에 접근만 가능하다면 모든 파일을 얻어낼 수 있다.따라서 대상 시스템에 로컬 접근이 가능하다면 부팅디스크와 외부저장매체를 이용해 windows의 SAM, SYSTEM 파일을 얻어내서 크랙할 수 있다.사실 로컬 접근이 가능하면 하드를 아예 가져가서 분석해도 되는거겠지만, windows 패스워드를 잊었거나 특정 파일만 얻어내고 싶을 때 유용하게 사용할 수 있다.ophcrack이라고 windows password crack이 아예 LiveCD로 나온 것도 있기는 한데, 이도 rainbow table 기반이라 결국 table에서 매치되는게 없으면 brute force로 넘어가게 돼서 처음에 매치 안되면 굉장히 느리다.반면 직접 SAM을 얻어내..
[excp] 읽기 권한 없는 파일 복사하기
[excp] 읽기 권한 없는 파일 복사하기
2016.12.21쓰기 권한으로 파일 복사하기원래 읽기 권한이 있어야 파일 복사가 가능하도록 되어있지만, 실행 권한이 있는 경우 읽기 권한이 없어도 ptrace를 이용해 파일을 복사하여 내 소유 파일로 얻어낼 수 있다.파일을 실행하게 되면 해당 파일이 메모리에 적재된다는 점을 이용하여, ptrace로 프로세스의 가상메모리 공간 중 실행한 파일이 매핑된 공간에 접근해서 데이터를 추출해 파일에 쓴다.이렇게 얻어낸 파일은 원본 파일과 동일하게 동작하며, 얻어낸 파일에 gdb, strings 등을 사용할 수 있기 때문에 유용하게 활용할 수 있다.* 얻어낸 파일이 원본 파일과 완전히 동일하지는 않다.file 명령어 등을 이용해 속성을 확인해보면 손상된 것으로(stripped) 나온다. readelf : 섹션 안나옴, objdump..
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..