문제풀이

[Dreamhack] xss-1 문제풀이

suuuullloc 2024. 2. 6. 20:16

# 문제링크 : https://dreamhack.io/wargame/challenges/28

 

xss-1

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 플래그 형식은 DH{...} 입니다. 문제 수정 내역

dreamhack.io


 

문제 파일

 

웹페이지

 

xss 취약점을 이용한 문제인 듯 하다. xss 취약점은 "게시판, 웹 메일 등에 삽입된 악의적인 스크립트에 의해 페이지가 깨지거나 다른 사용자의 사용을 방해하거나 쿠키 및 기타 개인 정보를 특정 사이트로 전송시키는 공격."이라고 볼 수 있다.

 

vuln(xss) page를 클릭해보면

이런 팝업이 뜨고

 

memo를 누르면

이런 창이 뜨고

 

flag를 누르면

이런 창이 뜬다.

 

코드를 살펴보자.

코드를 살펴보니 아래와 같이 정리할 수 있다.

  1. 취약한 엔드포인트 설정:
    • /vuln 엔드포인트는 사용자로부터 파라미터를 받아서 그대로 반환합니다. 이렇게 하면 사용자 입력이 그대로 HTML에 삽입되므로, 이러한 입력을 신뢰하지 않고 필터링하지 않는 경우 XSS 공격에 취약할 수 있습니다.
  2. XSS 공격을 수행하는 엔드포인트 설정:
    • /flag 엔드포인트는 POST 요청을 받습니다. 클라이언트가 param 파라미터를 제출하면, 이 값이 check_xss() 함수로 전달됩니다.
    • check_xss() 함수는 주어진 파라미터를 이용하여 특정 URL을 생성합니다. 그런 다음 Selenium을 사용하여 웹 브라우저를 실행하고 해당 URL을 방문합니다.
    • 이렇게 함으로써 param에 주입된 스크립트가 실행될 수 있으며, 만약 해당 스크립트가 악의적이라면 XSS 공격이 성공할 수 있습니다. 이러한 공격이 성공하면, flag.txt 파일의 내용을 플래그로 반환합니다.
  3. 메모 기능:
    • /memo 엔드포인트는 GET 요청을 받아 사용자로부터 받은 메모를 저장합니다. 이 메모는 전역 변수인 memo_text에 추가되며, 사용자에게 보여줄 때 이를 HTML 템플릿을 사용하여 렌더링합니다.

이 두 부분이 주요한 듯 싶다.

 

flag 부분에 /falg 경로의 파라미터를 입력하면 된다.

 

/memo 부분에 플래그 값이 출력되도록 해야하는데 그럴려면 <script>location.href="http://127.0.0.1:8000/memo?memo=hello"+document.cookie;</script> 값을 입력해주어야 한다. /memo 경로에 쿠키 값을 입력한다는 의미이다.

 

이렇게 입력을 해주면

 

이런 팝업창이 뜨고

 

memo 페이지로 가보면

이렇게 플래그가 출력된 걸 볼 수 있다.

 

문제 해결!

'문제풀이' 카테고리의 다른 글

[Dreamhack] Basic_Forensics_1 문제풀이  (0) 2024.02.20
[Dreamhack] baby-linux 문제풀이  (0) 2024.02.20
[Dreamhack] phpreg 문제풀이  (1) 2024.01.30
[Dreamhack] 64se64 문제풀이  (1) 2024.01.30
[Dreamhack] ROT128 문제풀이  (0) 2024.01.23