ν‹°μŠ€ν† λ¦¬ λ·°

μ˜€ν”ˆ λ¦¬λ‹€μ΄λ ‰νŠΈ κ°œμš”

κ³Όκ±° 2013년도 OWASP top 10에 λΉˆλ„μˆ˜κ°€ 높은 곡격 쀑 ν•˜λ‚˜λ‘œ μ„ μ •λ˜μ—ˆμ—ˆμŠ΅λ‹ˆλ‹€. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‹ λ’°ν•  수 μ—†λŠ” μž…λ ₯값을 ν—ˆμš©ν•˜κ²Œ 될 경우 μ•…μ˜μ μΈ λͺ©μ μ΄ λ‹΄κΈ΄ URL둜 λ¦¬λ‹€μ΄λ ‰μ…˜ μ‹œμΌœ κ°œμΈμ •λ³΄ λ‚˜ μ•…μ„±μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄μžˆλŠ” μ‚¬μ΄νŠΈλ‘œ μ΄λ™μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 

 

곡격 방법은 λ‹¨μˆœν•©λ‹ˆλ‹€. 둜그인 성곡 μ‹œ λ˜λŠ” 타 μ‚¬μ˜ μ œν’ˆμ„ ν™•μΈν•˜λ €κ³  ν΄λ¦­ν•˜μ˜€μ„ λ•Œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œμΌœ μ›ν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό 화면에 λ„μš°κ²Œ ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ κ³΅κ²©μžλŠ” λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œμΌœμ£ΌλŠ” λ³€μˆ˜μ˜ 값을 μžμ‹ μ΄ μ›ν•˜λŠ” ν”Όμ‹±μ‚¬μ΄νŠΈ λ‚˜ μ•…μ„±μ½”λ“œκ°€ ν¬ν•¨λœ νŽ˜μ΄μ§€λ‘œ μ΄λ™μ‹œν‚¬ 수 μžˆλŠ” μ•…μ„± URL을 μ™„μ„±μ‹œμΌœ λ°°ν¬ν•©λ‹ˆλ‹€.

 

URL의 ν˜•νƒœκ°€ 정상적인 μ£Όμ†Œ + μ•…μ˜μ μΈ μ£Όμ†Œκ°€ μ„žμ—¬ 있기 λ•Œλ¬Έμ— 일반 μ‚¬μš©μžλ“€μ€ 정상적인 μ£Όμ†Œλ‘œ 착각할 κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

 

μ•ˆμ „ν•˜μ§€ μ•Šμ€ μ½”λ“œ

<java>
response.sendRedirect(request.getParameter("url"));

μ›ν•˜λŠ” λ‹€μŒ νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œμΌœμ£ΌλŠ” "URL" 맀개 λ³€μˆ˜μ—μ„œ μž…λ ₯된 μ£Όμ†Œλ₯Ό μˆ˜μ‹ ν•˜κ³  ν•΄λ‹Ή URL둜 경둜λ₯Ό λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œν‚€κ²Œ λ©λ‹ˆλ‹€.

<php>
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);

ν΄λ¦­ν•œ μ‚¬μš©μžλŠ” "URL"μ΄λΌλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 κ³΅κ²©μžκ°€ 미리 지정해둔 μ£Όμ†Œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ ν•˜κ²Œ λ©λ‹ˆλ‹€.

<Attack>
http://www.Guleum.com/view.html?redirect_url=http://evil.com

<Attack and Double Encoding>
http://www.Guleum.com/view.html?redirect_url=http%253A%252F%252F192.168.0.20%252Fhakc.php

<Attack and IP Obfuscation>
http://www.Guleum.com/view.html?redirect_url=http://3627730372
http://www.Guleum.com/view.html?redirect_url=http://0xd83ac5c4

Guleum.comμ΄λΌλŠ” 정상적인 μ‚¬μ΄νŠΈμ—μ„œ κ²€μ¦λ˜μ§€ μ•Šμ€ λ¦¬λ‹€μ΄λ ‰μ…˜ 취약점이 λ°œμƒν•œ μ•…μ„± URL μ˜ˆμ‹œμž…λ‹ˆλ‹€. μ•ž μͺ½μ€ 정상적인 μ£Όμ†Œμ™€ λ™μΌν•˜κΈ° λ•Œλ¬Έμ— 크게 신경을 μ•ˆ μ“°μ§€λ§Œ 끝 μͺ½μ„ μ‚΄νŽ΄λ³΄λ©΄ μ£Όμ†Œκ°€ 쑰금 μ΄μƒν•œ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. Double Encoding을 톡해 μ‰½κ²Œ ν™•μΈν•˜μ§€ λͺ»ν•˜λ„둝 숨길 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ 사진을 클릭 μ‹œ 타 μ‚¬μ΄νŠΈλ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜ μ‹œμΌœμ£ΌλŠ” μ΄λ²€νŠΈκ°€ μ‘΄μž¬ν•  경우 κ³΅κ²©μžλŠ” λ§€κ°œλ³€μˆ˜ 검증을 톡해 μ‰½κ²Œ 확인해 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

