hacking

hacking/pwnable

SROP

SROP기법은 Sigreturn-oriented-programming의 약자로 sigreturn syscall을 이용해 ROP를 하는 기법이다. Sigreturn? 사용자가 Signal을 발생시킬때 프로세스는 Kernel Mode로 전환되게된다. 그 후 커널은 User Mode로 돌아 가기 전에 do_signal() 함수를 실행한다. 해당 함수는 handle_signal() 함수를 호출하여 사용자가 발생시킨 Signal을 처리한다. 그리고 handle_signal() 함수는 setup_frame() 함수를 호출하여 User Mode Stack에 context를 저장한다. 해당 context의 내용은 아래에 있다. 프로세스가 다시 User Mode로 전환되면 signal handler가 실행된다. 그리고 ..

hacking/pwnable

libc.so.6

wargame을 풀 때 제공되는 libc.so.6 파일은 wargame을 풀 때 중요한 역할을 한다. libc의 버전이 정말 중요한데 libc의 버전을 알아낼 수 있는 방법은 아래와 같다. ./libc.so.6 --version 위와 같이 명령어를 쓰게 되면 libc버전이 출력되게 된다. GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11) stable release version 2.23, by Roland McGrath et al. Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not ..

hacking/pwnable

Lazy Binding

Lazy Binding이란 Dynamic Linking 방식으로 컴파일된 ELF 바이너리는 공유 라이브러리에 있는 함수의 주소를 동적으로 가져오기 위해 사용하는 방법이다. 이때 GOT(Global Offset Table) 테이블을 이용하게 된다. GOT 동작 과정 우선 함수가 처음 호출될 때 plt와 got의 값이다. call 명령어를 보면 plt를 호출하고 있다. 그리고 plt는 got를 참조하기 때문에 got로 jump하게 된다. 이때 got의 앖은 plt+6의 주소가 들어있다. 그리고 난 후 _dl_runtime_resolve 함수가 호출된다. _dl_runtime_resolve _dl_runtime_resolve(int reloc_offset, struct link_map *l) ; 해당 함수의 ..

hacking/pwnable

_IO_FILE

개요 파일 구조체를 이용하면 출력 함수가 없어도 libc를 leak하거나 Fake File Stream을 만들어 우리가 원하는 함수의 호출이 가능하다. 파일 구조체 우선 파일 구조체는 아래와 같이 구성되어 있다. struct _IO_FILE_plus { FILE file; const struct _IO_jump_t *vtable; }; struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ /* The following pointers correspond to the C++ streambuf protocol. */ char *_IO_read_ptr; /* Current read pointer */ char *_IO_..

hacking/pwnable

Stack Pivoting

개요 Stack Pivoting은 쓰기 가능한 영역에 Fake Stack을 구성해놓고 Chaining하는 기법이다. 해당 기법은 아래와 같을 때 사용한다. ROP를 사용하기에 buffer의 사이즈가 작은 경우 main 함수로 돌아갈 수 없는 경우 함수의 SFP를 이용하여 rbp,rsp 레지스터를 조작하여 fake stack으로 실행 흐름을 옮긴 뒤 미리 작성해둔 fake stack의 코드를 실행해 exploit을 할 수 있게 된다. 선제조건 보통 Stack Pivoting은 bss 영역을 사용하는데 위의 경우가 아니더라도 stdout or stdin의 주소를 알아내거나 File stream을 임의로 조작할 때 사용할 수도 있다. 우선 Stack Pivoint기법을 사용하기 위해선 아래와 같은 조건들이 필..

hogbal
'hacking' 카테고리의 글 목록 (6 Page)