๐ดโ ๏ธ CTF ๐ดโ ๏ธ (27) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Dream Hack - Reversing] Simple Patch me ๋ฌธ์ ํด์main ํจ์dword_40404C ๊ฐ์ด 0 ์ผ๋ก ์์ํด์ 0x2237๊น์ง ์ฆ๊ฐํ๋ฉด์ while๋ฌธ์ด ๋์ํ๊ณ ์๋ค. sleep(0xE10u) ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฒ ์ฆ๊ฐํ ๋๋ง๋ค 1์๊ฐ์ฉ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์งํํ๋๋ก ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค. dword_40404C์ 0x2237๋ณด๋ค ํฐ ๊ฐ์ ๋ฃ๋ ๋ฐฉ๋ฒsleep ํจ์์ 0์ ๋ฃ๋ ๋ฐฉ๋ฒ๋ฐฉ๋ฒ ์ ํ์ ์ํด sub_401196 ํจ์๋ฅผ ์ดํด๋ณด์ sub_401196 dword_40404C = 0x2238 ๋ก ์ธํ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ๋ฅํด ๋ณด์ธ๋ค.sleep(0) ์ ์ค์ ํ๋๊ฒ ๊ฐ๋จํด ๋ณด์ฌ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค. ํ์ด ๋ฐฉ๋ฒ a) dword_40404C = 0x2238 ์ธํ ELF ํ์ผ ํฌ๋งท์ด๋ฏ๋ก Linux ํ๊ฒฝ์์ pwnd.. [Dream Hack - Reversing] Simple Counter ๋ฌธ์ ํด์ํ์ผ ์คํ ๊ฒฐ๊ณผ IDA์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด i๋ 10์์ 0๊น์ง ๋ฐ๋ณตํ๋ฉด์ ์ถ๋ ฅ๋๊ณ , i=3์ผ๋, src์ ์ด๋ค ์คํธ๋ง์ด ๋ณต์ฌ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.flag_gen ํจ์๋ IDA View์์ ์ฐพ์ ์ ์์๋ค. ๋์๊ณผ์ ์ ์์ฝํ๋ฉด ์๋์ ๊ฐ๋ค.loc_15A0 : i์ 0 ๋น๊ต.→ i > 0 : ๋ฐ๋ณต๋ฌธ ์ํ → i ≤ 0 : i ์ 5 ๋น๊ต. → i == 5 : flag_gen ์คํ → i ≠ 5 : ํ๋ก๊ทธ๋จ ์ข ๋ฃ.i๋ฅผ ์ค๊ฐ์์ 5๋ก ๋ฐ๊ฟ์ฃผ๋ฉด flag_gen ํจ์๋ฅผ ์คํ์ํฌ ์ ์๋ค. pwndbg$ break main $ run ์์ ์ 5๊ฐ ๋น๊ต๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. breakpoint๋ฅผ ๊ฑธ๊ณ ์คํํ๋ค.$ break *main+278$ continue $ x/1 $rbp-40.. [Dream Hack - Web] sql injection bypass WAF ๋ฌธ์ ํด์error based sql injection ๋ฌธ์ ์ ๋ฌ๋ผ์ง ์ ์ค์ด ํฌ๊ฒ ๋๊ฐ์ง ๋ณด์๋ค.keywords์ ์๋ ๋ฌธ์์ด์ ํฌํจํ๋ ๊ฒฝ์ฐ, SQL ๋ฌธ์ด ์คํ๋์ง ์๋๋ค.keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/']def check_WAF(data): for keyword in keywords: if keyword in data: return True return False๋ ์ด์ ์๋ฌ๋ฌธ์ ์ถ๋ ฅํ์ง ์๋๋ค.uid = request.args.get('uid') if uid: if check_WAF(uid): return 'your r.. [Dream Hack - Web] error based sql injection Error Based SQL Injection๊ณต๊ฒฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ ๋ด๋ถ ์ ๋ณด๋ฅผ ํ๋ํ๋ ๊ณต๊ฒฉ๊ธฐ๋ฒ์ด๋ค. ๊ณต๊ฒฉ์๋ SQL ์ฟผ๋ฆฌ์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ์๋ฌ๋ฅผ ์ ๋ํ๊ณ , ๊ทธ ์๋ฌ๋ฅผ ๋ถ์ํ์ฌ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค. EXTRACTVALUE( {XML ํ์์ ๊ฐ}, {XPath ์กฐ๊ฑด์} )ํน์ ํ XPath ์กฐ๊ฑด์์ ๊ธฐ๋ฐ์ผ๋ก XML ๋ฌธ์์์ ๊ฐ์ ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.- BOOK_XML ์ด๋ฆฐ ์์ ์ํฌ์ ๋ ์ํ์ฅํ๋ฆฌ 9,800 - ์์ ์ฟผ๋ฆฌSELECT EXTRACTVALUE(BOOK_XML, '/STORE/BOOK/TITLE') FROM BOOK_LIST; - ์คํ ๊ฒฐ๊ณผ์ด๋ฆฐ์์ ํ์ด ๋ฐฉ๋ฒ flag ๊ธธ์ด ๊ตฌํ๊ธฐ' or extractvalue(1, c.. [Dream Hack - Web] csrf-2 ๋ฌธ์ ํด์/ ํ์ด์ง@app.route("/")def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not an admin"}')์ฟ ํค์์ session id๋ฅผ ํ์ธํ๊ณ ๊ทธ ๊ฐ์ ๋ฐ๋ผ.. [Dream Hack - Web] csrf-1 CSRF๋?CSRF๋, Cross Site Request Forgery์ ์ฝ์๋ก, ์ฌ์ดํธ๊ฐ ์์ฒญ ์์กฐ๋ฅผ ๋ปํฉ๋๋ค. CSRF๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์์์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์(๋ฐ์ดํฐ ์์ , ์ญ์ , ๋ฑ๋ก ๋ฑ)์ ํน์ ์น์ฌ์ดํธ์ ์์ฒญํ๋ ๊ณต๊ฒฉ์ ๋๋ค.์๋ฅผ ๋ค์ด, ํผํด์์ ์ ์ ๋ฉ์ผ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ํธ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๊ธ์ด์ฒด๋ฅผ ํ๋ ๋ฑ์ ๋์์ ์ํํ๊ฒ ํ ์ ์์ต๋๋ค. ๋, ํน์ฑ์ ๋ฐ๋ผ ๊ณต๊ฒฉ์๋ ์ฌ์ฉ์์ ๊ณ์ ์ ๋ํ ์์ ํ ์ ์ด๊ถ์ ์ป์ ์๋ ์์ต๋๋ค.์๋ฒ๋ ๋ก๊ทธ์ธ ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ธ์ (session)์ ์ ์ฅํ๊ณ ์ด์ ๋งค์นญ๋๋ ์ธ์ ์์ด๋(session ID)์ ๋ง๋ ๋ค.์๋ฒ๋ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ์ธ์ ์์ด๋๋ฅผ Set-Cookie ํค๋์ ๋ด์์ ์ ๋ฌํ๋ค.. [Dream Hack - Web] xss-2 ๋ฌธ์ ํด์/vuln ํ์ด์งxss-1์์์ ๋ค๋ฅด๊ฒ script ์ฝ๋๊ฐ ๋์ํ์ง ์๋๋ค. /vuln ๋ผ์ฐํฐ๋ฅผ ์ดํด๋ณด๋ vuln.html ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ์๋ค.@app.route("/vuln")def vuln(): return render_template("vuln.html"){% block content %} {% endblock %}์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด,location.search ⇒ URL ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ถ๋ถ์ ๋ฐํํ๋ค. ์๋ฅผ ๋ค์ด, http://example.com?page=1¶m=test์ธ ๊ฒฝ์ฐ location.search๋ ?page=1¶m=test ๊ฐ ๋๋ค.new URLSearchParams(location.search) ๋ ์ด ์ฟผ๋ฆฌ ๋ฌธ์์ด์ URLSearchParams ๊ฐ์ฒด.. [Dream Hack - Web] xss-1 ๋ฌธ์ ํด์/vuln ํ์ด์ง/vuln ๋ผ์ฐํฐ๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ทธ๋๋ก html์ ๋๋๋ง ํด์ฃผ๊ธฐ ๋๋ฌธ์ XSS ์ทจ์ฝ์ ์ ๋ณด์ ํ๊ณ ์๋ค.@app.route("/vuln")def vuln(): param = request.args.get("param", "") return param๊ทธ๋์ http://127.0.0.1:8000?param= ์ ๋๊ฒผ์ ๋, ์๋์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค./memo ํ์ด์งํ๋ผ๋ฏธํฐ๋ก ๋๊ธด memo ๊ฐ์ ๋ํด ๊ณ์ ์ด์ด๋ถ์ฌ ๋๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + ".. ์ด์ 1 2 3 4 ๋ค์