Skip to content

Latest commit

Β 

History

History
69 lines (54 loc) Β· 5.77 KB

README.md

File metadata and controls

69 lines (54 loc) Β· 5.77 KB

μ΄κΈ€λ£¨μ½”νΌλ ˆμ΄μ…˜ μ›μΉ˜ν˜„

이 도ꡬλ₯Ό μ΄μš©ν•˜μ—¬ ν—ˆμš©λ°›μ§€ μ•Šμ€ μ„œλΉ„μŠ€ λŒ€μƒμœΌλ‘œ 해킹을 μ‹œλ„ν•˜λŠ” ν–‰μœ„λŠ” 범죄 ν–‰μœ„μž…λ‹ˆλ‹€.
해킹을 μ‹œλ„ν•  λ•Œμ— λ°œμƒν•˜λŠ” 법적인 μ±…μž„μ€ 그것을 ν–‰ν•œ μ‚¬μš©μžμ—κ²Œ μžˆλ‹€λŠ” 것을 λͺ…μ‹¬ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.Β 

λΉ„λ°•μŠ€λ₯Ό λ‘œκ·ΈμΈν•˜λ©΄ μœ„μ™€ 같은 화면이 λ‚˜μ˜΅λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” OWASP ν•­λͺ© 쀑 ν•˜λ‚˜μΈ μΈμ μ…˜μ— λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
Β  A1 - Injection
μΈμ μ…˜μ€ κ³΅κ²©μžκ°€ μ•…μ˜μ μœΌλ‘œ μ£Όμž…ν•œ 데이터λ₯Ό μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 정상적인 쿼리 μΌλΆ€λ‘œ μΈμ‹ν•˜κ³  μ‹€ν–‰ν•  λ•Œμ— λ°œμƒν•˜λŠ” μ·¨μ•½μ μœΌλ‘œ, 데이터λ₯Ό μž…λ ₯λ°›κ±°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€ 정보λ₯Ό μš”μ²­ν•˜λŠ” κ³³μ—λŠ” μΈμ μ…˜ 곡격이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
Β 
곡격 λ°©λ²•μ΄λ‚˜ μ‚¬μš© 언어에 따라 μΈμ μ…˜μ˜ μ’…λ₯˜κ°€ λ‹¬λΌμ§€λŠ”λ°, λŒ€ν‘œμ μΈ μœ ν˜•μœΌλ‘œ SQL μΈμ μ…˜, HTML μΈμ μ…˜, OS Command μΈμ μ…˜, LDAP μΈμ μ…˜ 등이 μžˆμŠ΅λ‹ˆλ‹€. μΈμ μ…˜ 곡격 쀑 SQL μΈμ μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€ 언어인 SQL문을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ˜ 정보λ₯Ό 유좜 λ˜λŠ” μˆ˜μ •ν•˜κ±°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— μ•…μ„±μ½”λ“œλ₯Ό μ£Όμž…ν•˜μ—¬ μ‚¬μš©μžμ˜ 컴퓨터λ₯Ό 곡격할 수 μžˆμŠ΅λ‹ˆλ‹€.
Β  HTML μΈμ μ…˜
HTML μΈμ μ…˜μ€ μ½”λ“œ μΈμ μ…˜ 곡격의 ν•˜μœ„ κ°œλ…μœΌλ‘œ, μ·¨μ•½ν•œ λ§€κ°œλ³€μˆ˜μ— μ•…μ˜μ μΈ HTML μ½”λ“œλ₯Ό μ‚½μž…ν•˜λŠ” κ³΅κ²©μž…λ‹ˆλ‹€. κ³΅κ²©μžλŠ” μ‚¬μš©μžκ°€ 연결을 μš”μ²­ν•œ νŽ˜μ΄μ§€μ— HTML νƒœκ·Έλ₯Ό μ‚½μž…ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ λ‚΄μš©μ„ 보게 ν•˜κ±°λ‚˜ μ•…μ˜μ μΈ μ‚¬μ΄νŠΈμ— μ—°κ²°μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
Β  HTML μΈμ μ…˜ 쀑에 λ°˜μ‚¬(Reflected) 기법은 URL에 μ•…μ˜μ μΈ HTML νƒœκ·Έλ₯Ό μ‚½μž…ν•˜μ—¬ 링크λ₯Ό ν΄λ¦­ν•œ μ‚¬μš©μžμ˜ PCμ—μ„œ HTML νƒœκ·Έκ°€ μ‹€ν–‰λ˜κ²Œ ν•˜λŠ” κ³΅κ²©μž…λ‹ˆλ‹€.
특히 GET 방식은 데이터λ₯Ό 전솑할 경우 URL에 λ³€μˆ˜λͺ…κ³Ό μž…λ ₯ 값을 λ…ΈμΆœν•˜κ²Œ λ©λ‹ˆλ‹€.
Β  A1 - HTML Injection - Reflected (GET) bWAPP에 λ‘œκ·ΈμΈν•œ ν›„ 'HTML Injection - Reflected (GET)' ν•­λͺ©μ„ 선택 ν›„ [Hack] λ²„νŠΌμ„ λˆ„λ₯΄μ‹œλ©΄ λ‹€μŒκ³Ό 같이 'html_get.php'λΌλŠ” νŽ˜μ΄μ§€κ°€ λ‚˜μ˜΅λ‹ˆλ‹€.

