전체 글
FSOP - _IO_flush_all_lockp ()
원리 기본적인 내용은 앞선 FSOP 들과 동일하며, _IO_FILE 구조체가 아닌 vtable 구조체의 값을 사용하는 함수이다. 더보기 https://wyv3rn.tistory.com/110?category=949837 _IO_FILE Arbitrary Address Read 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 없는 경 wyv3rn.tistory.com https://wyv3rn.tistory.com/112?category=949837 _IO_FILE Arbitrary Address Write 원리 큰 틀은 _IO_FILE Arbitrary Address Read..
iofile_aw
1. intro 2. code 및 분석 2.1 code // gcc -o iofile_aw iofile_aw.c -fno-stack-protector -Wl,-z,relro,-z,now #include #include #include #include #include char buf[80]; int size = 512; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } void read_str() { fgets(buf, sizeo..
Bypass IO_validate_vtable
1. intro 2. code 및 분석 2.1 code // Name: bypass_valid_vtable // gcc -o bypass_valid_vtable bypass_valid_vtable.c -no-pie #include #include FILE *fp; void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { init(); fp = fopen("/dev/urandom", "r"); printf("stdout: %p\n", stdout); printf("Data: "); read(0, fp, 300); fclose(fp); } 2.2 분석 main 함수 내에서 /dev/urandom 파일을 읽기 권한으로 연 뒤..
Bypass IO_validate_vtable
그냥 대충 훑어보면 절대 이해 못한다. 자세히 읽어보고 이해가 되면 넘어가자. 원리 _IO_FILE 구조체에서는 vtable을 참조하는데, vtable 내 함수를 조작할 수 있다면 임의의 함수를 실행할 수 있다. *libc 2.23 버전 이하와 2.24 버전 이상에서의 공격 방식이 조금 다르다. *2.29 이상에서는 완전히 패치 되었다. 취약점 앞서 본 _IO_FILE 구조체는 사실 혼자 있는 것이 아닌 vtable 구조체와 함께 한다. struct _IO_FILE_plus { FILE file; const struct _IO_jump_t *vtable; }; 즉, _IO_FILE_plus 구조체 내에 file, 즉 _IO_FILE 구조체와 vtable 구조체가 존재한다. _IO_jump_t _IO_ju..
_IO_FILE Arbitrary Address Write
1. intro 2. code 및 분석 2.1 code // Name: iofile_aaw // gcc -o iofile_aaw iofile_aaw.c -no-pie #include #include #include char flag_buf[1024]; int overwrite_me; void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int read_flag() { FILE *fp; fp = fopen("/home/iofile_aaw/flag", "r"); fread(flag_buf, sizeof(char), sizeof(flag_buf), fp); write(1, flag_buf, sizeof(flag_buf)); fclose(fp);..
_IO_FILE Arbitrary Address Write
원리 큰 틀은 _IO_FILE Arbitrary Address Read와 동일하다. https://wyv3rn.tistory.com/110 _IO_FILE Arbitrary Address Read 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 없는 경 wyv3rn.tistory.com 취약점 마찬가지로 read와 동일하지만, _flags 값과 구조체에 들어가는 데이터가 조금 다르다. Read 함수 함수 인자 read 함수의 구조는 아래와 같다. read(f->_fileno, _IO_buf_base, _IO_buf_end - _IO_buf_base); 각 인자의 주요점은 아래..
_IO_FILE Arbitrary Address Read
1. intro 2. code 및 분석 2.1 code // Name: iofile_aar // gcc -o iofile_aar iofile_aar.c -no-pie #include #include #include char flag_buf[1024]; FILE *fp; void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int read_flag() { FILE *fp; fp = fopen("/home/iofile_aar/flag", "r"); fread(flag_buf, sizeof(char), sizeof(flag_buf), fp); fclose(fp); } int main() { const char *data = "TEST FILE!..
_IO_FILE Arbitrary Address Read
문제와 함께 읽어야 이해가 쉽다. https://wyv3rn.tistory.com/111 _IO_FILE Arbitrary Address Read 1. intro 2. code 및 분석 2.1 code // Name: iofile_aar // gcc -o iofile_aar iofile_aar.c -no-pie #include #include #include char flag_buf[1024]; FILE *fp; void init() { setvbuf(stdin, 0, 2, 0); setv.. wyv3rn.tistory.com 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 ..
send_sig
1. intro 2. code 및 분석 2.1 code 이번 문제는 코드가 별도로 제공되지 않고, 문제 파일과 dockerfile만 제공된다. 그래서 IDA로 디스어셈블 해보았다. void __noreturn start() { setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 1, 0LL); write(1, "++++++++++++++++++Welcome to dreamhack++++++++++++++++++\n", 0x39uLL); write(1, "+ You can send a signal to dreamhack server. +\n", 0x39uLL); write(1, "++++++++++++++++++++++++++++++++++++++++++++++++++..
SigReturn-Oriented Programming
1. intro 2. code 및 분석 2.1 code // Name: srop.c // Compile: gcc -o srop srop.c -fno-stack-protector -no-pie #include int gadget() { asm("pop %rax;" "syscall;" "ret" ); } int main() { char buf[16]; read(0, buf ,1024); } ┌──(kali㉿kali)-[~/Downloads] └─$ checksec srop [*] '/home/kali/Downloads/srop' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x40000..