GET λ°©μ‹μ˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  있으며 urlμ΄λΌλŠ” λ§€κ°œλ³€μˆ˜ 값에 타 μ‚¬μ΄νŠΈμ˜ μ£Όμ†Œκ°€ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. μ•ˆμ „ν•œ λ³΄μ•ˆμ •μ±…μ΄ μ •μš© λ˜μ–΄ μžˆλ‹€λ©΄ μœ νš¨ν•˜μ§€ μ•Šμ€ μ£Όμ†Œλ‘œ κ°•μ œ λ¦¬λ‹€μ΄λ ‰νŠΈ λ°œμƒμ‹œν‚¬ μ‹œ " μ•ˆμ „ν•˜μ§€ μ•Šμ€ νŽ˜μ΄μ§€μž…λ‹ˆλ‹€. " 같은 문ꡬλ₯Ό λ„μ›Œμ£ΌλŠ” 편이 λ°”λžŒμ§ν•©λ‹ˆλ‹€.

 

url λ§€κ°œλ³€μˆ˜ 값에 μ•…μ˜μ μΈ νŽ˜μ΄μ§€κ°€ μ‘΄μž¬ν•˜λŠ” hacked.php μœ„μΉ˜λ‘œ λ³€κ²½ν•˜μ—¬ μ•…μ„± url을 λ§Œλ“  ν›„ 클릭해보면 정상적인 μ‚¬μ΄νŠΈλ‘œ λ„˜μ–΄κ°„ λ’€ λ¦¬ν„΄λ˜λŠ” μ£Όμ†Œλ‘œ λ°”λ‘œ λ„˜μ–΄κ°€κ²Œ λ©λ‹ˆλ‹€.

 

μ„±κ³΅μ μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈκ°€ 된 것을 확인할 μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ κ°„λ‹¨ν•œ alert(" ") ꡬ문만 좜λ ₯λ˜λ„λ‘ ν•˜μ˜€μ§€λ§Œ 주둜 μ •κ΅ν•˜κ²Œ λ§Œλ“€μ–΄μ§„ ν”Όμ‹± νŽ˜μ΄μ§€λ‘œ μ΄λ™μ‹œμΌœ 둜그인, κ°œμΈμ •λ³΄ μž…λ ₯ λ“±μœΌλ‘œ μœ μΈν•˜λŠ” κ²½μš°κ°€ λŒ€λ‹€μˆ˜μž…λ‹ˆλ‹€.

 

μ‹€μ‹œκ°„ 둜그 κΈ°λŠ₯을 톡해 μ–΄λŠ μ‚¬μš©μžκ°€ μ•…μ„± url을 ν΄λ¦­ν•˜μ—¬ λ“€μ–΄μ™”λŠ”μ§€ ν™•μΈν•˜μ—¬ μ›ν•˜λŠ” 정보λ₯Ό νšλ“ ν›„ μΆ”κ°€ μ•…μ˜μ μΈ ν–‰μœ„λ₯Ό ν•  μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ 제둜데이 취약점을 κ³΅λž΅ν•΄ μ›κ²©μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ” νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°€κ²Œ λœλ‹€λ©΄, μ‚¬μš©μžμ˜ PC에 μžλ™μœΌλ‘œ μ›ν•˜λŠ” μ•…μ„±ν”„λ‘œκ·Έλž¨μ„ κΉ”κ³  μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•˜λŠ” Drive by Download ν˜•νƒœμ˜ 곡격으둜 연계가 κ°€λŠ₯ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μžλ™ν™” ν…ŒμŠ€νŠΈ

μ½˜ν…μΈ κ°€ λ‹€μ–‘ν•œ μ‚¬μ΄νŠΈμ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ λ˜λŠ” 속성을 가진 λ§€κ°œλ³€μˆ˜λ₯Ό μ°Ύμ•„ ν•˜λ‚˜μ”© 값을 λŒ€μž…ν•˜μ—¬ ν…ŒμŠ€νŠΈν•˜λŠ” 것은 μ–΄μ°Œ 보면 ꡉμž₯히 κΈ΄ μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆμŠ΅λ‹ˆλ‹€. 이럴 λ•Œ κ°„νŽΈν•˜κ²Œ Surface Test ν•  수 μžˆλŠ” 도ꡬλ₯Ό μ†Œκ°œν•΄λ“œλ¦½λ‹ˆλ‹€.

