Game/Bee-box

[Bee-box] 기타 μΈμ μ…˜ 곡격- iframe

μ •λ³΄λ³΄μ•ˆπŸŒ 2020. 6. 7. 18:07
λ°˜μ‘ν˜•

HTML injection-Stored(Blog)방식에 μ΄μ–΄μ„œ,

μ˜€λŠ˜μ€ μΈμ μ…˜ 기법 쀑 iframe μΈμ μ…˜μ„ μ‹€μŠ΅ν•΄λ³Όκ²Œμš”

μ‹€μŠ΅ν•˜λŠ” λͺ¨λ“  곡격은 μ‹€μ œλ‘œ μ‚¬μš©ν•˜μ‹œλ©΄ μ•ˆλ©λ‹ˆλ‹€.

ν—ˆμš©λ°›μ§€ μ•Šμ€ μ„œλΉ„μŠ€ λŒ€μƒμ— 해킹을 μ‹œλ„ν•˜λŠ” 행동은 κΈˆμ§€ν•˜λ©°,

λͺ¨λ“  법적 μ±…μž„μ€ μ‚¬μš©μžμ—κ²Œ μžˆλŠ” 것을 λͺ…μ‹¬ν•΄μ£Όμ„Έμš”


λ‚œμ΄λ„ ν•˜

iframe은 HTML λ¬Έμ„œ μ•ˆμ—μ„œ 또 λ‹€λ₯Έ HTML λ¬Έμ„œλ₯Ό 좜λ ₯ν•˜λŠ” νƒœκ·Έλ‘œ,

μ–΄λŠ μœ„μΉ˜λ“  상관없이 μΈμ μ…˜ 곡격을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ…λ¦½μ μœΌλ‘œ λ§Œλ“€ 수 있기 λ•Œλ¬Έμ— HTML μΈμ μ…˜ μ€‘μ—μ„œλ„ 곡격에 자주 μ‚¬μš©λ©λ‹ˆλ‹€.

 

더보기

νŽ˜μ΄μ§€ 내에 iframe νƒœκ·Έλ₯Ό μ£Όμž…ν•œλ‹€. --> 주둜 μ•…μ„± URL을 μ‚½μž… ν›„ μ‚¬μ΄μ¦ˆλ₯Ό 0으둜 μ„€μ •ν•˜μ—¬ μˆ¨κΈ΄λ‹€.

--> μ‚¬μš©μžμ—κ²Œ μ˜λ„μΉ˜ μ•Šκ²Œ μ•…μ„±μ‚¬μ΄νŠΈλ‘œ μ ‘μ†ν•˜κ²Œλ” ν•˜κ±°λ‚˜, 경고창을 λ„μšΈ 수 μžˆλ‹€.

 

 

 

λ¨Όμ € lowλ‹¨κ³„λ‘œ 'iframei.php' νŽ˜μ΄μ§€λ‘œ λ“€μ–΄κ°‘λ‹ˆλ‹€.

'iframei.php' νŽ˜μ΄μ§€λŠ” GET λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ „μ†‘λ°›μœΌλ―€λ‘œ URL에 λ³€μˆ˜κ°€ λ…ΈμΆœλ©λ‹ˆλ‹€.

 

 

λ³€μˆ˜λ₯Ό 확인해보면 'ParamUrl', 'ParamWidth', 'ParamHeight' 총 μ„Έκ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

ParamUrl -> μ—°κ²°ν•  μ£Όμ†Œ λ°›μ•„μ˜€κΈ°.

ParamWidth, ParamHeight -> λ‚΄μš©μ„ 좜λ ₯ν•  크기 μ§€μ •ν•˜κΈ°.

 

 

개발자 λ„κ΅¬λ‘œ μ½”λ“œλ₯Ό 확인해보면

 

 

iframe νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 'robots.txt' λΌλŠ” 파일의 λ‚΄μš©μ„ ν™•μΈν•΄μ£Όλ„€μš”.

