[KVE-2020-1616] ๊ทธ๋๋ณด๋ ๋ฉ์ธํ๋ฉด XSS ์ทจ์ฝ์
Gnuboard 5.4.5.1 ๋ฒ์ ๋ฉ์ธํ๋ฉด XSS ์ทจ์ฝ์ [KVE-2020-1616]
1. ์์ ๋ ์ฝ๋ ํ์ธ
adm/menu_list_update.php
- ๊ธฐ์กด(5.4.5.1 ver)
$_POST = array_map_deep('trim', $_POST);
$_POST['me_link'][$i] = is_array($_POST['me_link']) ? clean_xss_tags(clean_xss_attributes($_POST['me_link'][$i], 1)) : '';
$code = is_array($_POST['code']) ? strip_tags($_POST['code'][$i]) : '';
$me_name = is_array($_POST['me_name']) ? strip_tags($_POST['me_name'][$i]) : '';
$me_link = (preg_match('/^javascript/i', $_POST['me_link'][$i]) || preg_match('/script:/i', $_POST['me_link'][$i])) ? G5_URL : strip_tags(clean_xss_attributes($_POST['me_link'][$i]));
- ์์ ํ(5.4.5.2 ver)
$_POST = array_map_deep('trim', $_POST);
if(preg_match('/^javascript/i', preg_replace('/[ ]{1,}|[\t]/', '', $_POST['me_link'][$i]))){
$_POST['me_link'][$i] = G5_URL;
}
$_POST['me_link'][$i] = is_array($_POST['me_link']) ? clean_xss_tags(clean_xss_attributes(preg_replace('/[ ]{2,}|[\t]/', '', $_POST['me_link'][$i]), 1)) : '';
$code = is_array($_POST['code']) ? strip_tags($_POST['code'][$i]) : '';
$me_name = is_array($_POST['me_name']) ? strip_tags($_POST['me_name'][$i]) : '';
$me_link = (preg_match('/^javascript/i', $_POST['me_link'][$i]) || preg_match('/script:/i', $_POST['me_link'][$i])) ? G5_URL : strip_tags(clean_xss_attributes($_POST['me_link'][$i]));
2. ๊ธฐ๋ฅ ํ์ธ
adm/menu_list_update.php๋ ๊ด๋ฆฌ์๊ถํ์ด ์์๋ ๋ฉ์ธํ๋ฉด์ ํ์๋ ๋งํฌ๋ฅผ ๊ฑธ์์๋ ๊ธฐ๋ฅ์ด ์๋ค.
๋ฉ๋ด์ ๋งํฌ ๋ฐ ์ต์ ์ ์ค์ ํ๊ณ ์ถ๊ฐํ๊ฒ๋๋ฉด ๋ฉ์ธํ๋ฉด์ <a> ์ href ์ ์ฝ์ ์ด ๋์ด ๋ํ๋๊ฒ ๋๋ค.
3. ์ฝ๋ ๋ถ์
preg_match๋ฅผ ํตํ javascript, script: ํค์๋์ ํํฐ๋ง
clean_xss_tag, clean_xss_attribute๋ฅผ ํตํ xss ๊ด๋ จ ํ๊ทธ์ ์์ฑ์ ์ ๊ฑฐ๋ฅผ ์ฐํํ์ฌ ์งํํด์ผํ๋ค.
javascript์ script: ํํฐ๋ง์ ๊ฒฝ์ฐ HTML Encoding์ ํตํด ์ฐํํ์๋ค.
javascript์ script: ๋์์ ์ฐํํด์ผํ์ฌ ์๋์ฒ๋ผ javascript ์ฌ์ด์๋ (	)๊ณต๋ฐฑ, : ๋ :์ผ๋ก ์ฐํํ๋ค.
clean_xss_tag์ ๊ฒฝ์ฐ xss ๊ด๋ จ ํ๊ทธ๋ฅผ ํํฐ๋งํ์ง๋ง preg_match์์ ์ด๋ฏธ ์ฐํ๋ javascript๋ฅผ ํํฐ๋งํ๊ณ ์์ด
๋ฌด๋ํ๊ฒ ํต๊ณผ๊ฐ๋์๋ค.
clean_xss_attribute์ ๊ฒฝ์ฐ onclick, onload๋ฑ ๋ค์ํ attribute๋ฅผ ํํฐ๋งํ์ง๋ง ์ ์ฒ๋ผ ๋์ผํ๊ฒ HTML Encoding์ ํตํด ์ฐํ๊ฐ ๋๋ค.
4. ๊ณต๊ฒฉ ์ฝ๋
ํด๋น ํํฐ๋ง์ ์ฐํํ์ฌ ์์ฑ๋ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
java	script:alert(document.cookie);
์ด๋ฅผ $_POST['me_link']์ ์ ๋ฌํ๋ฉด ์๋์ฒ๋ผ ํ๋ฉด์ ๋ํ๋๊ฒ ๋๋ค.
'๐Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Web Server vs WAS(Web Application Server) (0) | 2023.09.29 |
---|---|
Broken API Authorization (0) | 2023.08.13 |
AeroCTF - Localization is hard (0) | 2023.08.13 |
RCE via Server-Side Template Injection (0) | 2023.08.13 |
SSTI(Server Side Template Injection) (0) | 2022.01.29 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
Broken API Authorization
Broken API Authorization
2023.08.13 -
AeroCTF - Localization is hard
AeroCTF - Localization is hard
2023.08.13 -
RCE via Server-Side Template Injection
RCE via Server-Side Template Injection
2023.08.13 -
SSTI(Server Side Template Injection)
SSTI(Server Side Template Injection)
2022.01.29