Exploit
๊ณต๊ฒฉ ๋ฐฉ๋ฒ ๋ถ๋ฅ Server side ๊ณต๊ฒฉ ๋ฐฉ๋ฒ Injection (์ธ์ ์ ) ์๋ฒ์ ์ฒ๋ฆฌ ๊ณผ์ ์ค ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์์คํ ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ฃผ๊ฑฐ๋ ๋ฌธ๋ฒ์ ์ผ๋ก ์ฌ์ฉ๋์ด ๋ฐ์ํ๋ ์ทจ์ฝ์ injection ๊ณต๊ฒฉ์ ์ข ๋ฅ SQL Injection Command Injection SSTI (Server Side Template Injection) Path Traversal SSRF (Server Side Request Forgery) ORM๊ณผ ๊ฐ์ด ๊ฒ์ฆ๋ SQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ์ด๊ฐ ํ์ํ๋ค. File vulnerability ์๋ฒ์ ํ์ผ ์์คํ ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ํ์๋ฅผ ํ ์ ์์ ๋ ๋ฐ์ํ๋ ์ทจ์ฝ์ system(PHP), child_process(Node JS), os.system(Python) ๋ฑ OS command๋ฅผ ์คํํ๋ ํจ์๋ฅผ ํธ์ถํ์ง ์๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ข์ผ๋, ์ ๋ ฅ ํํฐ๋ง์ด๋ ๋์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ํ์ ์ค์ผ ์ ์๋ค. Business Logic Vulnerability (๋น์ฆ๋์ค ๋ก์ง ์ทจ์ฝ์ ) ์ธ์ ์ , ํ์ผ ๊ด๋ จ ์ทจ์ฝ์ ๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ ์ ์์ ์ธ ํ๋ฆ์ ์ ์ฉํ๋ ๊ฒ Language specific Vulnerability (PHP, Python, NodeJS) ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์ธ์ด์ ํน์ฑ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ทจ์ฝ์ Misconfiguration ์๋ชป๋ ์ค์ ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ทจ์ฝ์ Debug mode๋ฅผ ์ค์ ํ ์ฑ๋ก ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ ์์/๋ฐฑ์ ํ์ผ์ ์ญ์ ํ์ง ์์ ๊ฒฝ์ฐ ๋ฐฑ์ ํ์ผ ์ข ๋ฅ bak : ๋ฐฑ์ ํ์ผ, ๋๋ถ๋ถ์ ์๋ํฐ์์ ์ฌ์ฉํจ config : ์ค์ ํ์ผ, ๋น๋ฐ ํค๋ค์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ sql : sql schema ํ์ผ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์์๋ผ ์ ์์ sh : shell script ํ์ผ ~ : bluefish ์๋ํฐ ๋ฐฑ์ ํ์ผ ์๋น์ค์๋ ๋ฌด๊ดํ ํ์ผ๋ค์ ์ ๊ฑฐํด์ ์ํ์ ์์จ ์ ์์ VCS ํ๋ก๊ทธ๋จ์ผ๋ก ์ธํ ์์ ํ์ผ๋ค์ ์ ๋ฆฌํด์ผ ํ๋ค. .git, .hg ๋ฑ์ ํ์ผ์ด ์๋ค. https://github.com/kost/dvcs-ripper ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ฌ ์ง๋จ์ด ๊ฐ๋ฅํ๋ค. ์น ์๋ฒ์ ์ค์ ์ผ๋ก VCS ํ์ผ์ ๊ฒฝ๋ก์ ์ ๊ทผ์ ๋ง๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค. location ~ /\.(git|hg) { deny all; } ๋คํธ์ํฌ ๋ฐ์ธ๋ฉ์ 0.0.0.0 ์ผ๋ก ์ธํ ํ๋ ๊ฒฝ์ฐ ํธ์๋ฅผ ์ํด ์ธํ ํ ์ค์ ์ ์ด์ ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋์์์๋ ๊ทธ๋๋ก ์ ์งํ์ฌ ๋ฐ์ํ ์ ์๋ ์ทจ์ฝ์ ์ด๋ค. ๋ด๋ถ ๋ง์์๋ง ์ ๊ทผํ ์ ์๋ ์๋น์ค๋ mask๋ฅผ ์ ๋๋ก ์ค์ ํด ์ฃผ๊ณ , ํ์ฉํ ํฌํธ๋ฅผ ์ ์ธํ ์ค์ ์ ๋ชจ๋ ์ญ์ ํ๋๋ก ํ์ฌ ์ํ์ ์ ๊ฑฐํ๋ค. ์ทจ์ฝ์ XSS (Cross Site Scripting) ๊ณต๊ฒฉ์๊ฐ ์น ๋ฆฌ์์ค์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํด ์ด์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์์ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ณต๊ฒฉ์ด๋ค. XSS ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ์ฌ์ดํธ์ ๊ณต๊ฒฉ์๋ origin ๊ถํ์ผ๋ก ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ ์ด์ฉ์๊ฐ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ๊ณต๊ฒฉ์์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ๋์ํด ์ ๋ณด๋ฅผ ํ์ทจํ๋ ๋ฐฉ์์ด๋ค. ๊ณต๊ฒฉ ๊ฒฝ๋ก XSS ๊ณต๊ฒฉ์ ์ด์ฉ์๊ฐ ์ฝ์ ํ ๋ด์ฉ์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์์ ๋ฐ์ํ๋ค. ์ ์ฑ ํ๊ทธ๋ฅผ ํํฐ๋งํ๋ HTML Sanitization์ ์ฌ์ฉํ๊ฑฐ๋ ์ํฐํฐ ์ฝ๋๋ก ์นํํ๋ ๋ฐฉ๋ฒ์ผ๋ก XSS๋ฅผ ์๋ฐฉํ ์ ์๋ค. Flask๋ render_template ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์๋ฅผ HTML ์ํฐํฐ์ฝ๋๋ก ๋ณํํ์ฌ ์ถ๋ ฅํ๋ ๋ฐฉ์์ผ๋ก XSS๋ฅผ ๋ฐฉ์งํ๋ค. ์๋์ ๊ฐ์ด ์ ๋ ฅ๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ฒ ๋๋ฉด, ์ ๋ ฅ๊ฐ์ผ๋ก script ๋ฅผ ์ ๋ฌํด ๊ณต๊ฒฉ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฒ์ ์ฝ๋ @app.route("/vulnerable") def vulnerable(): param = request.args.get("param", "") # ์ด์ฉ์๊ฐ ์ ๋ ฅํ ์ธ์๋ฅผ ๊ฐ์ ธ์ด return param # ์ด์ฉ์์ ์ ๋ ฅ๊ฐ์ ํ๋ฉด ์์ ํ์ ๊ณต๊ฒฉ์ ์ ๋ ฅ1. ๋ค๋ฅธ ํ์ด์ง๋ก redirection <script>location.href = "/another_page?param=PARAM1";</script> ๊ณต๊ฒฉ์ ์ ๋ ฅ2. cookie ์ ๋ณด ์ถ๋ ฅ <script>document.cookie</script> XSS ๊ณต๊ฒฉ ์ข ๋ฅ XSS ๋ ์ ์ฑ ์คํฌ๋ฆฝํธ์ ์์น์ ์นจํฌ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ๊ตฌ๋ถ๋๋ค. Stored XSS : XSS์ ์ฌ์ฉ๋๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์๋ฒ์ ์ ์ฅ๋๊ณ ์๋ฒ์ ์๋ต์ ๋ด๊ฒจ์ค๋ XSS ๊ฒ์๋ฌผ๊ณผ ๋๊ธ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํด ์ ๋ก๋ํ๋ ๋ฐฉ์์ด ์์ ๋ถํน์ ๋ค์์๊ฒ ๋ณด์ฌ์ง๊ธฐ ๋๋ฌธ์ ํ๊ธ๋ ฅ์ด ํฌ๋ค. Reflected XSS : XSS์ ์ฌ์ฉ๋๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ URL์ ์ฝ์ ๋๊ณ ์๋ฒ์ ์๋ต์ ๋ด๊ฒจ์ค๋ XSS ๊ฒ์ํ ์๋น์ค์์ ์์ฑ๋ ๊ฒ์๋ฌผ์ ์กฐํํ๊ธฐ ์ํ ๊ฒ์์ฐฝ์์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํด ๊ฒ์ํ๋ ๋ฐฉ์์ด ์์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์๋ต์ ํฌํจํ๋ ์ผ๋ถ ์๋น์ค์์ ๋ฐ์ ๊ฐ๋ฅ ๊ณต๊ฒฉ์ ์ํด์๋ ๋ค๋ฅธ ์ด์ฉ์๋ฅผ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ๋งํฌ์ ์ ์ํ๋๋ก ์ ๋ํด์ผ ํจ DOM-based XSS : XSS์ ์ฌ์ฉ๋๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ URL Fragment์ ์ฝ์ ๋๋ XSS Universal XSS : ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ํน์ ๋ธ๋ผ์ฐ์ ์ ํ๋ฌ๊ทธ์ธ์์ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ผ๋ก SOP ์ ์ฑ ์ ์ฐํํ๋ XSS CSRF (Cross Site Request Forgery) ์ด๋ค ์ฌ์ดํธ์์ ์ด์ฉ์์ ์ ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ํ์ธ์ ์ฟ ํค๋ฅผ ํ์ทจํ์ฌ ๋ณ์กฐ๋ ๋ช ๋ น์ ์๋ฒ๋ก ๋ฒ๋ฌํ๋ ๊ณต๊ฒฉ ๋ฐฉ์์ด๋ค. ์ด์ฉ์์ ์ ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ฟ ํค๋ ์ผ์ข ์ ์๋ช ๊ณผ ๊ฐ์ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์, ์ฟ ํค๊ฐ ํน์ ๋ช ๋ น์ ๋ํ ์ด์ฉ์์ ๋ณธ์ธ ์ธ์ฆ ์ญํ ์ ์ํํ ์๋ ์๋ค. 2์ฐจ ์ธ์ฆ์ ์ํํ์ง ์๊ณ cookie๋ก๋ง ์ธ์ฆ์ ํ๋ ์ฌ์ดํธ์ ๋ํด ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค. XSS๋ ์ธ์ฆ ์ ๋ณด์ธ ์ธ์ ๋ฐ ์ฟ ํค ํ์ทจ๋ฅผ ๋ชฉ์ ์ผ๋ก ์๋ฒ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ ํ๋ ๋ฐฉ์์ธ ๋ฐ๋ฉด, CSRF๋ ์ด์ฉ์๊ฐ ์์ ํ์ด์ง์ HTTP ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ ๊ณต๊ฒฉ์ด๋ค. ๊ณต๊ฒฉ ๊ฒฝ๋ก <img> ํ๊ทธ๋ <form> ํ๊ทธ๋ฅผ ํ์ฉํด์ ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ๋ช ๋ น์ ์๋ฒ์ ์์ฒญํ๋ script๋ฅผ ์คํ์ํฌ ์ ์๋ค. /* img ํ๊ทธ ํ์ฉ ์์ฒญ ์ ๋ฌ */ <img src='http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337' width=0px height=0px>` /* javascript ๊ณต๊ฒฉ ์์ */ /* ์ ์ฐฝ ๋์ฐ๊ธฐ */ window.open('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337'); /* ํ์ฌ ์ฐฝ ์ฃผ์ ์ฎ๊ธฐ๊ธฐ */ location.href = 'http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337'; location.replace('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337'); SQL Injection ์กฐ์๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์๋ฒ์ ์ฃผ์ ํ์ฌ ์ธ์ฆ์ ์ฐํํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ์ถํ๋ ๊ณต๊ฒฉํ์ Blind SQL Injection : SQL Injection ์ ํ ์ข ๋ฅ๋ก, DBMS๊ฐ ๋ต๋ณ ๊ฐ๋ฅํ ํํ๋ก ์ง๋ฌธ์ ์ํํ์ฌ ์ค๋ฌด๊ณ ๊ฐ ๊ฒ์๊ณผ ๊ฐ์ด ์ ๋ต์ ์ ์ถํด ๋๊ฐ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ NoSQL Injection NoSQL์ ๋ฐ์ดํฐ ํ์ ์ผ๋ก โ์ค๋ธ์ ํธโ ๋ผ๋ ๊ฐ๋ ์ ๊ฐ๋๋ค. ์ค๋ธ์ ํธ ํ์ ์ ์ ๋ ฅ๊ฐ์ ์ฒ๋ฆฌํ ๋์๋ ์ฟผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ด ๋ถ๋ถ์ ์ทจ์ฝ์ ์ ํ์ฉํ ๊ฒ์ด NoSQL Injection ์ด๋ค. NodeJs๋ฅผ ์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ด url์ object๋ฅผ ๋์ ํ ์ ์๋ค. // ์๋ฒ ์ฝ๋ ์์ const express = require('express'); const app = express(); app.get('/', function(req,res) { console.log('data:', req.query.data, ' / type:', typeof req.query.data); res.send('done'); }); const server = app.listen(3000, function(){ console.log('app.listen'); }); // ๊ฒฐ๊ณผ ์์ http://localhost:3000/?data=1234 data: 1234 type: string http://localhost:3000/?data[]=1234 data: [ '1234' ] type: object http://localhost:3000/?data[]=1234&data[]=5678 data: [ '1234', '5678' ] type: object http://localhost:3000/?data[5678]=1234 data: { '5678': '1234' } type: object http://localhost:3000/?data[5678]=1234&data=0000 data: { '5678': '1234', '0000': true } type: object http://localhost:3000/?data[5678]=1234&data[]=0000 data: { '0': '0000', '5678': '1234' } type: object http://localhost:3000/?data[5678]=1234&data[1111]=0000 data: { '1111': '0000', '5678': '1234' } type: object ์ด ๋ฐฉ๋ฒ์ผ๋ก ์๋์ ๊ฐ์ด โdataโ ๊ฐ์ฒด ์์ NoSQL ์ฟผ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋๋ก url์ ์ค์ ํ ์๋ ์๋ค. NoSQL ๋ฌธ๋ฒ ์ฐธ์กฐ http://localhost:3000/?data[$eq]=A data: { "$eq": "A" } type: object Command Injection ๊ณต๊ฒฉ์๊ฐ ํด๋ผ์ด์ธํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ฒ์ธก์ ์์คํ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ์ฌ ์คํ์์ผ ๊ณต๊ฒฉ์ ์ํํ๋ ๊ธฐ๋ฒ PHP์ system, Node JS์ child_process, ํ์ด์ฌ์ os.system ๊ณผ ๊ฐ์ด ์์คํ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ ํจ์์ ์ด์ฉ์๊ฐ ์์์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์์ ๋ ๋ฐ์ํ ์ ์๋ค. ๋ช ๋ น์ด ์ ๋ ฅ๋์ ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ ๊ธฐ๋ฒ์๋ ๋ค์์ ๋ฉํ๋ฌธ์ ๋ค์ ํ์ฉํ ์ ์๋ค. ๋ช ๋ น์ด ์นํ ๋ฆฌ๋ ์ค ์์์ `` ์ฌ์ด์ ๋ ๋ฌธ์๋ ์๋ก์ด ๋ช ๋ น์ด ๋ผ์ธ์ผ๋ก ์ธ์ํ๋ค. ex) echo `ls` ls ๋ช ๋ น์ด๊ฐ ์คํ๋๋ค. ๋ฆฌ๋ ์ค ์์์ $() ์ฌ์ด์ ๋ ๋ฌธ์๋ ์๋ก์ด ๋ช ๋ น์ด ๋ผ์ธ์ผ๋ก ์ธ์ํ๋ค. ex) echo $(ls) ls ๋ช ๋ น์ด๊ฐ ์คํ๋๋ค. ๋ช ๋ น์ด ์ฐ์ ์คํ ๋ฆฌ๋ ์ค ์์์ || ๋ฅผ ์ฌ์ฉํ๋ฉด, || ์๊ณผ || ๋ค๋ฅผ ๋ค๋ฅธ ๋ช ๋ น์ด ๋ผ์ธ์ผ๋ก ์ธ์ํ๊ณ ๊ฐ๊ฐ ์คํํ๋ค. ํ ์ค์ ๋ ์ด์์ ๋ช ๋ น์ด๋ฅผ ์คํ์ํฌ ์ ์๋ค. ex) mkdir FILE || cd FILE FILE ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ FILE ๋๋ ํฐ๋ฆฌ ์์ผ๋ก ์ด๋ํ๋ ๋ช ๋ น์ ํ์ค๋ก ์ํํ ์ ์๋ค. ๋ฆฌ๋ ์ค ์์์ && ๋ฅผ ์ฌ์ฉํ๋ฉด, && ์๊ณผ && ๋ค๋ฅผ ๋ค๋ฅธ ๋ช ๋ น์ด ๋ผ์ธ์ผ๋ก ์ธ์ํ๊ณ ๊ฐ๊ฐ ์คํํ๋ค. ex) mkdir FILE && cd FILE FILE ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ FILE ๋๋ ํฐ๋ฆฌ ์์ผ๋ก ์ด๋ํ๋ ๋ช ๋ น์ ํ์ค๋ก ์ํํ ์ ์๋ค. ๋ฆฌ๋ ์ค ์์์ ; ๋ฅผ ์ฌ์ฉํ๋ฉด, ; ์๊ณผ ; ๋ค๋ฅผ ๋ค๋ฅธ ๋ช ๋ น์ด ๋ผ์ธ์ผ๋ก ์ธ์ํ๊ณ ๊ฐ๊ฐ ์คํํ๋ค. ex) mkdir FILE ; cd FILE FILE ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ FILE ๋๋ ํฐ๋ฆฌ ์์ผ๋ก ์ด๋ํ๋ ๋ช ๋ น์ ํ์ค๋ก ์ํํ ์ ์๋ค. ํ์ดํ ๋ฆฌ๋ ์ค ์์์ | ๋ฅผ ์ฌ์ฉํ๋ฉด | ์์ ๋ช ๋ น์ด ์คํ ๊ฒฐ๊ณผ๋ฅผ | ๋ค์ ๋ช ๋ น์ด ์คํ์ ์ ๋ ฅ์ผ๋ก ์ค์ ํ ์ ์๋ค. ex) cat FILE | less FILE ๋ด์ฉ์ ์ถ๋ ฅํ ๊ฒ์ less ๋ช ๋ น์ผ๋ก ๋๋ ์ ๋ณผ ์ ์๋๋ก ํ๋ค. ๋ท๋ด์ฉ ๋ฌด์ ๋ฆฌ๋ ์ค ์์์ #์ ์ฌ์ฉํ๋ฉด # ๋ค์ ๋ด์ฉ์ ์ฃผ์์ฒ๋ฆฌ๋์ด ๋ฌด์๋๋ค. ex) ls #a"sdfa"sdโfas"โโdf ๊ตฌ๋ฌธ ์ค๋ฅ ์์ด ls ๋ช ๋ น์ด ์ ์คํ๋๋ค. ๋ฌธ์์ด์ whitelist ์ฒ๋ฆฌํ๊ฑฐ๋ blacklist ์ฒ๋ฆฌํ์ฌ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ ์ ์๋ค. ์ ๊ท์์ ํตํด IP ์ฃผ์ ํฌ๋ฉง์ whitelist ๋ก ์ง์ ํ๋ ์ฝ๋ import re, os, ... ... chk_ip = re.compile('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$') if bool(chk_ip.match(ip)): return run_system(f'ping -c 3 {ip}') else: return 'ip format error' ํ์ฉ๋๋ฉด ์๋๋ ๋ฌธ์์ด์ blacklist ๋ก ์ง์ ํ๋ ์ฝ๋ if '\'' in ip: return 'not allowed character' return run_system(f'ping -c 3 \'{ip}\'') # shell command ์์์ ๋ชจ๋ ์ ๋ ฅ์ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌํ๋ Single Quotes (')๋ฅผ ์ฌ์ฉํด์ผ ํจ system(PHP), child_process(Node JS), os.system(Python) ๋ฑ OS command๋ฅผ ์คํํ๋ ํจ์ ์ธ ๋์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ํ์ ์ค์ผ ์ ์๋ค. File Vulnerability ๊ณต๊ฒฉ์์ ํ์ผ์ ์น ์๋น์ค์ ํ์ผ ์์คํ ์ ์ ๋ก๋ ํน์ ํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ณด์ ์ทจ์ฝ์ ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐ์ ์ด์ฉ์๊ฐ ์ ๋ก๋ํ ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฒ๋ณด๋ค๋ ์๋ฒ์ ํ์ผ ์์คํ ์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฐํ๊ธฐ ์ฝ๊ณ , ๊ด๋ฆฌ ํจ์จ๋ ๋์ง๋ง File Vulnerability๋ฅผ ์ฃผ์ํด์ผ ํ๋ค. ์๊ฒฉ ์ฝ๋ ์คํ, ๋ฏผ๊ฐ์ ๋ณด ํ์ทจ ๋ฑ์ด ์ํ๋ ์ ์๋ค. File Upload Vulnerability ...