μ•„κΉŒ μœ„μ— URLμ—μ„œ 확인 해보면, ParamUrl λ³€μˆ˜μ˜κ°’μ€ robot.txtμž…λ‹ˆλ‹€.

 

이 λ³€μˆ˜μ— μž…λ ₯ν•œ λ‚΄μš©μ΄ iframe νƒœκ·Έμ— μΆ”κ°€λ˜μ–΄ κΈ°μ‘΄ iframe νƒœκ·Έλ₯Ό κ°•μ œλ‘œ λ‹«κ³  URL에 λ…ΈμΆœλœ λ³€μˆ˜μ— μ•…μ˜μ μΈ

iframe νƒœκ·Έλ₯Ό μ£Όμž…ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

- HTML νŽ˜μ΄μ§€ μƒμ„±ν•˜κΈ° -

 

λ¨Όμ € μ‚¬μš©μžκ°€ λͺ¨λ₯΄κ²Œ μ•…μ˜μ μΈ νŽ˜μ΄μ§€λ₯Ό 좜λ ₯ν•˜λŠ” 곡격을 ν•˜λ €λ©΄ HTML νŽ˜μ΄μ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

vmware > bee-box μ—μ„œ 터미널을 ν†΅ν•˜μ—¬, λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•΄μ„œ νŽ˜μ΄μ§€λ₯Ό 생성해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 

 

 

> 터미널을 μ‹€ν–‰ ν›„ λΉ„λ°•μŠ€μ—μ„œ μ§€μ •ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 디렉터리 μœ„μΉ˜λ‘œ μ΄λ™ν•΄μ€λ‹ˆλ‹€.

 

 

* cd -> change Directory

 

> vi νŽΈμ§‘κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ 'bad.html' μ΄λΌλŠ” νŒŒμΌμ„ μƒμ„±ν•΄μ€λ‹ˆλ‹€.

(μ €λŠ” λ¨Όμ € sudo su λͺ…λ Ήμ–΄λ₯Ό 톡해 λ£¨νŠΈκΆŒν•œμ„ λΉŒλ Έμ§€λ§Œ, κ·Έλ ‡μ§€ μ•ŠμœΌμ‹  뢄은  sudo vi bad.html 을 μž…λ ₯ν•΄μ£Όμ„Έμš”.)

 

μœ„μ™€ 같이 파일 생성 ν›„ λ‚΄μš©μ„ μž…λ ₯ν•΄μ£Όμ‹œκ³ , 

"Esc -> Shift + :  " λ₯Ό λˆ„λ₯Έ ν›„ " wq! " λ₯Ό μž…λ ₯ν•˜μ—¬ λ‚΄μš©μ„ μ €μž₯ν•΄μ€λ‹ˆλ‹€.

 

μ œλŒ€λ‘œ μ €μž₯이 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄μ€λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ! HTML νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€κ³  λ‚˜λ©΄ λ‹€μ‹œ iframei.php νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜μ—¬, URL에 μ•…μ˜μ μΈ νŽ˜μ΄μ§€λ₯Ό ν˜ΈμΆœν•΄λ΄…μ‹œλ‹€.

 

λ¨Όμ € μ›λž˜ 기쑴의 URL μΈλ°μš”, μžμ„Ένžˆ 보면

 

 

μ΄λ ‡κ²Œ λ˜λ„€μš”. 

μˆ˜μ • ν›„ URL도 μœ„μ— ν‘œμ‹œν•΄ λ‘μ—ˆλŠ”λ°μš”.

기쑴의 ParamUrl λ³€μˆ˜μ˜ 값이 μ›λž˜ νŽ˜μ΄μ§€μ˜ iframe νƒœκ·Έμ— μΆ”κ°€λ˜κΈ° λ•Œλ¬Έμ—

