Wargame/ROP Emporium

    ret2csu

    1. intro 2. code 및 분석 2.1. code 코드는 대략 생략하자. 2.2. 분석 공격 준비로 바로 넘어가자. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 main에서 libpivot.so 라이브러리의 pwnme 함수를 호출한다. libpivot.so 라이브러리 내에는 ret2win 함수가 있는데, 해당 함수에서는 앞선 한 문제와 같이 rdi, rsi, rdx에 각각 특정 값이 있어야 flag를 출력해준다. 그러므로 해당 값들을 레지스터에 넣어야하는데, 직접적으로 넣을 수 있는 gadget이 적절하지 않다. 이 때 사용할 수 있는 것이 csu이다. 이전에 작성해둔 문서를 참고하자. 2022.09.05 - [Tips & theory] - Re..

    pivot

    1. intro 2. code 및 분석 2.1. code 생략함. 2.2. 분석 공격 준비 쪽으로 바로 넘어가자. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 음 이게 인텐인지는 잘 모르겠다... 아무래도 언인텐인듯, 바이너리를 실행하면 아래와 같이 주소를 하나 던져준다. pivot by ROP Emporium x86_64 Call ret2win() from libpivot The Old Gods kindly bestow upon you a place to pivot: 0x7ffff79d6f10 Send a ROP chain now and it will land there > 해당 주소를 다시 보면 libc 바로 위의 주소임을 알 수 있다. gef➤ v..

    fluff

    1. intro 2. code 및 분석 2.1. code questionableGadgets 0x0000000000400628 : xlat %ds:(%rbx) 0x0000000000400629 : ret 0x000000000040062a : pop %rdx 0x000000000040062b : pop %rcx 0x000000000040062c : add $0x3ef2,%rcx 0x0000000000400633 : bextr %rdx,%rcx,%rbx 0x0000000000400638 : ret 0x0000000000400639 : stos %al,%es:(%rdi) 0x000000000040063a : ret 0x000000000040063b : nopl 0x0(%rax,%rax,1) 2.2. 분석 마찬..

    badchar

    1. intro 2. code 및 분석 2.1. code usefulGadget 0x0000000000400628 : xor %r14b,(%r15) 0x000000000040062b : ret 0x000000000040062c : add %r14b,(%r15) 0x000000000040062f : ret 0x0000000000400630 : sub %r14b,(%r15) 0x0000000000400633 : ret 0x0000000000400634 : mov %r12,0x0(%r13) 0x0000000000400638 : ret 0x0000000000400639 : nopl 0x0(%rax) pwnme 0x00000000000008fa : push %rbp 0x00000000000008fb : mov %..

    write4

    1. intro 2. code 및 분석 2.1. code main 0x0000000000400607 : push %rbp 0x0000000000400608 : mov %rsp,%rbp 0x000000000040060b : call 0x400500 0x0000000000400610 : mov $0x0,%eax 0x0000000000400615 : pop %rbp 0x0000000000400616 : ret usefulFunction 0x0000000000400617 : push %rbp 0x0000000000400618 : mov %rsp,%rbp 0x000000000040061b : mov $0x4006b4,%edi 0x0000000000400620 : call 0x400510 0x000000000040..

    callme

    1. intro 2. code 및 분석 2.1. code usefulFunction 0x00000000004008f2 : push %rbp 0x00000000004008f3 : mov %rsp,%rbp 0x00000000004008f6 : mov $0x6,%edx 0x00000000004008fb : mov $0x5,%esi 0x0000000000400900 : mov $0x4,%edi 0x0000000000400905 : call 0x4006f0 0x000000000040090a : mov $0x6,%edx 0x000000000040090f : mov $0x5,%esi 0x0000000000400914 : mov $0x4,%edi 0x0000000000400919 : call 0x400740 0x000..

    split

    1. intro 2. code 및 분석 2.1. code pwnme 0x00000000004006e8 : push %rbp 0x00000000004006e9 : mov %rsp,%rbp 0x00000000004006ec : sub $0x20,%rsp 0x00000000004006f0 : lea -0x20(%rbp),%rax 0x00000000004006f4 : mov $0x20,%edx 0x00000000004006f9 : mov $0x0,%esi 0x00000000004006fe : mov %rax,%rdi 0x0000000000400701 : call 0x400580 0x0000000000400706 : mov $0x400810,%edi 0x000000000040070b : call 0x400550 ..

    ret2win

    1. intro 2. code 및 분석 2.1. code main 0x0000000000400697 : push %rbp 0x0000000000400698 : mov %rsp,%rbp 0x000000000040069b : mov 0x2009b6(%rip),%rax # 0x601058 0x00000000004006a2 : mov $0x0,%ecx 0x00000000004006a7 : mov $0x2,%edx 0x00000000004006ac : mov $0x0,%esi 0x00000000004006b1 : mov %rax,%rdi 0x00000000004006b4 : call 0x4005a0 0x00000000004006b9 : mov $0x400808,%edi 0x00000000004006be : cal..