Tag Archive

#pwntools

이 태그가 포함된 글을 최신순으로 모아봤어요.

10
posts
BLOG2026-08-12
[🥉 Bronze 2] 쓴 값이 다음 쓰기 주소가 된다 — DreamHack p_rho 풀이
blog

[🥉 Bronze 2] 쓴 값이 다음 쓰기 주소가 된다 — DreamHack p_rho 풀이

숫자를 하나 넣으면 배열에 저장하고, 그 값을 그대로 다음 인덱스로 삼는 무한 루프. 임의 주소 쓰기인데 주소를 직접 못 고르고 "직전에 쓴 값"이 정한다는 제약이 붙는다. buf 를 원점으로 보면 GOT 가 음수 인덱스에 있고, Partial RELRO 라 잠겨 있지도 않다. 정수 두 개로 printf@got 를 win 으로 덮어 셸을 잡았다.
#dreamhack#ctf#pwnable+6
 
BLOG2026-07-20
[🥉 Bronze 2] 1초 안에 덧셈 50번 — DreamHack addition-quiz 풀이
blog

[🥉 Bronze 2] 1초 안에 덧셈 50번 — DreamHack addition-quiz 풀이

서버가 alarm(1)로 1초마다 덧셈 문제를 내고 정답을 요구한다. 난수는 srand(time(NULL))이지만 예측할 필요가 없다 — 문제 자체(num1, num2)를 그대로 평문으로 출력해 주기 때문이다. 필요한 건 PRNG 역산이 아니라 recv-계산-send를 50번 반복할 스크립트뿐이다. 로컬 바이너리로 직접 재보면 50라운드 전체가 0.01초 안에 끝나 — 사람에게 허락된 50초의 5000분의 1이다.
#dreamhack#ctf#misc+4
 
BLOG2026-07-06
[🥈 Silver 4] 72바이트로 canary 넘어 리크, free_hook 하이재킹으로 쉘 — DreamHack fho 풀이
blog

[🥈 Silver 4] 72바이트로 canary 넘어 리크, free_hook 하이재킹으로 쉘 — DreamHack fho 풀이

read()로 정확히 72바이트만 보내 canary·saved rbp를 non-null로 덮되 return address는 건드리지 않으면, 뒤이은 printf("%s", buf)가 retaddr의 첫 null 바이트에서 멈추며 libc 주소 일부가 그대로 새어나온다. 여기에 문제가 기본 제공하는 임의주소 write/free 프리미티브를 얹어 __free_hook을 system으로 덮고 free("/bin/sh")를 부르면 그대로 쉘이 뜬다.
#dreamhack#ctf#pwnable+5
 
BLOG2026-06-23
[🥉 Bronze 4] execve 만 막힌 seccomp 안에서 ORW 셸코드로 flag 읽기 — DreamHack shell_basic 풀이
blog

[🥉 Bronze 4] execve 만 막힌 seccomp 안에서 ORW 셸코드로 flag 읽기 — DreamHack shell_basic 풀이

RWX 영역에 올린 셸코드를 그대로 실행해 주는데, seccomp 가 execve/execveat 만 KILL 한다. 셸은 못 따니 open-read-write 셸코드로 flag 파일을 직접 읽어 표준출력으로 흘려보낸다. 표준 경로 /home/shell_basic/flag 가 아니라 getdents64 로 디렉토리를 뒤져 진짜 이름을 찾아야 했다.
#dreamhack#ctf#pwnable+5
 
BLOG2026-06-23
[🥉 Bronze 4] 접속만 하면 바이너리가 플래그를 읽어 준다 — DreamHack welcome 풀이
blog

[🥉 Bronze 4] 접속만 하면 바이너리가 플래그를 읽어 준다 — DreamHack welcome 풀이

드림핵 포너블 탭의 첫 연습 문제. 익스플로잇은 없고, 서버에서 도는 welcome 바이너리가 스스로 /flag 를 열어 출력해 준다. 우리가 할 일은 nc 로 그 서비스에 붙어 출력을 받는 것뿐이다. 서버형 포너블이 어떻게 굴러가는지, 왜 바이너리를 내 컴퓨터에서 돌리면 segfault 가 나는지, 같은 일을 pwntools 로 스크립트화하면 어떻게 되는지까지 입문자 눈높이로 짚는다.
#dreamhack#ctf#pwn+4
 
BLOG2026-06-08
[🥉 Bronze 4] 경계 없는 배열 인덱스로 system 인자 바꿔치기 — DreamHack out_of_bound 풀이
blog

[🥉 Bronze 4] 경계 없는 배열 인덱스로 system 인자 바꿔치기 — DreamHack out_of_bound 풀이

command[idx]에 인덱스 검사가 없어 배열 밖 메모리를 포인터로 읽는다. 마침 command[19]가 우리가 채우는 전역 name 버퍼와 주소가 겹치니, name에 "/bin/sh를 가리키는 포인터"를 심으면 system("/bin/sh")가 그대로 호출된다. NX·카나리·No PIE 환경에서 셸코드도 RIP 덮어쓰기도 없이 셸을 딴다.
#dreamhack#ctf#pwnable+4