본문 바로가기

system

LD_PRELOAD # LD_PRELOAD 프로세스 실행 과정 중 라이브러리를 로딩할 때, LD_PRELOAD 변수가 설정되어 있다면 해당 변수에 지정된 라이브러리를 먼저 로딩하고, 이 중 libc 함수명과 동일한 함수가 있다면 해당 함수를 먼저 호출해 준다. 이러한 특성을 이용하여 후킹이 가능하다. but, LD_PRELOAD 는 setuid 가 걸려 있거나 다른 소유자의 파일의 경우 영향을 줄 수 없는 등의 제한 사항이 있다. # OS 별 PRELOAD 환경변수 Linux : LD_PRELOAD AIX : LDR_PRELOAD Solaris : LD_PRELOAD FreeBSD : LD_PRELOAD # test # [*] LD_PRELOAD TEST!! # fopen success...! 컴파일하여 실행하면 "test.. 더보기
ctors, dtors section GNU Compiler 는 컴파일 시 .ctors, .dtors section 을 생성한다. .ctors 속성의 함수는 main() 전에 실행되고, .dtors 속성의 함수는 main() 종료 후에 실행된다. 따라서, main() 종료 후 .dtors 함수가 실행된다는 점을 이용해, 이 부분을 조작한다면 eip 를 control 할 수 있다. 간단하게 테스트 해보자. __attribute__((constructor)) : .ctors __attribute__((destructor)) : .dtors constructor 속성의 함수는 main() 전에 실행되고, destructor 속성의 함수는 main() 종료 후 실행된다. 위의 소스코드를 Compile 후 실행시켰을 때, ./test # [*] ct.. 더보기
core dump 생성 일반적으로 core dump 파일 생성이 되지 않을 때, # ulimit -c unlimited // core file size unlimited setuid 가 설정된 프로그램의 경우 보안 문제로 인해 기본적으로 core dump file 생성하지 않는다. # sysctl -w fs.suid_dumpable=2 위 명령을 이용하여 core dump 파일을 생성할 수 있다. 더보기
fake ebp 기법 fake ebp 기법은 말 그대로 ebp 를 속이는 기법이다. 이 기법은 주로 ret 까지만 덮어쓸 수 있고, 특정 영역(스택(\xbf), 라이브러리(\x40)) 에 필터링이 될 때 유용한 기법이다. fake ebp 공격의 핵심은 leave - ret 이다. leave # mov esp, ebp # pop ebp ret # pop eip # jmp eip sfp 를 조작하고, 처음 호출하는 ret 주소에 leave - ret gadget 을 실행시킴으로써 원하는 코드를 실행시킬 수 있다. 더보기
difference system call and library function "system call" 이란 커널의 자원을 사용자가 사용할 수 있도록 만들어 놓은 함수이다. system call 을 호출하게 되면 커널모드로 전환하여 실행하게 되는데.. 이러한 이유로는 프로세스가 커널 모드에서 실행되는 경우에만 수행될 수 있는 작업들이 있기 때문이다. 만약 system call 사용하고자 한다면 별도로 사용자 모드에서 메모리 할당이 필요하다. "library function" 이란 일반적으로 사용자들이 많이 사용하는 기능을 미리 함수로 만들어 놓은 것들로, 문자열 처리, 표준 입출력 등의 함수가 여기에 해당한다. libary function 은 system call 과 다르게 사용자 모드에서 실행된다. library function 을 호출하면 사용자 공간에 메모리 공간을 할당하기에.. 더보기
ltrace사용법 # man ltraceNAME ltrace - A library call tracer ltrace 는 "라이브러리 호출 추적" 으로 정의되어 있다. 이러한 기능은 디버깅시 유용하게 사용할 수 있다. # ltrcae --help // 다음 명령을 통해 자세한 사용법을 알 수 있다. -a, --align=COLUMN secific 열에 반환 값을 정렬 -A ARRAYLEN 배열 요소의 최대 값을 출력 -c 카운트 시간, 함수 호출에 대한 요약 보고후 종료 -C, --demangle 로우레벨 심볼을 유저-레벨 이름 으로 디코딩 -D, --debug=LEVEL 디버깅 활성화 -Dh, --debug=help 디버깅 도움말 표시 -e expr 추적중인 이벤트의 수정 -f 자식( fork() 와 clone()) 을 .. 더보기
msfconsole shellcode metasploit 을 이용하여 shellcode 만드는 방법을 소개하겠다. # msfconsole # show payloads show payloads 명령을 실행하면 다음과 같이 많은 os 환경이나 목적에 따라 여러 가지 shellcode 목록을 볼 수 있다. linux/x64/shell_bind_tcp normal Linux Command Shell, Bind TCP Inline linux/x64/shell_bind_tcp_random_port normal Linux Command Shell, Bind TCP Random Port Inline linux/x64/shell_find_port normal Linux Command Shell, Find Port Inline linux/x64/shell_r.. 더보기
rp(find rop gadget) rop gadget 을 찾아주는 도구이다. 위 그림은 "pop" 에 대한 gadget 을 찾기 위해 실행한 결과 중 일부이다. 아래의 사이트에서 받을 수 있으며, 사용법 또한 설명되어 있다. https://github.com/0vercl0k/rp 더보기
checksec.sh 해당 바이너리에 어떤 보호 기법이 적용되어있는지 간단하게 체크할 수 있는 스크립트이다. http://www.trapkit.de/tools/checksec.html 더보기
Easy RM to MP3 Converter Exploit 환경 OS : Windows XP Service Pack 2 취약 프로그램 : Easy RM to MP3 Converter v2.7.3.700 사용 도구 : Immunity Debugger, OllyDbg, Python 이 응용 프로그램은 20000 ~ 30000byte 크기의 .M3u 파일을 로드할 때 BOF 취약점이 발생한다. Immunity Debugger를 이용하여 정확한 RET 주소를 덮어쓰기 위해 offset 을 구해보도록 하겠다. "A" 를 20000개만큼 채워넣고, Immunity Debugger 에서 10000개의 패턴을 생성하여 crash가 터지는 offset 확인한다. 26039 위치에서부터 crash가 터지는 것을 알 수 있다. - - - - - - - - - - - - - - - .. 더보기