Security

dact 뭐 파일 압축을 해주는 놈인데 afl fuzzer를 이용해서 fuzzing 을 하고 이 dact를 exploit 해서 쉘을 얻어내는 것이 목표다. 일단 처음 시작은 어디서 어떻게 segmentation fault가 떴는지였다. input으로 crash_file 을 주었을 때 dact_common.c 의 478번째줄에서 file_extd_urlent++ 가 계속 되면서 접근할 수 없는 주소로 접근을 해버린다. 그리고 file_extd_urls는 char*[256]의 자료형이다. 즉 file_extd_urlent 가 256이 넘어가면 sfp,ret에 접근이 가능해서 원하는 곳으로 점프가 가능하다는 것이다. 저 parse_url_subst 함수가 어떻게 작동하는지는 잘 모르지만, 만약 여기서 ROP가..
윤성우의 열혈 C++ 책을 보면서 공부하던 도중, 오류가 있는 것 같아서 직접 해보려고한다 이 필자는 아래 코드에서 정수를 반환하며 메모리 공간이 할당되면서 초기화가 된다고 했다. int SimpleFunc(int n) { return n; } int main() { int num=10; cout
본 게시글은 free함수의 전체적인 루틴을 설명합니다. 자세한 코드분석은 나중에 따로 할 예정입니다. __libc_free free함수가 실행되면 먼저 __libc_free함수가 호출되어 __free_hook을 검사하고 값이 존재할 경우 jump 한다. 그리고 인자가 null일시에는 바로 return 을 하여 아무런 동작이 실행되지 않는다. 이후 아래 루틴을 따른다. mmap으로 할당한 청크 해제 libc_free에는 다음과 같은 루틴이 있다. if (chunk_is_mmapped (p)) /* release mmapped memory. */ { /* See if the dynamic brk/mmap threshold needs adjusting. Dumped fake mmapped chunks do n..
본 게시물은 malloc 함수에 대한 간략한 설명을 하는 곳입니다. 기초적인 heap 지식이 있다는 가정하에 작성되었습니다. (자세한 주석과 코드 분석글은 별도로 올라갈 예정입니다) 먼저 malloc 의 작동과정을 알기 이전에 arena에 대해서 간략하게 정리하겠다. Arena 우리는 main arena에 대해서는 자주 들어보았을 것 이다. arena는 heap영역을 관리하는 영역이다(fastbin, smallbin, largebin, topchunk 등등..). 멀티스레드 환경에서 heap을 관리하기 편하기 위해 만들어졌다(동기화 문제등). 그러나 스레드당 arena 가 하나씩 할당되는 것은 아니고 cpu의 물리코어 개수에 비례해서 최대 수가 정해져 있으며, 최대로 할당가능한 arena수가 넘어서게 되..
Maris Shop이라는 문제를 어쩌다가 풀게되었다. 사진은 그냥 뭔가 이름이랑 어울려보여서 가지고 왔다. 보안기법은 위 사진과 같고 환경은 Ubuntu 16.04 이다. 바이너리 분석을 먼저 해보겠다. 크게 add, show, remove, buy가 있다. Add int add() { unsigned int i; // [rsp+4h] [rbp-Ch] unsigned int j; // [rsp+4h] [rbp-Ch] unsigned __int64 idx; // [rsp+8h] [rbp-8h] sub_1188(); printf("Which item?:"); idx = read_long(); if ( idx > 6 || !idx ) // idx=0 or idx>=7 return puts("No such it..
glibc 2.26 버전 이상부터 사용가능한 방법같다. 이미 누군가 찾았을 것 같긴 한데... 나는 모른다. malloc분석을 하다 발견했다. 이 방법은 tcache가 꽉차서 smallbin을 사용하다가 tcache가 비워지는 경우, smallbin에 free된 청크가 3개 있을때(이 이상도 될듯), 중간에 있는 청크의 bk를 변조가능하면 원하는 fake chunk를 tcache에 넣을 수 있다. (단, bk를 실제 smallbin에 들어간 청크로 맞추어 주어야함) if (tcache && tc_idx counts[tc_idx] < mp_.tcache_count //해당 tcache에 자리에 있으면, s..
생각보다 코드가 그렇게 길지는 않다. sysmalloc은 나중에 다룰 함수인데, 처음 할당을 받을 때 heap의 주소를 결정해주는 함수 이다. (initialize) 아무래도 다중아레나의 경우 사용되는 remove fb 같은 함수들은 뭔지 잘 모르겠어서 찾아봐야겠다. static void* _int_malloc(mstate av, size_t bytes) { INTERNAL_SIZE_T nb; /* 패딩처리된 사이즈 */ unsigned int idx; /* 인접한 bin의 인덱스 */ mbinptr bin; /* 인접한 bin */ mchunkptr victim; INTERNAL_SIZE_T size; int victim_index; mchunkptr remainder; /* 분할되고 남은 청크 */ ..
드디어 malloc의 분석을 시작해본다. tcache 2 가 적용된 최신 버전의 libc로 분석을 한다. 기본적으로 설명은 어느정도 malloc의 동작 원리에 대해 알고있다는 가정하에 설명할 생각이다. Arena 먼저 간단하게 집고 넘어가야 할 것이 있다. 바로 Arena에 관해서이다. Arena는 스레드당 할당된 heap 부분을 관리하는 곳 이라고 할 수 있다. 그래서 메인스레드에서 할당되었으면 main arena라고 부르는 것이다. 아마도 이는 속도 때문이라고 생각한다. 분석하면서도 atomic 계산의 정확도에 대한 말이 나오는 것 보면 동기화 관련한 문제 때문인 것 같다. 그러나 스레드가 많아지게 되면 공간적인 낭비가 이루어지게 때문에 최대로 할당받는 아레나의 수는 64bit에서는 8*core 개수..
OSOR2
'Security' 카테고리의 글 목록