분류 전체보기
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..
malloc/calloc tip, wrapper
malloc/calloc tip, wrapper
2017.07.12calloc```cvoid *calloc(size_t nmemb, size_t size);```결과적으로 할당되는 크기는 ``c nmemb * size`` bytes다. 어차피 0으로 초기화 할거면, ``c malloc() + memset()`` 보다 ``c calloc()``을 사용하는게 더 빠르다. kernel이 memory를 제공하기 전에 zero로 만들고 제공할 수 있기 때문. malloc wrapper```c/* like malloc(), but terminates on failure */void * xmalloc(size_t size){ void *p; p = malloc(size); if (!p) { perror("xmalloc"); exit(EXIT_FAILURE); } return p;}..
[메모리 보호 기법] 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가 나오는데, 데이터 셋도 많이 필요하고 이렇게 ..
[python] subprocess, Popen
[python] subprocess, Popen
2017.07.03Note )subprocess로 실행하는 바이너리가 출력→입력대기 순서로 진행할 때,``c read() -> write()``를 주었는데도 제대로 동작하지 않는 경우가 있다.이는 실행하는 바이너리 자체에서 입력 대기 하기 전에 출력을 파이썬으로 보내주어야 하는데, 입력 대기가 끝난 이후에 파이썬으로 출력 내용을 보내기 때문에 발생하는 현상으로 보인다. 그래서, 파이썬 단에서는 파이프를 새로 만들든 무슨 짓을 하든 해결이 안되고, 바이너리에서 flush해주는 수 밖에 없는 듯. Popen세부적인 제어는 `` subprocess.Popen()``을 사용해야 한다.stdio 연결```python>>> p = subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subp..
[python] with / try-except
[python] with / try-except
2017.07.02with 파일 open, read는 이런식으로 사용한다. ```python with open("foo.txt", "w") as f: while True: line = f.readline() if not line: break print(line) ``` auto close를 위해 with를 사용하는게 좋다. with를 빠져나오면서 자동으로 close한다. 파일에서 데이터를 읽어오는데 read(), readline(), readlines() 함수를 지원한다. readlines()는 각 라인을 리스트로 반환한다. 대신 try - finally로 finally에서 `` close()``를 호출해 주는 방법도 괜찮다. 간단한 open은 with로, 다른 메소드를 호출해야 하는 등의 나머지 경우는 finally로 ..
[python] directory parse / glob / pathlib
[python] directory parse / glob / pathlib
2017.07.02```pythonos.getcwd() # working directory == python command를 실행한 pathos.path.dirname(os.path.abspath(__file__)) # 현재 파일이 위치한 directory```디렉토리의 파일을 얻는 방법은 ``py os.listdir()``과 ``py glob.glob()`` 두 가지가 있다.3.4 부터 ``py pathlib``이라는 고수준 파일 시스템 모듈이 있으니 이걸 쓰는게 좋다.```pythonfrom pathlib import Pathp = Path('.')attack_packages = [x.resolve() for x in p.iterdir() if x.is_dir()]a.suffix # asdf.py이면 .py 반환a.s..
[python] 람다(lambda), 함수형 fileter / map / reduce
[python] 람다(lambda), 함수형 fileter / map / reduce
2017.07.02아무래도, 파이썬에서는 filter, map, reduce 보단 list comprehension을 사용하는게 더 pythonic하다는 의견이 주류인 것 같다. https://www.artima.com/weblogs/viewpost.jsp?thread=98196 [python] Comprehension, Generator / iterator VS iterable / itertools lambda ```python lambda args : returns ``` 람다식은 `` filter, map, eval``같은 larger expression에 끼워서(inline) 사용하는 경우 가독성을 높여준다. 복잡한 상황에서는 명확한 ``py def``를 사용하는 편이 가독성이 더 좋다. 그리고 이런 식으로 람다식..
[python] Comprehension, Generator / iterator VS iterable / itertools
[python] Comprehension, Generator / iterator VS iterable / itertools
2017.07.02List Comprehension확실히 일반 for문 보다 속도 우위가 있다. [python] 프로파일링(profiling)reduce 사용한 코드와 비교해서 더 깔끔한 것으로 선택하면 될 듯. map filter도 마찬가지보통 reduce를 사용해야 하는 경우라면 list comprehension이 더 깔끔한 경우가 많기는 하다.순서가 보장된다. https://stackoverflow.com/questions/1286167/is-the-order-of-results-coming-from-a-list-comprehension-guaranteed `` result``를 `` a`` 리스트의 요소들 중 짝수인 요소들만 골라 `` *3`` 한 값들로 채우려면```pythonresult = [num * 3 fo..
[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이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.