Web Hacking/Dreamhack 풀이 18

command-injection-1

command-injection-1 문제 정보 특정 Host에 ping 패킷을 보내는 서비스입니다. Command Injection을 통해 플래그를 획득하세요. 플래그는에 있습니다. 풀이 처음 접속 화면이다. Ping 탭으로 들어가보면 Host 밑에 입력 폼이 있다. input 속성의 placeholder가 8.8.8.8 이므로 그대로 입력해서 Ping!버튼을 눌러봤다. 다음과 같이 Ping 결과가 잘 출력되는 것을 확인해보았다. 다시 돌아와 8.8.8.8; ls를 입력해서 Ping! 버튼을 눌렀더니 형식을 일치시키라고 나온다. 문제 코드를 한 번 살펴보겠다. 문제 코드에는 해당 형식을 지정해주는 코드는 없는 것 같다. import subprocess from flask import Flask, requ..

simple_sqli

simple_sqli 문제 정보 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 풀이 먼저 사이트 접속하면 제일 처음 Login 탭이 있다. Home, About, Contact 다 똑같은 화면이다. Login 페이지는 userid와 password 입력란이 있다. 문제를 살펴보자 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() ..

simple_sqli_chatgpt

simple_sqli_chatgpt 문제 정보 어딘가 이상한 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 사이트에 접속하면 이런 화면이 뜬다. 로그인 페이지에는 'userlevel'이라는 입력 필드가 있으며, 이 필드를 이용하여 로그인이 가능하다. 여기서 문제를 살펴보면 해당 코드는 다음과 같은 동작을 수행한다. "database.db"라는 파일이 현재 디렉토리에 존재하지 않으면, SQLite 데이터베이스를 생성한다. 생성된 데이터베이스에 'users'라는 이름의 테이블을 생성한다. 이 테이블은 'userid', 'userpassword', 'userlevel'이라는 3개의 컬럼을 가진다. 'guest'와 'adm..

CSRF-2

문제 정보 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. 풀이 해당 주소로 들어가면 이렇게 나온다. 먼저 문제에서 15번 줄을 보고 id: guest pw: guest로 로그인 해봤다. 로그인하면 Hello guest, you are not an admin이라고 바뀐다. vuln(csrf) page에 들어가보면 구문이 작동하지 않는 걸 알 수 있다. 하지만 는 사용 가능하기 때문에 구문은 사용할 수 있다. 문제에 보면 /change_password에서 user[username] = pw 를 봤을 때 flag를 통해 change_password 로 암호를 변경하는 파라미터를 보내면 된다. 를 flag 페이지에서 넣어주면 된다. 그러면 adm..

CSRF-1

문제 정보 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. 풀이 사이트에 접속하면 이런 화면이 나온다. vuln(csrf) page에 들어가보면 부분은 출력되고 script는 출력되지 않기 때문에 html 구문을 넣어서 csrf 공격을 수행하면 될 것 같다. memo 페이지에 접속하면 memo 파라미터로 hello를 전달하고 출력하는 걸 볼 수 있다. notice flag 페이지에서는 Access Denied라고 나온다. 문제를 살펴보면 /admin/notice_flag 부분에서 userid가 admin이면 flag가 나올 것이다. 따라서 flag 페이지에서 를 넣어주면 memo 페이지에 flag가 나온다.

XSS-2

문제 정보 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 플래그 형식은 DH{…} 입니다. 풀이 접속하면 XSS-1 과 비슷하다. vuln 페이지에 들어가보면 이번엔 가 작동하지 않는 걸 확인할 수 있다. 따라서 이를 우회할 수 있는 다른 방법을 사용해야 한다. 우회 기법을 찾아보니 SVG 공격을 찾을 수 있었다. SVG 태그는 벡터 그래픽을 표현할 때 사용되는데 이 태그를 이용하여 XSS 테스트가 가능하다. 따라서 flag 페이지에 를 입력하면 memo창에 flag 값인 쿠키를 찾을 수 있다.

XSS-1

문제 정보 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 플래그 형식은 DH{…} 입니다. 풀이 먼저 사이트에 접속해보면 이런 화면이 나온다. vuln 페이지에 들어가보면 url에 써있는 ' return '' memo_text = "" check_xss 함수를 보면 param 과 cookie를 인자로 받는다. 여기서 param은 url에 의해 바뀌면서 read_url 함수를 사용해 리턴된다. def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"" return read_url(url, cookie) 따라서 para..

Session-basic

문제 정보 쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. 플래그 형식은 DH{…} 입니다. 풀이 먼저 사이트에 접속하면 이런 화면이 나온다. 다음은 Login 페이지이고 username과 password 입력란이 있다. 여기서 문제를 살펴보겠다. 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'..