목록분류 전체보기 (186)
Iriton's log
보호되어 있는 글입니다.
/admin/notice_flag에서 userid 값이 admin이 아니면 Access Denied 2를 띄우며 리턴되지만 admin이라면 memo_text에 플래그 값을 추가한다. 이 memo_text는 어디에 쓰일까? 전역 변수 memo_text는 메모 페이지에 들어갈 때 파라미터값을 전달 받아서 html에 작성하고 그 값을 띄운다. 즉, /admin/notice_flag 에 admin으로 접근하면 된다. flag 페이지에서 값을 입력 받고 check_csrf 함수를 호출한다. 해당 함수에서는 csrf 인지 판별하기 위해 /vuln를 거쳐서 온다. /vuln에서는 (사진에선 안보이지만) frame, script, on을 필터링 한다. sscript 와 같이 문자 사이에 문자열을 넣어도 되는데 이번엔 ..
alert(1)을 띄우면 되는 문제이다. 일단 문자열 아무거나 입력해서 어떤 방식으로 작동되는 건지 확인해 보자. 두 글자 이상 입력하면 no hack이라고 뜬다. 두 글자 이상의 문자를 검열하여 아예 아무런 코드도 작성하지 못하게 하려는 거 같다. 숫자나 기호는 무난하게 실행이 된다. 그럼 문자 사이마다 NULL 값을 넣어서 검열 우회를 해보는 건? ?code=a%00l%00e%00r%00t(1); 가능!
코드 상단에서 flag.txt 를 읽어서 FLAG의 값으로 넣는다. users 정보에는 guest의 비밀번호는 guest, admin의 비밀번호는 flag로 매칭되어 있다. 기본 페이지에서 username이 admin이라면, 즉, admin으로 로그인 했다면 FLAG 값을 띄워 준다. guest가 아닌 admin으로 로그인 해야 한다. (+ /login 페이지에서 로그인 성공 시에 입력된 id와 pw를 세션 값으로 넣는 절차를 진행하기 때문이다.) WEB에 보여지지 않은 비밀번호 변경 페이지 발견. 파라미터 값을 세션 아이디의 username에 매칭되는 pw로 넣음. 이때 username의 원래 pw를 체크하는 등의 코드는 존재하지 않음! 또한, flag 페이지 자체에서 세션 아이디 값을 admin으로 ..
제목만 봐도 XSS 문제인 걸 알 수 있다. 필터링이 존재하는데 이를 우회하는 것인가 보다. app.py부터 살펴보자. xss_filter 함수가 존재한다. 여기서는 script, on, javascript: 라는 문자열 세 개 중 하나라도 존재하면 공백으로 처리한다. lower() 함수를 사용해서 입력된 문자열을 소문자로 변경하기 때문에 대문자로 작성하여 우회하는 방법도 먹히지 않는다. 보통은 XSS 필터링 우회할 때 아래와 같은 방법을 사용한다. 1. 대문자로 쓰기 (SCRIPT) 2. onerror 사용 ( 3. javascript: ( alert!) 근데 이 코드에서는 3가지 방법을 모두 막으려는 것이다. 코드를 자세히 보고 생각해 보면 _filter에서 해당하는 문자열이 있으면 그것만 공백으로 ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
웹 페이지 흐름은 아래와 같다. 첫 welcome 페이지 Sign up 하이퍼링크 타고 가면 Signup 페이지가 뜬다 유심히 볼 것은 URL인데, next=confirm 으로 입력되어 있다. Next 버튼을 누르면 /confirm으로 이동한다. next 인자 값에 따라 페이지가 바뀌나 싶어서 py 코드를 살펴 보았다. # Route the request to the appropriate template if "signup" in self.request.path: self.render_template('signup.html', {'next': self.request.get('next')}) elif "confirm" in self.request.path: self.render_template('confi..