"></iframe> 을 μž…λ ₯ν•˜μ—¬ μ›λž˜ νŽ˜μ΄μ§€μ˜ iframe νƒœκ·Έλ₯Ό λ‹«μ•„μ£Όκ³ , bad.html νŽ˜μ΄μ§€λ₯Ό src속성에 μž…λ ₯ν•΄μ€λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ url을 μž…λ ₯ν•΄ μ£Όκ³  μ—”ν„°λ₯Ό λˆ„λ₯΄λ©΄ 

 

 

ν™”λ©΄κ³Ό 같이 Succed 라고 경고창이 뜨게 λ©λ‹ˆλ‹€. -> 뜨면 곡격 성곡

 

확인 λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄

 

 

robots.txt λ‚΄μš© μ˜†μ— bad.html에 μž…λ ₯ν•œ ν—€λ”© νƒœκ·Έ "<h1>" λ‚΄μš©μ„ 좜λ ₯ν•˜κ³  κ·Έμ˜†μ—λŠ” 정상 iframe νƒœκ·Έμ— λ“€μ–΄κ°€λŠ”

넓이와 높이 속성을 λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

--> μ΄λŠ” 정상 iframeνƒœκ·Έλ₯Ό κ°•μ œλ‘œ λ‹«μ•˜κΈ° λ•Œλ¬Έμ— 속성이 λ…ΈμΆœλœ κ²ƒμž…λ‹ˆλ‹€.

--> ParamWidth λ³€μˆ˜μ— iframe νƒœκ·Έλ₯Ό μ£Όμž…ν•˜λ©΄ 정상 iframe νƒœκ·Έμ˜ κ°€μž₯ λ§ˆμ§€λ§‰μ΄κΈ° λ•Œλ¬Έμ— "> 만 좜λ ₯ν•©λ‹ˆλ‹€.

 

 

 

곡격 성곡 ν›„ [F12] 개발자 λ„κ΅¬λ‘œ λ“€μ–΄κ°€μ„œ μ†ŒμŠ€ μ½”λ“œλ₯Ό ν™•μΈν•˜λ©΄

 

 

div id="main" 에 μ›λž˜ 있던 iframeνƒœκ·Έκ°€ λ‹«νžˆκ³  μ•…μ˜μ μœΌλ‘œ μ£Όμž…ν•œ iframeνƒœκ·Έκ°€ μΆ”κ°€λœ 것을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ‚¬μš©μž λͺ°λž˜ iframe μΈμ μ…˜ 곡격을 ν•˜κΈ° μœ„ν•΄ 'width'속성과  'height' 속성을 0으둜 λ³€κ²½ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

μ΄λ ‡κ²Œ μ‚¬μ΄μ¦ˆλ₯Ό 0으둜 μ§€μ •ν•˜κ³  μ‹€ν–‰ μ‹œμΌœλ³΄λ©΄ 

 

 

μ•„κΉŒμ™€ λ™μΌν•˜κ²Œ succeedλΌλŠ” 경고창은 κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이전과 λ‹€λ₯΄κ²Œ bad.html에 μž…λ ₯ν•œ <h1> νƒœκ·Έ λ‚΄μš©μ΄ 좜λ ₯λ˜μ§€ μ•Šλ„€μš”..!

 

 

μ΄λ ‡κ²Œ μž…λ ₯ν–ˆλ˜ ν—€λ”©νƒœκ·ΈλŠ” 좜λ ₯λ˜μ§€ μ•Šμ•˜λ„€μš”.

--> λ”°λΌμ„œ κ³΅κ²©μžλŠ” iframe μΈμ μ…˜μœΌλ‘œ 경고창을 좜λ ₯ν•˜μ—¬ μ›λž˜ μ‚¬μ΄νŠΈμ—μ„œ 정상적인 응닡을 μ£ΌλŠ” 것 처럼 μ‚¬μš©μžλ₯Ό 

속일 수 μžˆμŠ΅λ‹ˆλ‹€. (μ•ˆμ— λ‚΄μš©μ€ 숨기고, 경고창만 좜λ ₯이 됨)

 

