Security
[glibc] malloc - 1
[glibc] malloc - 1
2017.07.19Heap요청에 따라 할당되는, chunk의 형태로 나뉠 수 있는 (인접한)연속된 메모리 영역을 의미한다. 예전에는 한 어플리케이션에 하나의 힙만 존재했지만, 지금은 한 어플리케이션이 여러 힙을 가질 수 있다.각각의 heap은 하나의 arena에만 속할 수 있다. Chunk실제로 ``c malloc()``으로 할당/반환받게 되는 영역을 말한다. 8 bytes의 배수로 할당된다.* 64bit OS에서는 16 bytes의 배수로 할당된다.Glibc's malloc은 chunk-oriented다. 커다란 heap을 다양한 사이즈의 chunk로 나눠 할당한다.하나의 chunk는 하나의 heap 내부에 존재하며, 당연히 하나의 arena에 속한다.각 chunk는 size가 얼마인지, adjacent chunk의 위..
[메모리 보호 기법] PIE
[메모리 보호 기법] PIE
2017.07.16symbol 없을 때나 PIE가 걸려있을 때 디버깅`` Entry point + offset``으로 bp 걸면 되는데, offset은 IDA로 알아내고,Entry point는 0x00에 bp걸고 실행한 다음 첫 번째 `` call``에서 리턴되는 값( ``bash $rax`` )이 Enrty point또는 그냥 `` info file`` Entry point == `` start`` 함수의 시작 지점`` start``는 첫 번째 `` arg``로 `` main``의 func ptr을 넘기면서 `` __libc_start_main``을 호출하므로, `` call`` 직전에 넘어가는 `` arg``가 `` main``이다. Position-Independent Executables바이너리에 PIE를 설정하려..
[메모리 보호 기법] RELRO
[메모리 보호 기법] RELRO
2017.07.15RELocation Read-Only!!! ``bash readelf -S`` 결과가 `` W``권한이 있는 것으로 나오더라도 실제로 해보면 fault가 발생하므로 주의. Partial-RELROdefault 옵션이며, `` .ctors(.init_array), .dtors(.fini_array), .jcr, .dynamic`` section이 Read-Only 상태가 된다.`` .got``에 `` W`` 권한이 있기 때문에 GOT Overwrite가 가능하다.```.got.plt : 0x601000 ./p_RELRO 601028WRITE : BBBB(0x601028)```-Wl,-z,norelroFull-RELRO컴파일 시 Full-RELRO 옵션을 주면 `` .got`` section도 추가로 Rea..
[메모리 보호기법] ASLR, FORTIFY_SOURCE
[메모리 보호기법] ASLR, FORTIFY_SOURCE
2017.07.13ASLR : Address Space Layout Randomization프로세스의 가상 주소공간에 heap, stack, libc( shared library's plt ) 등이 mapping될 때 그 위치를 프로그램 실행 시 마다 랜덤하게 변경하는 기법.windows는 vista 이상, linux는 kernel 2.6.12 이상에서 적용. exploit``c fork()``하는 경우 parent의 메모리를 그대로 가져오기 때문에 ASLR이 적용되지 않는다.서버 프로그램을 재시작하는 경우 ASLR이 적용되어 재시작하기 전과 mapping addr이 달라지게 되므로 주의. random stack offset만 적용되어 있고 shared library에는 적용되지 않는다면 쉽게 RTL할 수 있으며, sha..
gdb peda / gdb-multiarch
gdb peda / gdb-multiarch
2017.07.13nxtest```bashprint main_arena // main_arena 구조체를 정리해서 출력.patch 0x555555757000 "/bin/sh" // set 대체. hex나 dex를 입력해도 잘 동작.dumpargs -- Display arguments passed to a function when stopped at a call instructionstrings``````bashfind "/bin/sh" libcfind 0xdeadbeef allfind "..\x04\x08" 0x08048000 0x08049000```바이너리 정보 출력```bashinfo sharedinfo auxvvmmap [binary || libc || stack || all || ...] // procfselfsy..
gdb
gdb
2017.07.12fork/exec 설정peda와 cgdb를 사용할 것. ```bashset env LD_PRELOAD=./libc.so.6set {void*}0x80dfff7a = 0xffset $rdx=0x98583``````bashx/4x &main_arenax/4x &__malloc_hookfind [/size-char] [/max-count] start_addr, +len, val1 [, val2, ...]find [/size-char] [/max-count] start_addr, end_addr, val1 [, val2, ...]``````bashwatch $eax //eax가 변경될 때 마다 중단d [num] // bp 지우는 것과 똑같다.display $eax //중단될 때 마다 eax값 출력``````ba..
[메모리 보호 기법] SSP +Canary (prologue) / DEP
[메모리 보호 기법] SSP +Canary (prologue) / DEP
2017.07.11SSP : Stack Smashing Protector ( link )로컬 변수 위치 재배치로컬 변수 전에 포인터 배치stack canary 삽입 disable컴파일 옵션에 다음을 지정한다.```bash-fno-stack-protector``` stack boundary (정렬) 설정 컴파일 옵션```bash-mpreferred-stack-boundary=x````` x``의 기본 값은 4이고, 일반적으로 2를 준다. stack boundary는 `` 2^x``로 설정된다.e.g., 기본 값은 4이므로 기본 stack boundary는 `` 2^4=16`` Byte.`` x == 2``이면 stack boundary는 `` 2^2=4`` Byte. CanaryPrologue 직후 `` fs`` 등 seg..
[Samsung CTF 2017] ASM (Addition, Subtract, and Multiplication)
[Samsung CTF 2017] ASM (Addition, Subtract, and Multiplication)
2017.07.10ASM : Addition, Subtract, and Multiplication웹페이지 접속start이미지 가져오기정답 추론정답 입력팝업 안뜨면 정답인것.정답이면 학습 데이터에 (라벨, 데이터) 쌍 추가하고다음 문제 이미지 가져오기...반복오답이면 모은 학습 데이터를 바탕으로 학습...반복 데이터셋을 어떻게 정의할지가 문제인데.1. 그냥 이미지 전체를 학습시키기.피연산자들이 한 자리 숫자이면 classification 해야 하는 경우의 수가 그렇게 많지는 않으니까 이렇게 해도 되겠지만두세 자리 숫자도 나온다. 그렇게 되면 분류해야 하는 경우의 수가피연산자에 들어갈 수 있는 경우의 수가 각각 999, 연산자 +-/ 경우의 수 3 이니까999 * 4 * 999가 나오는데, 데이터 셋도 많이 필요하고 이렇게 ..
[0ctf] BABYHEAP - fastbin attack, chunk overlap
[0ctf] BABYHEAP - fastbin attack, chunk overlap
2017.07.02https://github.com/umbum/Python/blob/master/exploit/0ctf_babyheap.py 2. Fill에서 Size를 지정할 때, chunk의 size보다 크게 지정할 수 있기 때문에 다음 chunk의 fd를 덮어 쓸 수 있고, 이를 이용해 원하는 곳에 chunk를 만들어 반환하도록 할 수 있다. ( fastbin attack )1. Allocate로 원하는 곳(execution point)에 chunk를 만든 다음, 2. Fill로 원하는 데이터를 쓴다. execution point로는 GOT는 못쓰고(FULL RELRO), hooking function pointer인 `` __malloc_hook``을 사용할 수 있다. execution point addr을 알아내..
[SecuInside 2017] BABYHEAP : realloc(ptr, 0) / UAF
[SecuInside 2017] BABYHEAP : realloc(ptr, 0) / UAF
2017.07.02clue``c read()``에서 변수 크기보다 큰 10byte를 받는다.``c -``가 들어가 음수가 될 수 있다.10byte를 받지만, 1byte만 비교한다. ==> 첫 번째 byte가 `` 0xff``를 초과하도록 만들 수 있다. ```babyheap: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped CANARY : ENABLEDFORTIFY : ENABLEDNX : ENABLEDPIE : ENABLEDRELRO : disabled``` ```0x555555757000: 0x0000000000000000 0x000000000..
x64/x32 dbg
x64/x32 dbg
2017.07.01이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
인증(Authentication)과 인가(Authorization)
인증(Authentication)과 인가(Authorization)
2017.06.28인증 / 인가 인증 / 인가 정보 유지는 세션과 SID를 기반으로 한다. 인증 ( Authentication ) 사용자의 신원을 증명하는 것. e.g., 로그인한 사용자는 인증된 사용자. 인가 ( Authorization ) 특정 리소스에 접근할 수 있는 권한을 부여하는 것. 접근 제어(access control)라고도 볼 수 있다. Identification / Verification / Authentication / Certification https://www.jumio.com/identification-authentication-verification-compared/ certification은 자격(자격증)을 증명한다는 의미임. 신원 증명의 뜻은 아니다. authentication은 인증. 너가..