목록Dreamhack/Web Hacking (17)
Information Security Study

#!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' @app.route('/') def index(): return render_template('index.html') @app.route('/socket', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('socket.htm..

쿠키/세션을 조작하여 admin 계정으로 로그인에 성공하면 flag를 획득할 수 있는 문제이다. 별다른 내용은 없었다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } session_storage = { } @app.route('/') def index(): session_id = request..

index.php 에서 main.php 를 include 함수를 통해 GET 방식으로 불러온다는 것을 볼 수 있다. view.php 에서는 flag 문자열을 필터링하여 접속할 수 없게 해놓은 것을 볼 수 있다. 플래그 페이지는 접근 거부되어있다. flag 필터링을 우회하는 기법중 php wrapper 가 있다. page 에 대한 php://filter 를 사용하여 base64 로 인코딩하고 출력할 파일은 resource=/var/www/upload/flag 로 지정을 했다. 위와 같이 인코딩된 값이 출력되었다. 디코딩하여 플래그를 얻을 수 있었다.

페이지에 들어가보았다. 다른 탭은 눌러도 아무런 반응이 없었다. Get User Info에 들어갔다. View를 눌러보니 guest의 정보를 볼 수 있었다. 플래그는 /api/flag 에 저장이 된다. 그래서 userid 값을 0에서 ../flag 로 바꿔주었다. 플래그 획득!

리눅스를 사용해서 푸는 문제이다 sudo apt update && sudo apt install netcat 명령어를 실행한다

sql injection으로 flag를 찾는 문제이다. 해당 문제를 접속하면 볼 수 있는 페이지다. user 테이블에서 uid를 검색해 어떠한 결과 값을 확인할 수 있는 웹 페이지인 것 같다. init.sql 에는 user 테이블의 정보가 담겨있다. user 테이블에서 uid, upw는 총 5개가 있다. admin의 upw가 플래그임을 볼 수 있다. user 테이블의 uid를 입력하면 그대로 입력한 값이 출력되지만 admin을 입력하니 접근할 수 없다는 문자열이 출력되었다. app.py를 확인해보니 admin을 포함해 몇 요소들이 필터링되어 있었다. 입력한 data가 keywords에 포함되면 아까 보았던 접근이 되지 않는다는 문자열을 출력한다. 다음은 키워드를 우회하기 위한 코드이다. and = && ..

플래그는 /flag.txt에 있다고 한다. image-storage의 메인 페이지다. upload 페이지에서 파일을 upload 하면 list에 표기되는 것 같다. test.php 파일을 만들어 업로드를 해보았다. list 페이지에 upload 된 것을 확인할 수 있고 들어가보면 test.php 파일의 내용이 출력된다. 그런데 url을 보니 파일명이 그대로 노출되어있다. php 시스템 명령어를 통해 flag.txt 안에 있는 flag를 읽어올 수 있지 않을까? 싶어 위와 같은 코드로 php 파일을 만들어 list에 업로드해 보았다. 파일을 따라 들어가보면 flag를 얻을 수 있다.

file-download-1의 메인페이지다. upload my memo 페이지에서 메모를 작성할 수 있다. 어떻게 작동하나 보기 위해 test글을 upload 해보았다. home 페이지에 방금 생성한 memo의 filename이 뜬 것을 확인할 수 있다. filename을 클릭하면 해당 content를 볼 수 있다. 문제에서는 flag.py를 다운로드 받으면 flag를 얻을 수 있다고 했다. 29번째 줄을 보면 파일의 경로가 UPLOAD_DIR/filename 형식으로 업로드되는 것을 확인할 수 있다. 상위 폴더로 이동해 flag.py를 다운받아 플래그를 확인할 수 있을 것 같아 시도해 보았다. url을 수정해주었다. 플래그 발견!