κ·ΈλŸ¬λ‚˜ μœ„ ν™”λ©΄λ§Œ 보면, iframe μ‚¬μ΄μ¦ˆκ°€ μ΄μƒν•˜λ‹€λŠ” 것을 λŠλ‚„ κ²ƒμž…λ‹ˆλ‹€. 

화면에 μ΄μƒν•œ 점을 λˆˆμΉ˜μ±„μ§€ λͺ»ν•˜κ²Œ 높이 속성을 μ•„μ£Ό 큰 κ°’μœΌλ‘œ μ„€μ •ν•΄μ€λ‹ˆλ‹€.

 

 

μ›λž˜ url λ³€μˆ˜μ— 높이 값을 μ§€μ •ν•΄μ£Όκ³  μ‹€ν–‰μ‹œμΌœμ£Όλ©΄

 

 

μ΄λ ‡κ²Œ μŠ€ν¬λ‘€λ„ μžμ—°μŠ€λŸ½κ²Œ λ‚΄λ €κ°€κ³ , μ΄μ „κ³ΌλŠ” λ‹€λ₯΄κ²Œ 정상적인 μ›Ή νŽ˜μ΄μ§€λ‘œ λ³΄μ΄λ„€μš”.

--> 곡격 성곡

 

 

 

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

 

λ‚œμ΄λ„ μƒμ—μ„œλŠ” μœ„μ™€ 같은 곡격이 먹히질 μ•ŠμŠ΅λ‹ˆλ‹€.. (μ•„λ¬΄λ°˜μ‘μ΄ μ—†μŒ..)

 

 

개발자 λͺ¨λ“œλ‘œ 듀어가봐도 λ™μΌν•©λ‹ˆλ‹€.. 

μ΄μœ λŠ” λ‚œμ΄λ„ μƒμ—μ„œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜κΈ° 전에 우회 단계λ₯Ό 거치기 λ•Œλ¬Έμ—,

μ›Ή λΈŒλΌμš°μ €μ—μ„œ μž…λ ₯ 데이터λ₯Ό νƒœκ·Έλ‘œ ν•΄μ„ν•˜μ§€ μ•Šμ•„μ„œ μΈλ°μš”.

 

iframei.php νŽ˜μ΄μ§€ μ½”λ“œλ₯Ό 확인해보면

 

 

'λ‚œμ΄λ„ ν•˜'와 λ‹€λ₯΄κ²Œ '쀑' κ³Ό '상' μ—μ„œλŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

(xss_check ν•¨μˆ˜λŠ” functions_external.php에 μ •μ˜λ˜μ–΄μžˆμ–΄μš”.)

 

'λ‚œμ΄λ„ 쀑' 은 addslashesν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μš°νšŒν•˜μ˜€κ³ ,

 

'λ‚œμ΄λ„ 상' μ—μ„œλŠ” htmlspecialchars ν•¨μˆ˜λ‘œ μž…λ ₯값을 μš°νšŒν•˜λ„€μš”!

 

항상 injectionκΈ€λ§ˆλ‹€ λ‚˜μ˜€λŠ” 이 ν•¨μˆ˜λŠ”! HTMLμ—μ„œ μ‚¬μš©ν•˜λŠ” 특수문자λ₯Ό UTF-8둜 λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

 

λ”°λΌμ„œ iframe μΈμ μ…˜μ„ λ§‰μœΌλ €λ©΄ htmlspecialchars ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή λΈŒλΌμš°μ €μ—μ„œ iframe νƒœκ·Έμ— μ‚¬μš©ν•˜λŠ”

λ¬Έμžλ“€μ„ HTMLνƒœκ·Έλ‘œ ν•΄μ„ν•˜μ§€ μ•Šκ²Œ μž…λ ₯ 데이터λ₯Ό UTF-8둜 인코딩 ν•΄μ£ΌλŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•