목록WebHacking/WarGame (59)
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..
xss-1 푼 이후에 풀고 오기! 얘는 xss-1처럼 코드가 먹히지 않는다. /vuln 에서도 URL에는 alert(1)을 실행하는 스크립트가 있지만 alert 창이 뜨지 않았다. script가 아닌 img 태그를 이용할 수도 있다. img 태그에 src를 없는 이미지를 불러와서 오류를 발생시키면 처리할 코드를 onerror에 적어준다. 이때, onerror에 alert(1)을 넣어주면 처리되는지 보자. 이미지 오류가 뜨면서 alert 창이 떴다. 마찬가지로 alert창이 뜨게 만들었다면 취약점을 찾은 것이다. alert 대신 location.href='/memo?memo='+document.cookie 를 넣어주자. 이때 주의할 점은 onerror="" 안에 들어갈 코드이기 때문에 더블쿼츠와 싱글쿼츠를..
위치까지 자세히 알려 준다. 드림핵 xss 문제를 풀다 오니 페이지별 기능이 다 익혀져 있어서 코드를 따로 보진 않았다. /vuln : 취약점 연습하는 공간 정도로 생각 (이 문제에서는 alert(1)을 실행시킴) /memo : 메모 페이지이지만 flag를 띄우는 곳으로 간주 가능 /flag : 실질적으로 xss 공격을 하는 곳 우선 답을 알고 있기에 제공하고 시작하겠다. 가장 기본적인 xss 코드라 넣어봤는데 쉽게 풀렸다. /vuln 페이지에 가면 alert(1)을 실행한다. alert이 먹히면 이 자체만으로 취약점이 된다. 스크립트 코드 주입이 가능하다는 뜻이기 때문이다. 이를 이용하여 document.cookie로 cookie를 빼내올 수 있다. location을 이용해 /memo로 위치를 지정해 ..
DOM이란 Document Object Model의 약자이다. HTML의 문법은 태그의 집합으로 구성되어 있고 이러한 태그들은 트리 구조로 객체가 형성되는데 이러한 트리 구조 집합을 DOM 구조라고 한다. DOM Based XSS란 DOM 구조를 이용하여 요소들을 수정하거나 추가하는 등 동적 행위를 할 때 접근하는 JavaScript에 악성 스크립트를 삽입하여 클라이언트 측 브라우저에서 악성 스크립트가 실행되도록 하는 공격이다. Reflected XSS와 같이 동적 페이지를 구성하는 과정 상 발생하는 XSS 공격이다. 하지만 Reflected XSS는 서버 측에서 동적 페이지를 구성하는 환경에서 발생되는 XSS이다. 반면 DOM XSS는 클라이언트 측에서 사용자 입력 값을 통해 동적 페이지를 구성하는 환..