분류 전체보기 19

리모트에서 lib(ld) offset 찾느라 브포 돌리는 당신 이 글을 정독하길

pwn을 하면서 libc 주소를 알아내고 ld 영역을 overwrite해야 하는 경우가 심심치 않게 있다. 그럴 때마다 로컬과 리모트의 libc, ld offset이 달라서 i * 0x1000으로 브포를 돌리는 것이 인텐으로 자리 잡고 있다. 나의 경우 c++ binary 익스에서 exit handler overwrite를 하는데 브포를 돌려도 익스가 안 되는 것이다. 그래서 한참 헤매다가 이 방법을 발견하고 offset을 확인해보니 꽤 멀리 떨어져 있었다. 방법을 소개하겠다.준비물 : Dockerfiledocker에서 ls /proc을 친다.nc localhost {port}를 실행한 후 ls /proc을 쳐서 1번에서 없던 pid를 찾는다.cat /proc/{pid}/maps를 하면 lib 주소들이 ..

study/pwnable 2025.09.08

rdi 변조가 절실할 때 쓸 가젯

system은 호출할 수 있는데 rdi를 &"/bin/sh\x00"로 변조할 수 없다면 2차전 시작이다. rdi를 변조할 수 있는 방법을 온갖 창의적인 생각과 함께 바이너리에서 찾아내야 한다. 이럴 때 보통 libc base는 가지고 있을 테니 쓸만한 가젯 몇 개를 정리해보겠다.0x000000000009ca97 : mov rdi, qword ptr [rax + 0x640] ; call qword ptr [rax + 0x638]0x00000000000984df : mov rdi, qword ptr [rdi + 0x10] ; call qword ptr [rax + 0x380]0x00000000000af7b5 : mov rdi, qword ptr [rdi + 0x48] ; mov rsi, r12 ; call ..

study/pwnable 2025.08.20

FSOP : AAW 한 번으로 쉘 따기

이 세상에 FSOP 문제는 널리고 널렸지만 영어를 못하는 나는 질 좋은 FSOP 학습 자료를 볼 기회가 별로 없었다. 그래서 이번 기회에 정리하는 김에 다른 사람들에게도 도움이 되고자 이 글을 쓰게 되었다. dreamhack-invitational-quals 채널에서 값진 문장 하나를 발견했다. _IO_FILE 구조체와 _IO_wfile_overflow에 대해 분석해보면 될 것 같다._IO_wide_dataglibc 버전이 높아지면서 vtable을 변조하면 IO_validate_vtable에 의해 걸리므로, _wide_vtable을 사용해야 한다._IO_FILE 구조체를 살펴보면struct _IO_FILE{ int _flags; /* High-order word is _IO_MAGIC; r..

study/pwnable 2025.08.20

2025 cce quals writeup

예선 1등으로 본선에 간다. 청소년부에 폰은 총 6문제 출제되었다. (Heapappy : 250, book : 487, Artisan : 864, Chain : 962, Time Capsule : 962, MyBlog : 1000(0 Solve)) 대회 진행 중 마지막 문제를 제외한 5문제를 풀었다. MyBlog도 조금만 집중하면 풀 수 있었을 거 같은데 커널 문제를 풀 때 조건을 제대로 확인하지 않아서 두 시간을 날리기도 했고, 우리 팀 리버서도 나를 도와줄 정신 상태가 아니어서 깔끔하게 접고 쉬었다. 각설하고 풀이를 적어보겠다.목차HeapappybookArtisanChainTime CapsuleHeapappy[*] '/mnt/d/cce/qual/Heapappy/prob' Arch: a..

CTF/writeup 2025.08.17

2025 codegate CTF final upsolving

Rev / Unknown Virt분석대회 때는 cursor 깔짝대고 안 풀려서 손 안 댔는데, 정연산이 꽤나 쉽고 깔끔하다. 정연산 먼저 파악 후 역연산 짜주면 된다.정연산 어셈 해석0x0 : reg[0] = 10x3 : reg[1] = 20x6 : reg[1] input 배열을 0x40 길이로 만들고 정해진 알고리즘을 적용하여 한 글자씩 비교하는 모습이다.ex.pyans = open('./prob', 'rb').read()[0x5020:0x5020+64]def f1(a1, a2): return ((a1 >> (a2 & 7)) | (a1 Pwn / bkernel보호기법qemu-system-x86_64 \ -kernel bzImage \ -initrd $1 \ -nographic \ -appe..

CTF/upsolving 2025.07.22

2025 codegate CTF final writeup

2025.07.10에 열린 codegate CTF final에서 8등을 했다. 6등부터 13등까지 4솔인데 나는 3솔로 8등을 차지했다. 쉬운 문제가 4문제 있었는데, 이 문제들은 빨리 풀 수 있을 것 같아 집중력이 좋을 때 pwn에서 잡을 만한 문제를 먼저 풀기로 했다. pwn에서 좋은 점수를 거두지 못하면 쉬운 문제를 풀어봤자 의미가 없기 때문이다.폰 1번은 5시간에 걸쳐 익스를 마쳤다. 250점 두 개는 각각 1분 컷 냈고, 대회 시간은 12시간이었기 때문에 폰 2번을 풀면 나머지 쉬운 두 문제 중 하나를 풀면 수상권이었다. 하지만 krop까지만 깎고 간 내 실력으로 kernel UAF를 마주하여 수상권에 들지 못했다. 11시간 동안 포기하지 않고 찾아봤지만 당황한 상황에서 긴 영어 블로그를 (짧다..

CTF/writeup 2025.07.21