가장 먼저 볼 수 있는 화면. vuln, flag, login 페이지가 있다.
read_url 함수: Python Selenium을 사용해 지정된 URL에 접속하고 쿠키를 설정한 후, 페이지를 로드하는 함수
cookie={“name”: “name”, “value”: :value”}: 이름과 값을 가지는 쿠키를 설정하는 딕셔너리
name = name, value=value로 설정되어 있음
/ (메인) 페이지 → 세션 기반 인증
session_id = request.cookies.get('sessionid', None): 쿠키에서 세션 아이디 가져오기. 없으면 none이 기본값
username = session_storage[session_id]: 가져온 session_id를 사용해 storage라는 세션 정보 저장하는 곳에서 해당 세션에 연결된 사용자를 찾음
return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not an admin"}’): username이 ‘admin’이면 플래그 출력. 아닌 경우에는 you are not an admin 출력
vuln 페이지 → 익스플로잇 코드 삽입 페이지
xss_filter = [”frame”, “script”, “on”]
for _ in xss_filter:
param = param.replace(, “*”)
: xss_filter라는 리스트에 frame, script, on 문자열 포함. for 루프 사용으로 해당 문자열이 param에 해당할 경우 그 문자열을 *로 대체
GET 방식으로 접근하면 flag.html 반환
POST 요청은 param을 받아옴
check_csrf~ : CSRF 검사를 위한 함수 호출. 해당 함수는 입력된 param과 sessionid 쿠키값 비교&검증
맨 앞에서 봤던 main 페이지에는 없던 페이지가 있음
파라미터를 보니 비밀번호를 변경할 수 있는 페이지로 예상됨
URL에서 pw라는 파라미터로 새 비밀번호 생성
쿠키에서 sessionid를 가져와 저장공간에서 해당 세션의 사용자를 찾음
세션이 유효하면 사용자의 비밀번호를 pw로 업데이트
해결 방법
vuln 페이지는 스크립트 필터링이 적용되어 있음
하지만 <img> 태그는 사용 가능함. 따라서 <img src=“”>를 통해 /change_password에 접속 시도
파라미터를 이용하여 변수 pw에 admin의 비밀번호를 설정하면 됨
<img src=/change_password?pw=1234> 를 입력하면 비밀번호가 변경됨
다시 로그인 페이지로 돌아가서
id: admin
pw: 1234
하면 플래그값을 찾을 수 있음
'W3B H4CK1NG' 카테고리의 다른 글
[dreamhack] Lecture. Same Origin Policy, SOP (1) | 2024.10.08 |
---|---|
[dreamhack] simple sqli (0) | 2024.10.04 |
[dreamhack] PHPreg_step1 (0) | 2024.09.09 |
[dreamhack] Lecture. Cookie (0) | 2023.11.28 |
[dreamhack] Lecture. Background: Web Browser (1) | 2023.11.28 |