분류 전체보기

    File struct exploit - level 4

    1. intro 2. code 및 분석 2.1. code 생략. 2.2. 분석 return address를 출력해주고, file structure에 값을 입력받은 뒤 종료된다. 더불어 win 함수가 존재한다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 file structure 변조에 따른 aaw, aar 3.2. 공격 준비 단순히 문제를 푸는 것만 생각하면 file structure 변조를 통해 ret address를 win address로 변조하면 challenge 함수가 종료되면서 win 함수를 실행하게 된다. 다만, 페이로드 구성 중 다소 헷갈리는 부분이 발생했는데, aar시에는 아무 상관 없지만, aaw 시에는 buf_end는 buf_base + 1024보다 큰 값을 가져야하고, aaw 값..

    format string bug - level10, 11, 12

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 level 10 : exit로 func 함수가 종료되며, PIE, relro가 걸려있지 않고, 한번만 입력 가능하다. level 11 : exit로 func 함수가 종료되며, PIE, Full relro가 걸려있고, 두번 입력 가능하다. level 12 : func 함수가 leave, ret으로 종료되며, 대부분의 보호 기법과 동시에 "$" 문자를 필터링하며 두번 입력 가능하다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 format string bug 3.2. 공격 준비 level 10 : PIE가 걸려있지 않기 때문에 주소 확인이 간단하고 relro가 걸려있지 않아 got overwrite가 가능하다. 통상적으로 하는 ..

    Return Oriented Programming - level15

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 바이너리를 실행하면 소켓을 생성해서 입력을 받으며, 한번 실행된 바이너리에 여러번 접속할 수 있다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 레벨 14와 유사하지만 레벨 14에서는 메인 함수로 돌아갔다면 레벨 15에서는 libc start main으로 리턴한다. 그러므로 libc 내의 특정 위치로 리턴해야한다. BROP은 기본적으로 stop gadget을 찾아야하는데, 여기서는 특정 가젯을 타겟으로 리턴하면 바이너리가 무한루프에 빠진건지 다시 접속이 불가한 것을 볼 수 있었다. 그러므로 특정 가젯이 아닌 적당한 함수를 찾아서 이를 기준으로 나머지 주소를 브루트포스 할 수 있..

    intro

    pwn college 문제의 경우 매우 쉬운 문제부터 어려운 문제까지 다양하기에 풀면서 어려웠던 문제 배울점이 있었던 문제 각 항목의 가장 마지막 문제 만 write up을 작성할 예정 입니다. 예를 들어 ROP의 경우 현재 이 글을 작성하는 시점에 all clear 하였지만 level 15만 작성되어있습니다. 만약 format string bug의 level 10에 대한 글이 올라오면 그 이전 문제는 모두 푼 것이니 궁금하신 부분이 있다면 이를 참조해서 문의해주시기 바랍니다.

    공부 1주년 기념 일기.

    작년 5월 즈음부터 다시 해킹 공부를 시작하긴 했지만, 드림핵을 만나 제대로 공부한지 약 1년이 되었기에 오랜만에 일기를 쓴다. (기념 일기는 써야지 써야지 하고 미뤄두고 있다가, 문제를 풀던 서버가 죽어서 오늘 쓰게 되었다 ㅋ) 생각해보면 1년 간 많은 일이 있었다. 실력은 물론이고, 많은 사람들을 알게되었고 메이져, 마이너 CTF 들을 참여하며 나름 만족할만한 성과도 내봤다. 사실 취미로 해킹을 한다는게 쉽지는 않았다. 본업이 아니기에 회사에서 페이로드를 작성하고 있으면 많은 회사 동료들이 쳐다보는 것도 눈치 보이고, 조언을 얻고 싶어도 주변에선 얻기 힘드니 검색 또 검색... 그래도 하나씩 배워간다는 즐거움이 여기까지 나를 데려온 것 같다. 포너블이 멋져보여서 시작했고, 해봤더니 역시나 멋진 영역이..

    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..