HTML μΈμ μ…˜ 곡격을 μœ„ν•œ HTML νƒœκ·Έλ₯Ό ν…μŠ€νŠΈ ν•„λ“œμ— μž…λ ₯ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μž…λ ₯ν•œ HTML νƒœκ·Έ 이외에도 μΈμ μ…˜ 곡격에 μ‚¬μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ νƒœκ·Έκ°€ μžˆμœΌλ‹ˆ ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

<script>alert(1)</script> 슀크립트 ꡬ문 μž…λ ₯ μ‹œ νŒμ—…μ°½μž…λ‹ˆλ‹€.

ν—€λ”© νƒœκ·Έ - 제λͺ© ν‘œκΈ°μ— 많이 μ‚¬μš©

HTML Injection TEST

Β  이미지 νƒœκ·Έ - src 속성에 μž…λ ₯ν•œ 경둜의 이미지 좜λ ₯

μœ„μ™€ 같이 μž…λ ₯ν•˜κ³  [Go] λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ HTML νƒœκ·Έκ°€ μ‚½μž…λœ νŽ˜μ΄μ§€λ₯Ό 정상적인 νŽ˜μ΄μ§€λ‘œ 좜λ ₯을 ν•΄μ€λ‹ˆλ‹€. Β  http://127.0.0.1/bWAPP/htmli_get.php?firstname=%3Ch1%3E+HTML+Injection+TEST+%3C%2Fh1%3E&lastname=%3Cimg+src%3Dhttp%3A%2F%2F127.0.0.1%2FbWAPP%2Fimages%2Fnsa.jpg%3E&form=submit ] GET λ©”μ„œλ“œλ‘œ μš”μ²­ν•˜κΈ° λ•Œλ¬Έμ— μ›Ή λΈŒλΌμš°μ €μ˜ URL μž…λ ₯ 뢀뢄에 λ³€μˆ˜κ°€ λ…ΈμΆœλ˜κ³ , URL μž…λ ₯λž€μ˜ 'firstname'κ³Ό 'lastname'μ΄λΌλŠ” λ³€μˆ˜μ— μž…λ ₯ν•œ HTML νƒœκ·Έκ°€ 보이게 λ©λ‹ˆλ‹€. Β  HTML μΈμ μ…˜ 결과둜 μ›ΉλΈŒλΌμš°μ €μ—μ„œ 'Welcome' λ©”μ‹œμ§€ 밑에 μ‚½μž…ν•œ ν—€λ”© νƒœκ·Έμ™€ 이미지 νƒœκ·Έ λ‚΄μš©μ΄ 좜λ ₯이 되면 μ‚½μž…μ΄ μ„±κ³΅ν•œ κ²ƒμž…λ‹ˆλ‹€.

λ™μΌν•˜κ²Œ First nameκ³Ό Last name에 HTML ꡬ문을 μž…λ ₯ ν›„ [Go] λ²„νŠΌμ„ λˆŒλŸ¬λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

μ•„κΉŒμ™€λŠ” λ‹€λ₯΄κ²Œ μž…λ ₯ν•œ νƒœκ·Έκ°€ μ‹€ν–‰λ˜μ§€ μ•Šκ³  화면에 λ¬Έμžμ—΄μ΄ κ·ΈλŒ€λ‘œ 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ GET 방식이기 λ•Œλ¬Έμ— URL λΆ€λΆ„μ—λŠ” λ™μΌν•˜κ²Œ λ³€μˆ˜κ°€ λ…ΈμΆœμ΄ λ©λ‹ˆλ‹€. Β  μ—¬κΈ°μ„œ 확인해볼 수 μžˆλŠ” 것은 νƒœκ·Έλ₯Ό ν•„ν„°λ§ν•œλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. νƒœκ·Έλ₯Ό μΈμ½”λ”©ν•œ ν›„ λ‹€μ‹œ μž…λ ₯을 해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

