Write-ups
-
feedme - DEFCON 2016Write-ups/CTFs 2020. 3. 1. 20:43
Prob Info 32bit 프로그램이며 NX만 활성화되어있다. Code static linked에 모두 스트립되어있어 함수를 잘 찾아줘야한다. 간단하게 start에서 시작해서 메인부터 찾아줬다. int __cdecl main(int argc, const char **argv, const char **envp) { signal(14, (int)sub_8048E24); alarm(150); setvbuf((unsigned int *)off_80EA4C0, 0, 2, 0); sub_804F820((int *)off_80EA4BC); sub_80490B0(); return 0; } 함수 인자보고 대충 예상해서 이름을 맞춰줬다. void sub_80490B0() { unsigned __int8 v0; // al..
-
houseoforange - HITCON 2016Write-ups/CTFs 2020. 2. 27. 18:49
Prob Info 모든 보호기법이 걸려있다. 또한 이름에서 알 수 있듯이 House of Orange 문제이다. Code void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { signed int v3; // eax setup(); while ( 1 ) { while ( 1 ) { menu(); v3 = read_long(); if ( v3 != 2 ) break; see_house(); } if ( v3 > 2 ) { if ( v3 == 3 ) { upgrade_house(); } else { if ( v3 == 4 ) { puts("give up"); exit(0); } LABEL_14: puts("Invalid choice"); } ..
-
speedrun-009 - DEFCON 27Write-ups/CTFs 2020. 2. 22. 14:52
Prob Info 모든 보호기법이 켜져있다. Code void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { setvbuf(stdout, 0LL, 2, 0LL); if ( !getenv("DEBUG") ) alarm(5u); banner(); vuln(); finish(); exit(0); } "DEBUG"라는 환경변수가 있으면 5초 알람을 설정하지 않는다. 시작, 종료 배너를 출력해주고 그 사이에 실제 취약한 함수가 존재한다. unsigned __int64 vuln() { char buf; // [rsp+7h] [rbp-4E9h] ssize_t v2; // [rsp+8h] [rbp-4E8h] char s; // [rsp+10h] [rbp..
-
rwsr - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 19:13
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { const char *v3; // rdi int v4; // eax char *s; // ST10_8 setup(); v3 = "Read Write Sleep Repeat."; puts("Read Write Sleep Repeat."); do { while ( 1 ) { while ( 1 ) { print_menu(v3); v4 = read_ulong(); if ( v4 != 1 ) break; printf("Addr: ", argv); v3 = (const char *)read_ulong(); puts(v3); } if ( v4 != 2 ) break; pr..
-
fclose - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 04:14
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { setup(); printf("> ", argv); read(0, &input, 0x404uLL); fclose(&input); return 0; } 간단하게 input이라는 전역변수에 0x400바이트 입력받고 fclose로 input을 닫는다. .bss:0000000000601260 public input .bss:0000000000601260 ; FILE input .bss:0000000000601260 input FILE ; DATA XREF: main+1F↑o .bss:0000000000601260 ; main+30↑o .bss:0000000000601..
-
message - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 15. 04:08
Prob Info Code int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi unsigned int v4; // eax char v6; // [rsp+10h] [rbp-30h] unsigned __int64 v7; // [rsp+38h] [rbp-8h] v7 = __readfsqword(0x28u); setup(); puts("Message taker."); printf("Message: ", argv); v3 = &v6; _isoc99_scanf("%s", &v6); getchar(); while ( 1 ) { while ( 1 ) { print_menu(); printf("> ", v3); v4 = g..
-
UAF - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 13. 22:22
Prob Info int __cdecl main(int argc, const char **argv, const char **envp) { Game *v3; // rsi const char *v4; // rdi __int64 savedregs; // [rsp+10h] [rbp+0h] setup(); initialize_game(); printf("Name: ", argv); v3 = cur; v4 = 0LL; read(0, cur, 0x7FuLL); while ( 1 ) { print_menu(v4, v3); read_int32(); switch ( (unsigned int)&savedregs ) { case 0u: return 0; case 1u: ((void (*)(void))cur->f_calc)()..
-
iape - pwnable.xyzWrite-ups/pwnable.xyz 2020. 2. 13. 21:10
Prob Info 이 문제는 코딩하기가 귀찮은 문제였다. setup 함수에 alarm(0xB4u) 이렇게 알람을 길게 주는 문제는 익스 시간이 길다고 생각하면 된다. int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi const char *v4; // rdi int v5; // eax char s; // [rsp+10h] [rbp-400h] setup(); v3 = 0LL; v4 = &s; memset(&s, 0, 0x400uLL); while ( 1 ) { while ( 1 ) { print_menu(v4, v3); v5 = read_int32(); if ( v5 != 1 ) break; printf("d..