목록Security (73)
tmxklab
1. ARM(Advanced RISC Machine) 임베디드 기기에 주로 사용되는 RISC 프로세서 모바일 기기 또는 IoT 디바이스에도 사용됨 저전력을 사용하도록 설계됨 1) Register r0 ~ r15까지 총 16개의 범용 레지스터를 가지고 있으며 다음 3가지의 레지스터는 특수 용도로 사용된다. r13(SP, Stack Pointer) : 스택의 주소를 저장하는 레지스터, ESP와 비슷한 역할, 현재 Stack을 어디까지 쌓아 두었는지 가리킴 r14(LR, Link Register) : 함수 호출시 되돌아갈 함수의 주소가 저장되는 레지스터, 함수 호출 전 LR에 리턴 주소 저장하고 branch(jump) r15(PC, Program Conuter) : 현재 어디를 수행하고 있는지 가리키는 레지스..
pwnable.kr문제 중에 leg라는 문제를 풀다가 나중에 ARM 바이너리를 실행하거나 디버깅할 때 참고하면 좋을 것 같아 짧게 정리하게 되었다. (ubuntu 18.04 ≥) test용 소스코드는 pwnable.kr의 leg.c를 참고하였고 환경은 ubuntu 18.04에서 진행되었다. 1. Install gcc sudo apt-get install gcc-7-multilib-arm-linux-gnueabi -y sudo apt-get install gcc-7-multilib-arm-linux-gnueabihf -y 2. Install qemu-user-static & gdb-multiarch sudo apt-get install qemu-user-static sudo apt-get install g..
x64dbg에서 명령어 넣는 곳에 다음과 같이 입력하면 됨 init "실행 파일 path", "parameter" 예를 들어 "C:\Users\sec\Desktop\ROPgadget --binary pwn"을 실행시키려면 init "C:\Users\sec\Desktop\ROPgadget", "--binary pwn" (중간에 쉼표 꼭 붙여야 함, 파라미터 넣는 부분 위에서는 "--binary pwn" 이 부분에 여러 개의 파라미터가 올 수 있는 상황이 있을 수 있는데 파라미터들 간에는 쉼표 안 넣어도 됨)
checksec스크립트나 peda-gdb, pwndbg를 이용하면 mitigation확인할 수 있음 1. ASLR(Address Space Layout Randomization) 메모리 상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때마다 데이터의 주소가 바뀌게 하는 기법 현재 실행되고 있는 프로세스 주소 매핑 확인 cat /proc/self/maps → 주소가 랜덤하게 바뀌는 것 확인 ASLR 활성화 및 비활성화 echo [0, 1, 2] > /proc/sys/kernel/randomize_va_space [0] : ASLR 비활성화 [1] : 랜덤 Stack, Library 활성화 [2] : 랜덤 Stack, Library, He..
1. RTC(Return to csu) ROP를 해야하는데 가젯 제한으로 rdi, rsi, rdx를 구성하기 힘들 때 유용하게 사용할 수 있는 기법으로 __libc_csu_init()을 이용한다. csu & __libc_csu_init() 참고 자료) Linux Binary Execution Flow(main함수 호출 및 종료 과정) main()가 호출되고 종료되는 과정에 대한 지식이 필요하여 이번에 정리하게 되었다. 우리가 흔히 .c파일을 작성하여 컴파일 과정을 마치면 결과물로 linux실행파일인 elf파일이 생성된다. 이제 elf파 rninche01.tistory.com 위 참고 자료를 보면 알 수 있듯이 __libc_csu_init()에서는 __init_array에 설정된 함수 포인터를 읽어서 호출..
FSOP기법을 사용하기 위해서는 file stream을 사용하는 함수가 존재해야하고 file stream을 변조할 수 있으면 가능하다. FSOP를 통해서 할 수 있는 거는 libc주소를 릭하거나 file stream의 vtable주소를 변조하여 원하는 함수로 이동할 수 있다. 이거를 이해하기 위해서 먼저 _IO_FILE struct, _IO_FILE_plus struct를 이해해야 한다. 참고 : stdout flag를 이용한 libc leak stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak &...
_IO_FILE struct, _flags, _IO_FILE_plus struct, vtable 등에 관한 개념은 다음 링크를 참고하길 바란다. stdout flag를 이용한 libc leak stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak &.. rninche01.tistory.com 1. fclose() 내부 루틴 fclose에 대한 코드는 glibc/libio/iofclose.c에 있으며 함수 이름은 _IO_new_fclose이다. 1.1 _IO_new_fclose() int _IO_new_..
stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak & fastbin dup 1. 문제 nc ctf.j0n9hyun.xyz 3033 1) mitigation 확인 2) 문제 확인 3) 코드 흐름 확인 3-1) main() int __cdecl __noreturn main(int argc, const char **argv.. rninche01.tistory.com 1. 프로세스 _IO_FILE struct의 멤버 변수 _flags를 특정한 값(하위 2byte를 0x1800)으로 변경하고 _flags부터..
1. tcache란? tcache(Thread local Caching)란 멀티 스레드 환경에서 메모리 할당속도를 높이기 위해 glibc 2.26버젼 이상부터 생겨난 기술이다. 이전에 멀티 스레드 환경에서 Arena라는 개념을 도입하여 각 스레드당 힙 메모리를 제공하여 서로 간섭없이 힙 작업을 빠르게 수행할 수 있도록 도와준다고 하였다. tcache라는 개념 또한 멀티 스레드 환경에서 힙 작업을 빠르게 수행할 수 있도록 도와주는 기술이다. tcache는 작은 단위의 메모리 할당이 필요할 경우 arena를 참조하지 않고 바로 메모리를 할당할 수 있도록 각 스레드 당 thread cache라는 영역을 제공함으로써 메모리 할당 속도를 높일 수 있는 기술이다. 이제부터 tcache에 대해 자세히 설명하도록 하겠..
어셈블리어로 쉘 코드를 작성할 때 종종 system call table을 찾아보는 일이 있어서 간략하게 정리하도록 하였다. system call 이란? 운영체제에서 커널 모드와 유저 모드로 나뉘게 되는데 유저 단에서 커널 영역의 기능을 사용하고자 할 때 system call을 통해 필요한 기능을 수행할 수 있게 도와준다. 커널은 운영체제의 핵심으로 프로세스, 하드웨어, 등등 컴퓨터 자원을 효율적으로 관리하는 역할을 가진다. 가끔 유저단에서 파일을 읽거나 쓰거나 또는 화면에 출력하거나 이러한 기능들은 커널에서 담당하므로 시스템 콜을 통해 유저 단에서 커널의 기능을 사용할 수 있도록 도와준다.(ex) read(), write(), open()) 참고 자료 : books.gigatux.nl/mirror/ker..