엔드포인트설명
/ | 인덱스 페이지 입니다. |
/vuln | 이용자가 입력한 값을 출력 (이 때 XSS가 발생할 수 있는 키워드는 필터링함) |
/memo | 이용자가 메모를 남길 수 있으며, 작성한 메모를 출력 |
/admin/notice_flag | 메모에 FLAG를 작성하는 기능 이 기능은 로컬호스트에서 접속해야 함, 사이트 관리자만 사용가능 |
/flag | 전달된 URL에 임의 이용자가 접속하게끔 함 |
코드 해석(중요하다 생각되는 일부만 가져옴) ← 본인이 아직 코딩을 완전히 마스터하지 않았기에 이해를 돕기 위해 추가
@app.route('/admin/notice_flag') # notice_flag 페이지 라우팅
def admin_notice_flag(): global memo_text # 메모를 전역변수로 참조
if request.remote_addr != '127.0.0.1': # 이용자의 IP가 로컬호스트가 아닌 경우
return 'Access Denied' # 접근 제한
if request.args.get('userid', '') != 'admin': # userid 파라미터가 admin이 아닌 경우
return 'Access Denied 2' # 접근 제한
memo_text += f'[Notice] flag is {FLAG}\n' # 위의 조건을 만족한 경우 메모에 FLAG 기록
return 'Ok' # Ok 반환
-----------------------------------------------------------------
@app.route("/flag", methods=["GET", "POST"]) # flag 페이지 라우팅 (GET, POST 요청을 모두 받음)
def flag():
if request.method == "GET": # 이용자의 요청이 GET 메소드인 경우
return render_template("flag.html") # 이용자에게 링크를 입력받는 화면을 출력
elif request.method == "POST": # 이용자의 요청이 POST 메소드인 경우
param = request.form.get("param", "") # param 파라미터를 가져온 후,
if not check_csrf(param): # 관리자에게 접속 요청 (check_csrf 함수)
return '<script>alert("wrong??");history.go(-1);</script>'
return '<script>alert("good");history.go(-1);</script>'
def check_csrf(param, cookie={"name": "name", "value": "value"}):
url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" # 로컬 URL 설정
return read_url(url, cookie) # URL 방문
def read_url(url, cookie={"name": "name", "value": "value"}):
cookie.update({"domain": "127.0.0.1"}) # 관리자 쿠키가 적용되는 범위를 127.0.0.1로 제한되도록 설정
try:
options = webdriver.ChromeOptions() # 크롬 옵션을 사용하도록 설정
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
함께 실습을 통하여 해당 실습을 풀기는 하였으나, 자력으로 완전히 이해하고 푼 것이 아니라 차후에 복습이 필요하다
자세한 내용은 드림핵 웹해킹 로드맵 스테이지5!!
https://dreamhack.io/lecture/courses/203
Exercise: CSRF
이 코스에서는 CSRF와 관련된 문제를 풀어봅니다.
dreamhack.io
'리버싱 > 드림핵' 카테고리의 다른 글
웹해킹 - Relational DBMS (0) | 2022.09.27 |
---|---|
CSRF-혼자실습(자료 참고) (0) | 2022.09.14 |
CSRF (0) | 2022.09.13 |
웹해킹 - XSS (0) | 2022.05.03 |
웹해킹 - SOP문제 오답 (0) | 2022.05.03 |