github.com/r0075h3ll/Oralyzer

 

r0075h3ll/Oralyzer

Open Redirection Analyzer. Contribute to r0075h3ll/Oralyzer development by creating an account on GitHub.

github.com

Python3.x λ²„μ „μœΌλ‘œ μž‘μ„±λœ μžλ™ν™” 도ꡬλ₯Ό ν†΅ν•΄μ„œλ„ 진단이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ‚¬μš©λ°©λ²•μ€ 맀우 κ°„λ‹¨ν•˜λ―€λ‘œ κΉƒν—ˆλΈŒ νŽ˜μ΄μ§€λ‚˜ μ˜΅μ…˜μ„ ν™•μΈν•˜μ—¬ μ‚¬μš©ν•΄λ³΄μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

 

ν•œκ°€μ§€ μ•Œμ•„λ‘μ…”μ•Ό ν•  것은 좜λ ₯ κ²°κ³Όκ°€ HTTP 응닡 μ½”λ“œλ₯Ό 톡해 μ½˜μ†”μ— λ‚˜νƒ€λ‚˜λ―€λ‘œ μ˜€νƒμΈμ§€ μ•„λ‹Œμ§€ μΆ”κ°€μ μœΌλ‘œ μž¬κ²€μ¦μ΄ ν•„μš”ν•©λ‹ˆλ‹€.(즉 HTTP 200 μ½”λ“œλΌ ν•˜λ”λΌλ„ λͺ¨λ‘ μ„±κ³΅ν•œ 것이 μ•„λ‹ˆλž€ 말이닀.)

 

νŠΉμ • 도메인 μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜μ—¬ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜μ§€λ§Œ λ‹€μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό νΌμ§•ν•œ 데이터λ₯Ό 가지고 μžˆλ‹€λ©΄. txt 파일 κΈ°μ€€μœΌλ‘œ 일괄 ν…ŒμŠ€νŠΈλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

Open Redirect Trick

https://0xsp.com/storageCenter/1589119678.txt

νŠΉμ • λ§€κ°œλ³€μˆ˜μ— Open Redirectλ₯Ό ν…ŒμŠ€νŠΈν• λ•Œ 예λ₯Ό λ“€μ–΄ "잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€" λ“± 같은 μ‹€νŒ¨κ°€ λ°œμƒν•  경우 URL Parser의 νŠΉμ§•μ„ μ΄μš©ν•˜μ—¬ μš°νšŒν•  κ°€λŠ₯성이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄ μ§€μ •λœ 도메인이 ν¬ν•¨λ˜μ–΄μ•Ό 정상적인 μš”μ²­μ΄λΌ νŒλ³„ν•  경우 특수 기호 @λ₯Ό μ΄μš©ν•΄μ„œ 이λ₯Ό μš°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ PayloadλŠ” μƒλ‹¨μ˜ 링크λ₯Ό 톡해 λΆ„μ„ν•΄λ³΄μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

 

λŒ€μ‘λ°©μ•ˆ

 <java>
 response.sendRedirect("http://www.mysite.com");
 <?php
 /* Redirect browser */
 header("Location: http://www.mysite.com");
 /* Exit to prevent the rest of the code from executing */
 exit;
 ?>

url μ΄λΌλŠ” λ§€κ°œλ³€μˆ˜μ— λ“€μ–΄μ˜¨ 값을 λ°”νƒ•μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜ μ‹œν‚€μ§€ μ•Šκ³  μƒμœ„ μ½”λ“œμ²˜λŸΌ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œμΌœμ€„ μ£Όμ†Œλ₯Ό ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ ν˜•νƒœλ‘œ μž‘μ„±ν•΄ 둬야 ν•˜λ©° 이외에 μž…λ ₯된 μ½”λ“œκ°€ 있으면 μ‹€ν–‰λ˜μ§€ μ•Šκ³  λΉ μ Έλ‚˜κ°€λ„λ‘ κ΅¬ν˜„ν•˜κ±°λ‚˜ alert(" ") 경고창을 λ„μ›Œ μ•ˆμ „ν•œ 링크가 μ•„λ‹ˆλΌλŠ” 것을 μ•Œλ €μ•Ό μ‚¬μš©μžλ„ μΈμ§€ν•˜κ³  μœ μ˜ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€.

'WEB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ShellShock(CVE-2014-6271) 취약점  (0) 2020.10.23
SNMP 취약점 곡격  (0) 2020.10.22
SSL Strip 취약점  (0) 2020.10.21
둜컬 κΆŒν•œ μƒμŠΉ 취약점(udev)  (0) 2020.10.20
XST(Cross Site Tracing) 취약점  (0) 2020.10.19
κ³΅μœ ν•˜κΈ° 링크
Comment