본문 바로가기

분류 전체보기

(113)
[드림핵 워게임] simple-sqli 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 2개의 엔드포인트를 볼 수 있다. (1) 인덱스 페이지 ( / ) @app.route('/') def index(): return render_template('index.html') index.html을 렌더링 하고 있다. index 페이지에 접속해보면 메뉴바에 Home, About, Contact, Login 메뉴가 있는 것을 볼 수 있는데, 이 중에서 주목할 만한 페이지는 Login 페이지이다. (2) login 페이지 ( /login ) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login..
[드림핵 워게임] csrf-2 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 소스코드를 살펴보면 총 5개의 엔드포인트를 확인할 수 있다. (1) 인덱스( / ) @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 ..
[드림핵 워게임] csrf-1 위의 문제를 다음과 같은 방법으로 풀어보았다. 1. 총 4개의 엔드포인트가 있는 것을 확인할 수 있다. (1) vuln 페이지 @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에서는 xss_filter로 frame, script, on의 3가지 키워드를 필터링 하고 있어 xss 취약점을 보완하고 있는 것을 확인할 수 있다. 그러나 param 파라미터를 그대로 return하고 있으므로 필터링 되는 키워드를 사..
[드림핵 워게임] xss-2 위의 문제를 다음과 같은 과정으로 풀어보았다. 이 문제는 이전 게시물 [드림핵 워게임] xss-1과 유사하므로 두 풀이를 비교하면서 보면 더 잘 이해할 수 있다. 이전 게시물 : [드림핵 워게임] xss-1 https://studyforall.tistory.com/6 [드림핵 워게임] xss-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 인덱스 페이지를 포함해 vuln, memo, flag 페이지가 있는 것을 볼 수 있다. 코드상으로는 47행부터 인 studyforall.tistory.com 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 2. 각 페이지의 특징을 살펴본다. (1) 인덱스 페이지 ( / ) 다른 페이지들로 이동할 수 있는 ho..
[드림핵 워게임] xss-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 인덱스 페이지를 포함해 vuln, memo, flag 페이지가 있는 것을 볼 수 있다. 코드상으로는 47행부터 인덱스 페이지, 52행부터 vuln 페이지, 58행부터 flag 페이지, 73행부터 memo 페이지가 코딩되어 있다. 2. 각 페이지의 특징을 살펴본다. (1) 인덱스 페이지 ( / ) 다른 페이지들로 이동할 수 있는 home페이지다. (2) vuln 페이지 ( /vuln ) vuln 페이지로 들어가보면 alert 창이 뜬다. @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param 코드를 확인해보면, vu..
[드림핵 워게임] session-basic 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 소스코드 다운로드 드림핵 문제 페이지에서 Description > File > Download 를 클릭하고 압축을 풀면 'app2.py'이라는 파이썬 코드를 확인할 수 있다. 2. 코드 분석 users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } 11~15행에 있는 users를 보면 guest, user, admin 3개의 계정이 있는 것을 확인할 수 있다. @app.route('/') def index(): session_id = request.cookies.get('sessionid', None) try: # get username from session_storage username = s..
[드림핵 워게임] cookie 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 소스코드 다운로드 드림핵 문제 페이지에서 Description > File > Download 를 클릭하고 압축을 풀면 'app.py'이라는 파이썬 코드를 확인할 수 있다. 2. 코드 분석 users = { 'guest': 'guest', 'admin': FLAG } admin 계정으로 로그인에 성공하면 플래그를 얻을 수 있는 문제이므로 코드에서 계정과 관련되어 보이는 부분을 찾아보았다. 11~14행에 있는 users 변수가 계정에 대한 정보를 담고 있는 것을 확인할 수 있다. guest는 username, password 모두 guest인 것을 볼 수 있고, admin으로는 로그인에 성공하면 플래그를 얻을 수 있는 것으로 보인다. 문제에 있는 링크로 ..
[드림핵 워게임] web-misconf-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 문제에 있는 링크로 들어가기 잠깐의 로딩 후에 로그인 페이지가 뜬다. 여기에서 관리자 계정으로 접근할 것이다. 관리자 계정의 초기 상태의 아이디, 비밀번호는 일반적으로 admin이므로 아이디와 비밀번호 입력란에 각각 admin을 입력하여 로그인한다. 로그인 하면 위와 같이 비밀번호를 변경하라는 페이지가 뜨는 데 skip을 클릭하여 건너뛴다. 3. 좌측 메뉴바에서 admin 이라는 키워드가 보이는 Server Admin 메뉴로 접근 4. 플래그 탐색 상단의 탭들을 클릭해보며 DH{...} 형태로 되어있는 플래그를 찾는다. 플래그는 Settings탭에서 찾을 수 있었다.