본문 바로가기

전체 글

(113)
[드림핵 워게임] [wargame.kr] tmitter 문제 사이트에 접속하면 처음으로 보이는 페이지이다. Sign Up으로 들어가본다. id 와 ps를 입력하는 폼이 있다. sql injection을 시도해본다. id에 admin' or 1=1-- 를 입력하고 ps에 12341234를 입력했다. sql injection이 제대로 먹혔다면 id : admin, pw : 12341234 로 로그인할 수 있을 것이다. 그런데 login failed가 떴다. Sign Up은 제대로 된 것인가 확인하기 위해 id : admin' or 1=1-- ps : 12341234로 로그인해보았다. 로그인에 성공했다. 하지만 id가 admin이 아니다. 오랜 시간 삽질 끝에 다음과 같은 방법으로 문제를 해결할 수 있었다. 문제에 계정 테이블를 생성하는 sql문이 제공되었는데, ..
[드림핵 워게임] NoSQL-CouchDB 문제 사이트에 접속하면 처음으로 보이는 페이지이다. app.post('/auth', function(req, res) { users.get(req.body.uid, function(err, result) { if (err) { console.log(err); res.send('error'); return; } if (result.upw === req.body.upw) { res.send(`FLAG: ${process.env.FLAG}`); } else { res.send('fail'); } }); }); 로그인 폼에서 받은 값을 처리하는 부분의 코드를 살펴보면 get() 함수를 통해 uid값을 받고 있는데 get() 함수는 전달된 인자에 대해 특수 구성 요소의 포함 여부를 검사하지 않기 때문에 취약점이 ..
[드림핵 워게임] XSS Filtering Bypass 1. 사이트 및 코드 확인 문제 사이트에 처음 접속하면 보이는 페이지이다. 먼저 vuln page에 들어가봤다. param 파라미터를 바꿔보고 싶다. xss 문제니까 일단 가장 단순한 형태의 xss 페이로드를 보내본다. 될 리가 없다. @app.route("/vuln") def vuln(): param = request.args.get("param", "") param = xss_filter(param) return param vuln 함수에서 xss_filter() 함수를 호출하고 있는데, def xss_filter(text): _filter = ["script", "on", "javascript:"] for f in _filter: if f in text.lower(): text = text.repl..
[드림핵 워게임] CSRF Advanced 1. 취약점 확인하기 문제 사이트에 접속하면 처음으로 뜨는 페이지이다. login, change password, vuln page, flag가 있는데, 먼저 취약점이 있는 vuln page를 확인해보자. vuln 페이지에 접속하면 위와 같은 url로 요청이 간다. @app.route("/vuln") def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param vuln 페이지에 해당하는 코드를 살펴보면 param에 전달된 파라미터에 대해서 XSS 공격만 필터링하고 그대로 리턴하는 ..
[드림핵 워게임] out of money 1. 사이트 및 코드 확인 문제 사이트에 접속하면 처음에 뜨는 페이지이다. 아무 이름이나 입력해서 Sign in 한다. Sign in 하면 나의 자산 내역을 확인할 수 있다. 자산의 종류에는 DHH, DHC, DHD가 있는 것을 알 수 있다. 산타 사설 거래소로 들어가본다. DHH를 빌리고, 코인을 교환하고, FLAG를 구매할 수 있는 페이지이다. @app.route("/santa/flag", methods=['GET']) def santa_flag(): if session['DHH'] >= 1000.0: if session['debt_DHH'] == 0.0: return render_template("flag.html") else: return render_template("santa.html", se..
[드림핵 워게임] command-injection-chatgpt 1. 사이트 및 코드 확인 문제 사이트에 접속하면 처음으로 보이는 페이지이다. Ping을 클릭해보았다. Host 를 입력하는 폼이 나온다. @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 {host}' try: output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5) return render_template('ping_result.html', data=output.decode('utf-8')) except subprocess.TimeoutExpire..
[드림핵 워게임] simple_sqli_chatgpt 1. 문제 사이트 및 코드 확인 문제 사이트에 접속하면 처음으로 뜨는 페이지이다. Login을 클릭해보았다. 로그인 폼을 볼 수 있다. id, password를 입력받지 않고 userlevel만 입력받고 있다. 문제 설명대로 어딘가 이상한 로그인 서비스이다. @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: userlevel = request.form.get('userlevel') res = query_db(f"select * from users where userlevel='{userlevel}'") if res: user..
[드림핵 워게임] 🌱 simple-web-request 1. step1 풀기 문제 사이트에 처음 접속하면 보이는 페이지이다. STEP1을 클릭한다. param과 param2 파라미터를 입력하는 폼이 있다. @app.route("/step1", methods=["GET", "POST"]) def step1(): #### 풀이와 관계없는 치팅 방지 코드 global step1_num step1_num = int.from_bytes(os.urandom(16), sys.byteorder) #### if request.method == "GET": prm1 = request.args.get("param", "") prm2 = request.args.get("param2", "") step1_text = "param : " + prm1 + "\nparam2 : " + ..