버프 μŠ€μœ„νŠΈμ˜ Decoder 메뉴λ₯Ό μ΄μš©ν•˜μ—¬ 인코딩을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. Β  Last name 뢀뢄에 μΈμ½”λ”©ν•œ 값을 μž…λ ₯ν•œ ν›„ [Go] λ²„νŠΌμ„ λˆŒλŸ¬λ³΄μ•˜μŠ΅λ‹ˆλ‹€

μ •μƒμ μœΌλ‘œ μŠ€ν¬λ¦½νŠΈκ°€ 싀행이 λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. Β  μ΄λ²ˆμ—λŠ” μ°Έκ³ μ‚¬μ΄νŠΈμ— μžˆλŠ” 슀크립트 ꡬ문을 μ΄μš©ν•˜μ—¬ 곡격을 μˆ˜ν–‰ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. Β  곡격 ꡬ문 (인코딩 ν•„μš”) ">

<IFRAME width="420" height="315" SRC="https://www.daum.net" frameborder="0" onmouseover="alert('Welcome')"></IFRAME>123

ν•΄λ‹Ή 곡격 ꡬ문을 μž…λ ₯ ν›„ [Go] λ²„νŠΌμ„ λˆŒλŸ¬λ³΄μ•˜μŠ΅λ‹ˆλ‹€. IFRAME νƒœκ·ΈλŠ” ν•΄λ‹Ή νŽ˜μ΄μ§€ λ‚΄μ˜ λ‹€λ₯Έ νŽ˜μ΄μ§€λ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λ˜λŠ” νƒœκ·Έμž…λ‹ˆλ‹€.

곡격 ꡬ뢄 μž…λ ₯ ν›„ νŽ˜μ΄μ§€μ˜ λͺ¨μŠ΅μž…λ‹ˆλ‹€. λ‹€μŒ νŽ˜μ΄μ§€κ°€ 호좜된 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 일단 μ—λ””νŠΈ λ°•μŠ€ μ•ˆμ— 값을 μž…λ ₯ μ‹œ κ°’ μž…λ ₯수 길이 μ œν•œμ΄ μ—†μ–΄ μ‰½κ²Œ 곡격을 μˆ˜ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Β  bWAPP ν΄λ”μ˜ 'functions_external.php' νŒŒμΌμ„ μ‚΄νŽ΄λ³΄λ©΄ 'xss_check_3' ν•¨μˆ˜λ‘œ μž…λ ₯ 데이터λ₯Ό μš°νšŒν•˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. htmlspecialchars ν•¨μˆ˜λŠ” PHPμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Έ ν•¨μˆ˜λ‘œ, HTMLμ—μ„œ μ‚¬μš©ν•˜λŠ” 특수 문자λ₯Ό UTF-8둜 λ°˜ν™˜ν•©λ‹ˆλ‹€. Β  λ‚œμ΄λ„ 상

λ‚œμ΄λ„ μƒμ—μ„œλŠ” xss_check_3 ν•¨μˆ˜λ‘œ μž…λ ₯ 데이터λ₯Ό μš°νšŒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. xss_check_3 ν•¨μˆ˜λŠ” functions_external.php에 μ •μ˜ λ˜μ–΄ 있고, htmlspecialchars ν•¨μˆ˜λ‘œ μž…λ ₯값을 우회 ν•©λ‹ˆλ‹€.

Β htmlspecialchars ν•¨μˆ˜λŠ” PHPμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Έ ν•¨μˆ˜λ‘œ, HTMLμ—μ„œ μ‚¬μš©ν•˜λŠ” 특수 문자λ₯Ό UTF-8둜 λ°˜ν™˜ν•©λ‹ˆλ‹€. Β htmlspecialchars ν•¨μˆ˜μ—μ„œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λŠ” 특수문자 &, ", ', <, > μž…λ‹ˆλ‹€. λ”°λΌμ„œ HTML μΈμ μ…˜μ„ λ§‰μœΌλ €λ©΄ htmlspecialchars ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ HTML νƒœκ·Έμ— μ‚¬μš©λ˜λŠ” λ¬Έμžλ“€μ„ μΈμ‹ν•˜μ§€ μ•Šκ²Œ 인코딩 ν•΄μ€λ‹ˆλ‹€.