RCE via Server-Side Template Injection
RCE via Server-Side Template Injection | by Gaurav Mishra | Medium
SSTI ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ Remote Code Execution์ํ๊ณ Akamai WAF์ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ๊ธ์ด๋ค.
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ Response์ ๋ฌธ์์ด๋ก ์๋ตํ๋ ๊ธฐ๋ฅ์ ๋ฐ๊ฒฌํ์๋ค.
ํด๋น ๊ธฐ๋ฅ์ XSS ํ์ด๋ก๋๋ฅผ ๋ช๊ฐ ์
๋ ฅํ์์ง๋ง Javascript๊ฐ ์คํ๋์ง ์์๋ค.
ํ์ง๋ง context_type Parameter์ ${191 * 7} SSTI ํ์ด๋ก๋๋ฅผ ์ ๋ ฅํ์ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ฑ๊ณต์ ์ผ๋ก ๊ณ์ฐ์ด๋์ด ์ถ๋ ฅ๋์๋ค.
์ดํ ์ด๋ค Template Engine์ด ์ฌ์ฉ๋๋์ง ํ์ธํ๊ธฐ ์ํด Error Message๋ฅผ ์ถ๋ ฅ์์ผ๋ณผ๋ ค๊ณ ํ์ง๋ง ์คํจํ๋ค.
ํด๋น ์ทจ์ฝ์ ์ ์ด์ฉํ ๊ณต๊ฒฉ์ ํจ๊ณผ๋ฅผ ๋์ด๊ธฐ ์ํด ์๋์ ๊ฐ์ Remote Command Execution ํ์ด๋ก๋๋ฅผ ์์ฑํ์๋ค.
${"".getClass().forName("java.lang.Runtime").getMethods()[6].invoke("".getClass().forName("java.lang.Runtime")).exec("ls")}
ํด๋น ํ์ด๋ก๋๋ฅผ ํตํด ๊ณต๊ฒฉ์ ์๋ํ์ง๋ง ์๋ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์๊ฐ์์๋ค.
ํ์ง๋ง ์์ ๊ทธ๋ฆผ์ฒ๋ผ Unix Process ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์๋ค.
์ด๋ ์
๋ ฅํ ๋ช
๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์์์ ๋ปํ๋ค.
์ดํ Reverse Shell์ ์ด์ฉํ์ฌ ์ ์์๋ํ๊ธฐ ์ํด wget์ ํตํด ์๋ฒ์ Reverse Shell Script๋ฅผ ๋ฐ์ด๋ฃ๋๋ค.
python์ ์ด์ฉํด Reverse Shell Script๋ฅผ ํธ์คํ
ํ๊ณ
wget์ ํตํด ํธ์คํ ํ ์ฃผ์๋ฅผ ๋ฃ์๋ค.
๋ค์์ผ๋ก ํด๋ผ์ด์ธํธ์์ netcat์ ์คํํ๊ณ ํ์ด๋ก๋๋ฅผ ํตํด ์๋ฒ์์ Reverse Shell์ ์คํ์ํจ๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์น์ฐ์ฐ์ ์คํ๋์์ง๋ง ๋ง์ง๋ง Payload๋ 403 ์๋ฌ๋ฅผ ๋ฟ์ผ๋ฉฐ ์คํจํ๋ค.
Payload๋ฅผ ํ๋์ฉ ๋ถ์ํ๋ฉฐ WAF๊ฐ ์ด๋ค ํค์๋๋ฅผ ์ปจํธ๋กคํ๋์ง ์์๋ณด๋ ์๋์ ํค์๋๊ฐ ํํฐ๋ง๋๊ณ ์์๋ค.
- "java.lang.Runtime"
- ( )
java doc์ ๋ณด๊ณ ์ฐํ์ ์ผ๋ก "java.lang.Runtime" ๋ฌธ์์ด์ ์์ฑํ ์ ์๋์ง ์ฐพ์๋ณด์๋ค.
์ด ๊ฒฝ์ฐ concat์ ํตํด ์ํํ ์ ์์๋ค.
"java.lang.Runtime === "java.lang".concat(".Runtime")
๋ค์์ผ๋ก ( )์ ์ฐํํ๊ธฐ ์ํด์ ๋ถ์์ ํ๋ค.
์ฝ์์ฐฝ์์ ํ
์คํธ๋ฅผ ์งํํ๋
console.log("hello")์ (console.log).("hello")๊ฐ (console.log("hello"))์ ๊ฐ์ ์๋ฏธ๋ผ๋๊ฑธ ํ์ธํ๋ค.
์์ ๋ ๊ฐ์ง๋ฅผ ์ฐํํ์ฌ ์๋์ ์ต์ข
Payload๋ฅผ ๋ง๋ค์๋ค.
${("".getClass()).forName("java.lang".concat("Runtime")).getMethods()[6].invoke(("".getClass()).forName("java.lang".concat("Runtime"))).exec("wget")}
์ค์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์น์์ด๋/์ ์ฑ์ฝ๋๋ ์ ๋ก๋ํ์ง ์์๋ค.
์ค์ ๋ก Payload๊ฐ ์๋์ํ๋์ง ํ์ธํ๊ธฐ์ํด Burp Collaborator ์๋ฒ์ Outbound request๋ฅผ ์์ฒญํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ฒ๋ผ ์๋ฒ์ ์ค์ IP ์ฃผ์๋ฅผ ์๋ต์ผ๋ก ๋ฐ์ ์ ์์๋ค.
'๐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 |
[KVE-2020-1616] ๊ทธ๋๋ณด๋ ๋ฉ์ธํ๋ฉด XSS ์ทจ์ฝ์ (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 -
[KVE-2020-1616] ๊ทธ๋๋ณด๋ ๋ฉ์ธํ๋ฉด XSS ์ทจ์ฝ์
[KVE-2020-1616] ๊ทธ๋๋ณด๋ ๋ฉ์ธํ๋ฉด XSS ์ทจ์ฝ์
2023.08.13 -
SSTI(Server Side Template Injection)
SSTI(Server Side Template Injection)
2022.01.29