분류 전체보기
libc 버전 문제
libc 버전 문제
2017.07.23libc.so 파일을 실행하면 버전, 컴파일 시스템 등등 정보가 출력된다.* glibc source는 하나지만, 컴파일 환경(OS, Compiler)에 따라 같은 버전의 다른 libc.so가 컴파일된다.* libc 버전에 따라 에러가 발생하는 경우는 확인했는데, 같은 버전에 시스템이 다른 경우(e.g., Debian과 Ubuntu) 에러가 발생하는건 아직 못봤다. #1바이너리를 컴파일한 시스템의 libc 버전과 바이너리를 실행하는 현재 시스템에서 사용하는 libc 버전이 다른 경우 relocation error가 발생할 수 있다. #2현재 시스템에서 사용하는 libc 버전과는 다른 버전의 libc를 `` LD_PRELOAD``를 이용해 지정해 실행하는 경우, relocation error가 발생하거나 s..
[glibc] malloc - checks
[glibc] malloc - checks
2017.07.22[malloc] fastbins size check [malloc] smallbins bk check & unlink [malloc] unsorted bin size check [malloc] unsorted bin unlink [free] MINSIZE check [free] invalid next size (fast) [free] double free check [free] invalid next size (normal) [free] unsorted bin link [realloc] unlink size vs. prev_size check [realloc] invalid next size
[glibc] malloc - 4
[glibc] malloc - 4
2017.07.21malloc sequence너무 큰 heap memory 할당을 요청하는 경우, ``c mmap()``을 사용해 아예 다른 곳에 공간을 할당한다. * mmap'ing threshold 값은 따로 설정되지 않은 경우 dynamic하게 결정된다. 보통은 대략 `` 0x20800`` 이상일 때. 요청에 맞는 fastbin에 chunk가 있는 경우 반환한다. 요청에 맞는 smallbin에 chunk가 있는 경우 반환한다. large bin size request일 경우, 모든 fastbins's chunks를 (적당히 합치면서) unsorted bin으로 옮긴다. ``c if (have_fastchunks (av)) malloc_consolidate (av);`` unsorted bin에 있는 chunk들을 (..
[glibc] malloc - 3
[glibc] malloc - 3
2017.07.21* ASLR is disabled application's initial heap프로그램이 ``c malloc()`` 등 직접 heap을 할당받는 코드를 실행하지 않더라도, 기본적으로 `` 0x21000``(132KB) 크기의 initial heap을 가지고 있으며 이 heap은 main_arena에 해당한다.```bash00400000-00401000 r-xp 00000000 08:01 1442324 /home/umbum/heap_study/no_malloc00600000-00601000 r--p 00000000 08:01 1442324 /home/umbum/heap_study/no_malloc00601000-00602000 rw-p 00001000 08:01 1442324 /home/umbum/hea..
[glibc] malloc - 2
[glibc] malloc - 2
2017.07.19circular doubly linked listfastbin을 제외한 나머지 bins는 circular doubly linked list 구조를 사용한다.fastbin range에 속하지 않는 chunk일 경우, chunk 하나만 ``c free()``해도 ``bash (unsorted bin-8)``을 가리키는 `` fd/bk``가 생성된다.* fastbin은 `` main_arena``를 가리키지 않으며 두 개를 ``c free()``해야 첫 번째 free'd chunk에 `` fd``가 생성된다. Note) `` fd/bk``가 가리키는 곳이 그대로 다음 `` fd/bk``가 아니라, `` mchunkptr``이다. 그래서 `` +8`` 해주어야 다음 `` fd/bk``가 나온다. `` fd/bk..
[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의 위..
[python] plotly
[python] plotly
2017.07.19Plotly? Python, JS, R을 지원하는 오픈소스 차트 라이브러리. https://plot.ly/python/user-guide/ https://plot.ly/python/reference/ https://plot.ly/python/line-charts/ https://plot.ly/python/network-graphs/ https://plot.ly/python/configuration-options/ DiGraph에서 방향 표현하기 Plotly-python, Dash, Plotly-js Plotly-python은 파이썬에서 그래프를 구성하고 파일 기반으로 그래프를 생성해준다. 그래서 그래프 이외에 select box를 붙인 다던가, 이 select box의 동작이 그래프에 영향을 미친다던가 ..
[python] graph visualization
[python] graph visualization
2017.07.19graphnetworkx anaconda에 포함되어 있음. 사용법도 간단하지만 룩이 구리고 pure-python implementation이라 속도가 굉장히 느리다.graphviz 논문에 나올법한 상당히 구식 룩이나 쓰기 편함. 활용도가 높음. 사용하기 위해서는 graphviz라는 프로그램 자체와 이를 python과 연결해주는 라이브러리 둘 다 설치해야 한다. * graphviz 설치하고 bin폴더 환경변수에 등록해주어야 함. 라이브러리로는 ``py graphviz, pygraphviz, graphviz-python``이 있는데 그냥 ``py graphviz``가 제일 무난하고 대중적인 듯. 그리고 이거 사용할 때 아주 주의해야 할 것이 ``py ":"``가 node나 edge에 들어가 있으면 그 앞까지..
[메모리 보호 기법] 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..