배경 바이너리 분석 방법에는 크게 2가지가 있다. 수동: gdb 같은 디버거로 어셈 코드를 한줄씩 실행하면서 레지스터와 메모리의 변환를 추적하는 분석 자동: angr와 같은 자동화된 분석 프레임워크를 사용 이 2가지는 상호보완적이다. 이 글에서는 자동 바이너리 분석 프레임워크 angr에 대해서 알아보겠다. 소개 angr는 바이너리 분석을 위한 다재다능한 파이썬 기반 프레임워크이다. 중요한 철학은 바이너리 분석 작업을 프로그래밍 방식으로 ...
Source Code: #include <stdio.h> #include <stdlib.h> #include <string.h> char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc<2){ printf("pass argv[1] a number\n"); return 0; } int fd = atoi( argv[1] ) - 0x...
Desc: Daddy told me about cool MD5 hash collision today. I wanna do something like that too! Source Code: #include <stdio.h> #include <string.h> unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; ...
코드 분석 int __fastcall __noreturn main(int argc, const char ** argv, const char ** envp) { char * v3; // rsi char * v4; // rdi __int64 v5; // rdx __int64 v6; // rcx __int64 v7; // r8 __int64 v8; // r9 const char * v9; // rsi...
문제 풀이 파일은 바이너리만 제공해주고, 보호기법은 모두 적용되어 있네요. ❯ ls racecar ❯ checksec racecar [*] '/HTB/pwn_racecar/racecar' Arch: i386-32-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled 먼저 IDA로 디컴파일...
// Name: ow_rtld.c // Compile: gcc -o ow_rtld ow_rtld.c #include <stdio.h> #include <stdlib.h> void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { long addr; long data; int idx; init(); pri...
문제 분석 // Name: rop.c // Compile: gcc -o rop rop.c -fno-PIE -no-pie #include <stdio.h> #include <unistd.h> int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Leak canary puts("[1] Leak ...
문제 분석 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); si...
Return to CSU ROP를 진행할 때는 가젯이 필요합니다. 예를 들어 puts(”Hello World”) 코드를 실행시키려고 하면 pop rdi ret 가젯이 필요합니다. 하지만 바이너리에 필요한 가젯이 없는 경우가 있습니다. 이런 상황에 사용할 수 있는 기법이 RTC기법입니다. [출처] https://wogh8732.tistory.com/156 ELF 파일은 위 사진처럼 start → libc_start_main → libc_csu_...
Canaries Canaries 또는 Canary word는 버퍼 오버 플로우를 감지하기 위해 버퍼와 제어 데이터 사이에 설정 된 값입니다. 버퍼 오버플로가 발생하면 Canary 값이 손상되며, Canaries 데이터의 검증에 실패하여, 오버플로에 대한 경고가 출력되고, 손상된 데이터를 무효화 처리됩니다. Types of canaries Terminator canaries Terminator Canaries는 Canary의 값을 문자열...