목록분류 전체보기 (285)
tmxklab
1. 문제 nc ctf.j0n9hyun.xyz 3027 1) mitigation 확인 2) 문제 확인 입력을 하고 이상한 값이 출력되면서 종료된다.(?) 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { unsigned int i; // [rsp+8h] [rbp-88h] char s1; // [rsp+Ch] [rbp-84h] char src[64]; // [rsp+10h] [rbp-80h] char dest; // [rsp+50h] [rbp-40h] unsigned __int64 v8; // [rsp+88h] [rbp-8h] v8 = __readfsqword(0x28u); setvbuf(_bs..
1. 문제 nc ctf.j0n9hyun.xyz 3026 1) mitigation 확인 2) 문제 확인 레지스터가 출력되고 값을 입력받음(진짜로 레지스터에 값을 넣는건지는 이따가 디버깅하면서 확인) 3) 코드 흐름 확인 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { alarm(5u); setvbuf(stdout, 0LL, 2, 0LL); build(); } unsigned int alarm(unsigned int seconds) 설명 : seconds초 후에 프로세스에 SIGALRM 시그널 전송 build()실행 3-2) build() void __noreturn build() { __int6..
해당 문제는 RTC(Return To Csu)기법에 관한 문제이다. 1. 문제 nc ctf.j0n9hyun.xyz 3025 1) mitigation 확인 2) 문제 확인 입력을 한 번 받고 끝난다. 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-40h] setvbuf(stdin, 0LL, 2, 0LL); write(1, "Hey, ROP! What's Up?\n", 0x15uLL); return read(0, &buf, 0x200uLL); } read(0, &buf, 0x200)에서 bof발생 2. 접근방법 일단 bof취약점이 발생해서 ret..
1. 문제 nc ctf.j0n9hyun.xyz 3024 1) mitigation 확인 이번에는 stripped된 파일임 2) 문제 확인 입력을 받고 끝난다. 3) 코드 흐름 확인 3-1) main() __int64 __fastcall main(__int64 a1, char **a2, char **a3) { char buf; // [rsp+0h] [rbp-10h] setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); read(0, &buf, 0x78uLL); return 0LL; } buf변수[rbp-0x10]에 0x78까지 입력받을 수 있음 → bof발생 2. 접근방법 bof를 통해 ret를 조작할 수 있다. system() 및 binsh문자열을 찾기 ..
1. 문제 nc ctf.j0n9hyun.xyz 3023 1) mitigation 확인 2) 문제 확인 system@plt는 주어졌다고 출력하면서 입력 값을 받을 수 있다. 3) 코드 흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rsp+0h] [rbp-10h] setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); fwrite("Easy RTL ha? You even have system@plt!\n", 1uLL, 0x27uLL, stdout); fflush(stdin); fgets(&s, 64, stdin); return 0; ..
1. unsorted bin attack unsorted bin에 등록된 chunk가 다시 재할당될 때 리스트에서 삭제하면서 발생한다. 이를 통해 특정 영역에 큰 수를 저장하거나 라이브러리 leak이 가능하다. 사용조건: Unsorted Chunk를 생성할 수 있어야 한다. Unsorted bin에 등록된 Free Chunk의 값을 변경할 수 있어야 한다. Free Chunk와 동일한 크기의 Chunk를 요청할 수 있어야 한다. Unsorted bin에 대한 내용 참고) heap(4) - glibc malloc(3) (feat. bin) 참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 이번에는 Free된 Chunk들을 다시 재활용..
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { __int64 v3; // rax int v4; // [rsp+4h] [rbp-Ch] unsigned __int64 v5; // [rsp+8h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); std::operator
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax char buf; // [rsp+0h] [rbp-10h] unsigned __int64 v5; // [rsp+8h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); while ( 1 ) { while ( 1 ) { menu(); read(0, &buf, 8uLL); v3 = atoi(&buf); if ( v3 != 3 ) br..
1. Unsafe Unlink Unsafe Unlink는 헤더 값이 조작된 fake chunk와 다른 인접한 chunk간에 병합이 일어나면서 비정상적으로 unlink되어 발생하는 취약점이다. 이를 통해 원하는 공간에 값을 작성하거나 Leak할 수 있다. 사용 조건 : 힙 영역을 전역 변수에서 관리 2개의 Allocated Chunk가 필요하며 한 개는 Fake Chunk를 생성할 수 있어야 함 첫 번째 Chunk를 통해 두 번째 Chunk의 헤더를 조작할 수 있어야 함 Unlink가 발생하는 이유 이전에 glibc malloc bin을 공부하면서 잠깐 Unlink가 한 번 언급되었던 적이 있었다. heap(4) - glibc malloc(3) (feat. bin) 참고 : GNU C Library의 Me..
1. 문제 1) mitigation확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-10h] unsigned __int64 v4; // [rsp+8h] [rbp-8h] v4 = __readfsqword(0x28u); setvbuf(_bss_start, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); while ( 1 ) { menu(); read(0, &buf, 4uLL); switch ( atoi(&buf) ) { case 1: create_heap(); break; case 2: edit_hea..