OS
[excp] 읽기 권한 없는 파일 복사하기
[excp] 읽기 권한 없는 파일 복사하기
2016.12.21쓰기 권한으로 파일 복사하기원래 읽기 권한이 있어야 파일 복사가 가능하도록 되어있지만, 실행 권한이 있는 경우 읽기 권한이 없어도 ptrace를 이용해 파일을 복사하여 내 소유 파일로 얻어낼 수 있다.파일을 실행하게 되면 해당 파일이 메모리에 적재된다는 점을 이용하여, ptrace로 프로세스의 가상메모리 공간 중 실행한 파일이 매핑된 공간에 접근해서 데이터를 추출해 파일에 쓴다.이렇게 얻어낸 파일은 원본 파일과 동일하게 동작하며, 얻어낸 파일에 gdb, strings 등을 사용할 수 있기 때문에 유용하게 활용할 수 있다.* 얻어낸 파일이 원본 파일과 완전히 동일하지는 않다.file 명령어 등을 이용해 속성을 확인해보면 손상된 것으로(stripped) 나온다. readelf : 섹션 안나옴, objdump..
.s 파일 수정
.s 파일 수정
2016.12.10자주 사용하는 shellcode를 -S 옵션으로 컴파일 한 결과 파일( inlineasm.s )`` __volatile__``을 사용했기 때문에 입력한 어셈블리 그대로 컴파일 되었다.```c .file "inlineasm.c" .version "01.01"gcc2_compiled.:.text .align 4.globl main .type main,@functionmain: pushl %ebp movl %esp,%ebp#APP push $0x0 push $0x0068732f push $0x6e69622f mov %esp, %ebx push $0x0 push %ebx mov %esp, %ecx mov $0x0, %edx mov $0xb, %eax int $0x80 #NO_APP.L1: leave ret.Lf..
GOT( Global Offset Table ) Layout과 link_map structure
GOT( Global Offset Table ) Layout과 link_map structure
2016.12.09ELF 파일의 Section header를 조사하여 got의 위치를 얻을 수 있다.위 파일의 got 크기는 0x20이므로 32byte임을 알 수 있다. `` Partial-RELRO``(default) 바이너리는 .got.plt를 사용한다. 이 경우 .got는 4byte에 0만 들어있다.`` Full-RELRO`` 옵션으로 컴파일된 바이너리는 .got를 사용한다. 이 경우 .got.plt가 아예 없다.따로 옵션을 주지 않으면 partial-RELRO로 컴파일되므로, .got.plt( 0x0804a000 )가 got라고 생각하면 된다. * 구식 OS는 .got.plt 없이 그냥 .got가 .got.plt를 포함하고 있는 경우도 있다. got[0], 첫번째 entry는 이 module(실행 파일)의 dyna..
[Linux] Memory Layout, Segment + Kernel
[Linux] Memory Layout, Segment + Kernel
2016.11.212017/01/04 - [System/LINUX & UNIX] - procfs stack의 최대 크기는``c RLIMIT_STACK ( usually 8MB, 0x08000000 )``이다. * 한 번 확장된 stack top은 다시 줄어들지 않는다.Text segment의 시작지점은 보통 ``c 0x08048000``이지만, 항상 그런 것은 아니다.dynamic library는 stack과 heap의 중간 Memory Mapping Region에 mapping되고, static library는 text segment에 mapping된다.Memory Mapping Region의 경우 library mapping 이외의 용도로도 사용되는데, anonymous memory mapping이라고 부르며, ``c..
[compile process] Shared Library
[compile process] Shared Library
2016.11.21windows에서 lib과 dll을 사용하듯, Linux-based system에서도 비슷한 개념의 라이브러리가 존재한다.크게 static library와 shared library로 나뉘며, shared library가 다시 link 시점에 따라 나뉜다. Linking과 Loading의 차이LinkingAll of the object files and any libraries are linked together to make your final program. For static libraries, the actual library is placed in your final program, while for shared libraries, only a reference to the library is ..
main startup routine bt
main startup routine bt
2016.11.15`` main``의 상위 frame은 `` __libc_start_main``이다. __libc_start_main`` __libc_start_main``은 `` init, fini, stack_end`` 등을 인자로 받는데, 첫 번째 인자로 `` main``의 함수 포인터를 받는다.```cint __cdecl _libc_start_main(int (__cdecl *main)(int, char **, char **), int argc, char **ubp_av, void (*init)(void), void (*fini)(void), void (*rtld_fini)(void), void *stack_end) .text:0000000000000A5D lea rdi, main ; main.text:000000..
[setuid] ruid, euid
[setuid] ruid, euid
2016.11.15passwd 등 내부적으로 `` ruid``를 체크하는 작업을 수행하려면 `` ruid``를 변경해 주어야 한다. `` setuid`` bit가 설정 되어있는 바이너리를 실행하면 `` euid``가 변경된다. `` ruid``는 `` euid``가 변경된 상태에서 직접 ``c setuid()``를 호출해줄 때 변경된다. 때문에 ``c setuid()``를 호출하지 않는 바이너리를 이용해 쉘을 실행하더라도 `` euid``만 변경되고 `` ruid``는 그대로인 상태다.이런 경우, 쉘을 실행하기 전에 ``c setuid()``도 실행하도록 하면 ``c ruid == euid``인 쉘을 얻을 수 있다.`` euid``만 변경된 쉘에서 ``c setuid(geteuid()) / system("/bin/sh")..
[shell] pipe
[shell] pipe
2016.11.03pipe란? 한 프로세스의 `` stdout``을 다른 프로세스의 `` stdin``으로 연결하는 IPC 방법이다. 파이프 한 개(r, w 한 쌍) 당 한 쪽 방향으로만 사용할 수 있다. ``` ↓ docking! ↓ -------pipe------- ---------process--------- -------pipe------- w -> r ⇒ stdin stdout ⇒ w -> r -------pipe------- ---------process--------- -------pipe------- ``` 이름없는 파이프 ```bash echo .... | File ( ...; cat ) | File ``` `` A | File`` : A의 표준 출력을 File의 표준 입력으로 연결한다. fifo ( na..
[Windows] 공유 폴더 설정
[Windows] 공유 폴더 설정
2016.11.01!!! 클라이언트 수 제한클라이언트 프로그램 중 파일을 받아올 때 마다 커넥션을 서너개 씩 막 열고 닫지는 않는 클라이언트 프로그램이 있다. 대표적으로 ES파일탐색기. 원래 안그랬는데 최근에 변경된 듯?이런 경우 사용자 수를 제한해버리면, 폴더를 눌렀는데 반응이 없거나, 파일 목록은 보이는데 재생할 수 없는 파일 형식이라고 뜨니 주의. # 공유폴더 등의 목적으로 생성한 계정을 로컬로그인 시 숨기는 방법.제어판 - 관리도구 - 로컬 보안 정책에서 로컬 정책 - 사용자 권한 할당 - 로컬 로그온 거부 에 개체를 추가하면 된다. 거부가 허용보다 우선하니 해당 계정의 그룹을 해제할 필요는 없다. RDP에서는 이 옵션이 필요 없다.windows server OS가 아닌 경우 한 OS에 여러 계정으로 로그인 할 수..
PLT, GOT
PLT, GOT
2016.11.01``c *(func@plt + 2) == func@got``다. PLT : Procedure Linkage TableGOT : Global Offset Table같은 file 내의 procedure라면 PLT가 따로 필요 없지만, 외부 library func를 호출할 때 PLT가 필요하다. linker가 PLT를 보고 func를 찾게 되기 때문. windows의 IAT와 비슷하다고 생각하면 된다. PLT는 GOT를 참조하여 해당 주소로 점프한다. dynamic linking함수를 호출할 때는 항상 PLT를 이용한다. * static 옵션으로 컴파일하면 바로 libc func 위치로 call하게 된다. system함수를 disassemble 해보면 PLT 영역의 system함수 항목이 출력된다. 해당 항목..
NetCat ( nc )
NetCat ( nc )
2016.10.25standalone server이를 이용하면 non-socket programming binary도 standalone server로 동작할 수 있다.근데 하나의 connection만 처리할 수 있으며 connection이 종료되면 nc도 꺼진다.```bash$ nv -vvv -e /bin/sh -l -p 1234``` ```bash$ rm -f /tmp/f; mkfifo /tmp/f$ cat /tmp/f | /bin/sh -i 2>&1 | nc -vvv -l -p 1234 > /tmp/f``` * `` -i`` 는 interactive 옵션인데, 대화형 모드로 띄워준다.interactive modestartup file을 읽어들이고, 프롬프트를 표시해준다.interactive mode를 백그라운드로 돌..
Windows Authentication [ SAM ]
Windows Authentication [ SAM ]
2016.10.14LSA , Local Security Authority [ lsass.exe ]SRM , Security Reference Monitor SAM , Security Account Manager SAMwindows 계정의 패스워드 해시를 저장하고 있는, *nix의 `` /etc/shadow``같은 파일이다.SYSKEY로 암호화 되어있기 때문에 SYSKEY를 이용해서 복호화해야 password hash를 얻을 수 있다.* 사실 단순히 password hash가 목적이라면 fgdump같은 툴을 사용해 memory에 올라가 있는 hash value를 바로 얻는 방법도 있다. FormatSAM 암호화를 풀면, windows 계정 패스워드가 다음과 같은 형태로 저장되어 있다.```username:SID:LM has..