๋์นญ ์ํธ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
CTF์์ ์ฐพ์๋ณผ ๊ฒ
- ๋ชจ๋ ์ค์ฉ: ECB ํจํด, CBC ๋ณ์กฐ ๊ฐ๋ฅ์ฑ(malleability), CTR/GCM nonce reuse.
- Padding oracles: ์๋ชป๋ padding์ ๋ํด ๋ค๋ฅธ ์ค๋ฅ/ํ์ด๋ฐ์ด ๋ํ๋จ.
- MAC confusion: CBC-MAC์ ๊ฐ๋ณ ๊ธธ์ด ๋ฉ์์ง์ ์ฌ์ฉํ๊ฑฐ๋, MAC-then-encrypt ์ค์.
- XOR everywhere: stream ciphers์ ์ปค์คํ ๊ตฌ์ฑ์ ์ข ์ข keystream๊ณผ์ XOR์ผ๋ก ํ์๋จ.
AES ๋ชจ๋์ ์ค์ฉ
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks โ equal ciphertext blocks. ์ด๋ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํ๋ค:
- Cut-and-paste / block reordering
- Block deletion (if the format remains valid)
๋ง์ฝ plaintext๋ฅผ ์ ์ดํ๊ณ ciphertext(๋๋ ์ฟ ํค)๋ฅผ ๊ด์ฐฐํ ์ ์๋ค๋ฉด, ๋ฐ๋ณต๋๋ ๋ธ๋ก(์: ๋ง์ As)์ ๋ง๋ค์ด ๋ฐ๋ณต์ ์ฐพ์๋ณด์ธ์.
CBC: Cipher Block Chaining
- CBC is malleable:
C[i-1]์์ ๋นํธ๋ฅผ ๋ค์ง์ผ๋ฉดP[i]์ ์์ธก ๊ฐ๋ฅํ ๋นํธ๊ฐ ๋ค์งํ๋ค. - ์์คํ ์ด ์ ํจํ padding๊ณผ ์ ํจํ์ง ์์ padding์ ๊ตฌ๋ถํด ๋ ธ์ถํ๋ค๋ฉด, padding oracle์ด ์์ ์ ์๋ค.
CTR
CTR๋ AES๋ฅผ stream cipher๋ก ๋ฐ๊พผ๋ค: C = P XOR keystream.
๋ง์ฝ nonce/IV๊ฐ ๊ฐ์ ํค๋ก ์ฌ์ฌ์ฉ๋๋ฉด:
C1 XOR C2 = P1 XOR P2(classic keystream reuse)- ์๋ ค์ง plaintext๊ฐ ์์ผ๋ฉด keystream์ ๋ณต์ํ๊ณ ๋ค๋ฅธ ๊ฒ๋ค์ ๋ณตํธํํ ์ ์๋ค.
GCM
GCM๋ nonce reuse ์ ์ฌํ๊ฒ ๊นจ์ง๋ค. ๊ฐ์ key+nonce๊ฐ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋๋ฉด ๋ณดํต ๋ค์์ด ๋ฐ์ํ๋ค:
- ์ํธํ์ ๋ํ keystream ์ฌ์ฌ์ฉ(CTR๊ณผ ์ ์ฌ), ์ด๋ค plaintext๊ฐ ์๋ ค์ ธ ์์ผ๋ฉด ํ๋ฌธ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅ.
- ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ์ด ์์ค๋๋ค. ๋ ธ์ถ๋ ๋ด์ฉ(๊ฐ์ nonce ์๋์ ์ฌ๋ฌ ๋ฉ์์ง/ํ๊ทธ ์)์ ๋ฐ๋ผ ๊ณต๊ฒฉ์๊ฐ ํ๊ทธ๋ฅผ ์์กฐํ ์ ์๋ค.
์ด์ ์ง์นจ:
- AEAD์์ โnonce reuseโ๋ฅผ ์น๋ช ์ ์ธ ์ทจ์ฝ์ ์ผ๋ก ์ทจ๊ธํ๋ผ.
- ๊ฐ์ nonce ์๋ ์ฌ๋ฌ ciphertext๊ฐ ์๋ค๋ฉด, ๋จผ์
C1 XOR C2 = P1 XOR P2ํํ์ ๊ด๊ณ๋ฅผ ํ์ธํ๋ผ.
๋๊ตฌ
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECB exploitation patterns
ECB (Electronic Code Book)๋ ๊ฐ ๋ธ๋ก์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํธํํ๋ค:
- ๋์ผํ plaintext ๋ธ๋ก โ ๋์ผํ ciphertext ๋ธ๋ก
- ์ด๋ ๊ตฌ์กฐ๋ฅผ leaksํ๋ฉฐ cut-and-paste ์คํ์ผ ๊ณต๊ฒฉ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค
![]()
ํ์ง ์์ด๋์ด: ํ ํฐ/์ฟ ํค ํจํด
์ฌ๋ฌ ๋ฒ ๋ก๊ทธ์ธํ๋๋ฐ ํญ์ ๊ฐ์ cookie๋ฅผ ๋ฐ๋๋ค๋ฉด, ciphertext๊ฐ ๊ฒฐ์ ๋ก ์ ์ผ ์ ์๋ค (ECB ๋๋ ๊ณ ์ IV).
์๋ฅผ ๋ค์ด ๋๋ถ๋ถ ๋์ผํ plaintext ๋ ์ด์์(์: ๊ธธ๊ฒ ๋ฐ๋ณต๋ ๋ฌธ์)์ ๊ฐ์ง ๋ ์ฌ์ฉ์๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ์คํ์ ์์ ๋ฐ๋ณต๋ ciphertext ๋ธ๋ก์ด ๋ณด์ด๋ฉด, ECB๊ฐ ์ ๋ ฅํ ์์ฌ ๋์์ด๋ค.
์ ์ฉ ํจํด
์ ์ฒด ๋ธ๋ก ์ ๊ฑฐ
ํ ํฐ ํ์์ด <username>|<password> ๊ฐ์ ๊ฒฝ์ฐ ๋ธ๋ก ๊ฒฝ๊ณ๊ฐ ๋ง์ผ๋ฉด, admin ๋ธ๋ก์ด ์ ๋ ฌ๋๋๋ก ์ฌ์ฉ์๋ฅผ ๋ง๋ค๊ณ ์์ ๋ธ๋ก์ ์ ๊ฑฐํ์ฌ admin์ ๋ํ ์ ํจํ ํ ํฐ์ ์ป์ ์ ์๋ค.
๋ธ๋ก ์ด๋
๋ฐฑ์๋๊ฐ padding/์ฌ๋ถ์ ๊ณต๋ฐฑ(admin vs admin )์ ํ์ฉํ๋ฉด, ๋ค์์ ํ ์ ์๋ค:
admin๋ฅผ ํฌํจํ๋ ๋ธ๋ก์ ์ ๋ ฌํ๋ค- ๊ทธ ciphertext ๋ธ๋ก์ ๋ค๋ฅธ ํ ํฐ์ ๊ต์ฒด/์ฌ์ฌ์ฉํ๋ค
Padding Oracle
๊ฐ์
CBC ๋ชจ๋์์ ์๋ฒ๊ฐ ๋ณตํธํ๋ ํ๋ฌธ์ valid PKCS#7 padding ์ฌ๋ถ๋ฅผ (์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก) ๋ ธ์ถํ๋ฉด, ์ข ์ข ๋ค์์ ํ ์ ์๋ค:
- ํค ์์ด ciphertext๋ฅผ ๋ณตํธํ
- ์ ํํ plaintext๋ฅผ ์ํธํ(์์กฐ๋ ciphertext ์์ฑ)
์ค๋ผํด์ ๋ค์๊ณผ ๊ฐ์ ์ ์๋ค:
- ํน์ ์ค๋ฅ ๋ฉ์์ง
- ๋ค๋ฅธ HTTP ์ํ / ์๋ต ํฌ๊ธฐ
- ํ์ด๋ฐ ์ฐจ์ด
์ค์ ์ ์ฉ
PadBuster is the classic tool:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Example:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Notes:
- ๋ธ๋ก ํฌ๊ธฐ๋ AES์ ๊ฒฝ์ฐ ํํ
16์ ๋๋ค. -encoding 0๋ Base64๋ฅผ ์๋ฏธํฉ๋๋ค.- ์ค๋ผํด์ด ํน์ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ
-error๋ฅผ ์ฌ์ฉํ์ธ์.
Why it works
CBC ๋ณตํธํ๋ P[i] = D(C[i]) XOR C[i-1]๋ฅผ ๊ณ์ฐํฉ๋๋ค. C[i-1]์ ๋ฐ์ดํธ๋ฅผ ์์ ํ๊ณ padding์ด ์ ํจํ์ง ๊ด์ฐฐํจ์ผ๋ก์จ, P[i]๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ณต์ํ ์ ์์ต๋๋ค.
Bit-flipping in CBC
padding oracle ์์ด๋ CBC๋ malleableํฉ๋๋ค. ์ํธ๋ฌธ ๋ธ๋ก์ ์์ ํ ์ ์๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ณตํธํ๋ ํ๋ฌธ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ(์: role=user)๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, ํน์ ๋นํธ๋ฅผ ๋ค์ง์ด ๋ค์ ๋ธ๋ก์ ์ ํํ ์์น์ ์๋ ํ๋ฌธ ๋ฐ์ดํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Typical CTF pattern:
- Token =
IV || C1 || C2 || ... - You control bytes in
C[i] - You target plaintext bytes in
P[i+1]becauseP[i+1] = D(C[i+1]) XOR C[i]
์ด๊ฒ ์์ฒด๋ก ๊ธฐ๋ฐ์ฑ(confidentiality)์ ๊นจ๋ ๊ฒ์ ์๋์ง๋ง, ๋ฌด๊ฒฐ์ฑ(integrity)์ด ์์ ๋ ์ผ๋ฐ์ ์ธ privilege-escalation ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋๋ค.
CBC-MAC
CBC-MAC๋ ํน์ ์กฐ๊ฑด(ํนํ ๊ณ ์ ๊ธธ์ด ๋ฉ์์ง์ ์ฌ๋ฐ๋ฅธ ๋๋ฉ์ธ ๋ถ๋ฆฌ)์ด ์์ด์ผ๋ง ์์ ํฉ๋๋ค.
Classic variable-length forgery pattern
CBC-MAC๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ฉ๋๋ค:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
์ ํํ ๋ฉ์์ง์ ๋ํ ํ๊ทธ๋ฅผ ์ป์ ์ ์๋ค๋ฉด, CBC๊ฐ ๋ธ๋ก์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ์ ์ฉํ์ฌ ํค๋ฅผ ๋ชจ๋ฅธ ์ฑ๋ก ๋ฉ์์ง์ ์ฐ๊ฒฐ(concatenation) ๋ฑ๊ณผ ๊ด๋ จ๋ ํ๊ทธ๋ฅผ ์์ฃผ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค.
์ด๋ CTF์์ username์ด๋ role์ CBC-MAC์ผ๋ก MAC ์ฒ๋ฆฌํ๋ ์ฟ ํค/ํ ํฐ์์ ์์ฃผ ๋ํ๋ฉ๋๋ค.
Safer alternatives
- HMAC (SHA-256/512)๋ฅผ ์ฌ์ฉํ์ธ์.
- CMAC (AES-CMAC)๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ์ธ์.
- ๋ฉ์์ง ๊ธธ์ด ๋ฐ ๋๋ฉ์ธ ๋ถ๋ฆฌ๋ฅผ ํฌํจํ์ธ์.
Stream ciphers: XOR and RC4
The mental model
๋๋ถ๋ถ์ ์คํธ๋ฆผ ์ํธ ์ํฉ์ ๋ค์์ผ๋ก ํ์๋ฉ๋๋ค:
ciphertext = plaintext XOR keystream
๋ฐ๋ผ์:
- plaintext๋ฅผ ์๋ฉด keystream์ ๋ณต์ํ ์ ์์ต๋๋ค.
- keystream์ด ์ฌ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ(๊ฐ์ key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR-based encryption
๋ง์ฝ ์์น i์์์ ์ด๋ค plaintext ์ธ๊ทธ๋จผํธ๋ฅผ ์๊ณ ์๋ค๋ฉด, keystream ๋ฐ์ดํธ๋ฅผ ๋ณต์ํ์ฌ ํด๋น ์์น์ ๋ค๋ฅธ ์ํธ๋ฌธ๋ค์ ๋ณตํธํํ ์ ์์ต๋๋ค.
Autosolvers:
RC4
RC4๋ ์คํธ๋ฆผ ์ํธ๋ก, ์ํธํ์ ๋ณตํธํ๊ฐ ๋์ผํ ์ฐ์ฐ์ ๋๋ค.
๊ฐ์ ํค๋ก ์๋ ค์ง plaintext์ RC4 ์ํธ๋ฌธ์ ์ป์ ์ ์๋ค๋ฉด, keystream์ ๋ณต์ํ์ฌ ๋์ผํ ๊ธธ์ด/์คํ์ ์ ๋ค๋ฅธ ๋ฉ์์ง๋ค์ ๋ณตํธํํ ์ ์์ต๋๋ค.
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


