일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 비박스
- 웹
- CodeEngn
- 워게임
- TCP
- Webhaking
- 알고리즘
- 소프트웨어
- reversing
- Web
- ftz
- 순서도
- 웹해킹
- 시스템
- 드림핵
- 네트워크보안
- 소프트웨어보안
- hacking
- XSS
- webhacking
- dreamhack
- bee-box
- 해킹
- WarGame
- 네트워크
- System
- 리버싱
- network
- 모의해킹
- 시스템해킹
- Today
- Total
목록WarGame (7)
Without a Break

strcmp 함수를 무시할 수 있으면 플래그를 얻을 수 있다고 한다. 문제 사이트로 들어가면 패스워드를 입력할 수 있다. 패스워드 입력란 밑의 view-source를 누르면 소스코드를 볼 수 있다. 소스코드를 살펴보면, 사용자가 입력한 password와 실제 password를 strcmp(비교)하여 둘이 같으면(0) 플래그를 출력하는 것을 알 수 있다. PHP strcmp의 취약점을 이용해서 플래그를 얻을 수 있다는 것을 알 수 있다. PHP strcmp의 취약점은, 문자열이 아닌 배열을 인자로 넣게 되면 반환 값이 0이 된다는 것이다. 개발자 도구 요소에서 password를 배열로 바꿔주면 플래그를 얻을 수 있다.

코드 분석 @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.TimeoutExpired: return render_template('ping_result.html', data='Timeout !') except s..

문제 페이지로 들어가면 진짜 문자가 날라다닌다. 소스를 보면 각 문자 이미지가 있다. html 코드를 살펴보니 각 이미지 파일이 10 → 17 → 13 → 7 → ••• 순서로 있다. 아까 소스에서 발견한 각 이미지 파일의 문자를 코드에 있는 순서대로 배열하고 드림핵 형식을 맞춰주면 플래그를 찾을 수 있다.

VMware에 ubuntu를 설치하고 Ctrl+Alt+t로 터미널 창을 열어준 후 Hello Ubuntu!를 출력하였다.

[문제 파일] 데이터베이스 DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassword char(100));') db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");') db.commit() db.close() 데이터베이스 파일이 존재하지 않는 경우 파일을 생성하고 연결한다. 유저 테이블을..

[문제 파일] vuln() def vuln(): return render_template("vuln.html") vuln.html을 렌더링한다. flag() @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param") if not check_xss(param, {"name": "flag", "value": FLAG.strip()}): return '' return '' GET method를 요청받았을 때, flag.html 페이지를 렌더..

해당 문제의 문제 파일은 다음과 같이 이루어져 있다. html 파일로 들어가면 타이틀 페이지로 들어가게 된다. 이제 여기서 개발자 도구로 들어가주면 (Ctrl+Shift+i / F12) 개발자 도구의 Sources 탭에서 소스 코드를 확인할 수 있다. 드림핵의 플래그 형태는 DH{..}로 구성되어 있으므로 소스 코드에서 드림핵의 플래그 형태인 DH를 검색하면 소스 코드의 main.scss 파일에서 플래그를 발견할 수 있다. 답 : DH{2ed07940b6fd9b0731ef698a5f0c065be9398f7fa00f03ed9da586c3ed1d54d5}