study 3

리모트에서 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