[Dreamhack] xss-1 풀이

minkyung·2023년 6월 2일
0

Dreamhack

목록 보기
1/6

web 문제이다.
level 1인데 다른 사이트의 웹해킹 문제보다 어려운 듯하다.
아무래도 python 코드를 주기 때문인듯

🔎 XXS-1 분석

페이지를 접속해보면 이렇게 세 개의 다른 페이지로 이동할 수 있다.

vuln(xss) page는 이렇게 취약점을 가진 페이지이다.
링크를 보면 vuln?param=<script> 이렇게 스크립트 코드를 삽입하여 그대로 먹히고 있다.

memo page에서는 링크에 memo=hello 로 입력된 문자열을 받아서 출력해준다.

하지만 script 코드는 필터링이 되어있다. vuln 페이지를 이용해야할 듯

flag 페이지는 vuln 페이지 링크로 무언갈 제출할 수 있는 페이지이다.
제출시 good이 뜬다.

💻 소스코드 분석

함수 별로 코드를 살펴보자

app = Flask(__name__)
app.secret_key = os.urandom(32)

try:
    FLAG = open("./flag.txt", "r").read()
except:
    FLAG = "[**FLAG**]"

우선 FLAG 에 flag가 담겨있다.

다음은 index 페이지, vuln 페이지, flag 페이지, memo 페이지를 구성하는 코드이다.

vuln 페이지에서는 param 값을 가져와 반환한다.
flag 페이지에서는 GET 메서드와 POST 메서드를 사용하는데 제출한 뒤에 무슨 일이 일어날지 POST 뒤를 분석해보자.
우선 param을 받아온다. 그 후 check_xss 함수를 호출하여 param과 flag를 인자로 넘겨준다. 그 후 good이나 wrong?? alert

그럼 check_xss 함수로 가보자

param 값과 딕셔너리 하나를 인자로 받아 cookie로 설정한다.
url에는 127.0.0.1:8000 주소로 vuln 페이지의 param 값을 설정하고 있다.
urllib.parse.quote는 string을 url 인코드하는 파이썬 함수

그렇다면 우리가 입력한 값이 127.0.0.1:8000의 vuln페이지의 url에서 param 값으로 전달되는 것이다.

그다음 다시 read_url에 url과 cookie(flag) 값을 인자로 전달하며 호출한다.

read_url이다. 조금 긴데 한 번 살펴보자.

일단 웹 드라이버 함수를 많이 사용하고 있다.

driver.get 함수부터 보면 될 것 같다.

get 함수는 입력한 url 주소로 접속하게 해주는 함수이다.
driver.add_cookie(cookie) 는 말 그대로 쿠키를 추가한다. 쿠키로 flag 값이 추가된 것이다.

그다음 우리가 입력한 param값이 포함된 url로 접속한다.

url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"

아까 봤듯 url은 다음과 같다.

그러면 제출버튼을 누를 경우 flag는 127.0.0.1:8000 에 쿠키 값에 저장이 되는 것이다. 그러면 이 값을 어떻게 가져올까??

📒 해답

flag가 로컬호스트 환경의 쿠키에 저장되어 있으므로
vuln?param에 memo 주소를 적고, memo 페이지의 memo 값을 document.cookie로 주자.

제출 ➡ 입력한 param값이 로컬 호스트 환경의 vuln 페이지 url로 전달 ➡ 로컬 호스트 쿠키에 flag 값 추가 ➡ url 접속 (vuln 페이지 접속) ➡ 메모 페이지로 접속하여 document.cookie를 입력

이런 로직으로 메모에 cookie를 입력하게 하는 계획

그렇다면 param 값으로 로컬호스트 환경의 memo 페이지로 이동하는 코드를 주면 된다.

<script>location.href="http://127.0.0.1:8000/memo?memo="+document.cookie</script>

이렇게 입력하면 성공🌟

profile
개발/보안 기록용

0개의 댓글