Wargame | CTF

    Juice Shop - Basket Access Tier 2(★★★) 풀이

    다른 사람의 장바구니에 물품을 담는 문제입니다. 장바구니를 구별하는것은 BasketId 입니다. 해당 값을 바꿔서 전송하면 될 것 같습니다. 하지만 서버에서 에러를 전송합니다. Invalid BasketId 라고 하네요. 동일한 이름의 HTTP 파라미터를 제공하면 웹어플리케이션이 예상치 못한 방식으로 동작할 수 있다고 합니다. 이를 공격자가 악용 할 수 있다고 합니다. 파라미터로 BasketId를 한번 더 보내서 인증은 정상적인 나의 장바구니로 하고, 물품은 다른 사람의 장바구니에 넣을 수 있습니다.정상적으로 남의 장바구니에 물품을 넣었네요.

    Juice Shop - XXE Tier 1(★★★) 풀이

    XXE Injection 을 하는 문제 입니다 XXE Injection 이란 (XML External Entity Injection) 인데요 XML에 있는 외부 객체를 참조할 수 있는 기능을 이용해서 서버내 파일을 참조하게 만드는 해킹 기법입니다. XML 소스는 이렇게 작성해 줍니다. 서버 내 로컬 파일을 참조하기 위해 file 이라는단어를 쓰고, passwd 파일을 참조하도록 합니다. 작성한 XXE 파일을 업로드 합니다. Request에서 작성한 XXE 파일이 넘어가는 것을 확인할 수 있습니다. 서버의 Response를 인터셉트해서 확인하면, 서버의 passwd 파일이 참조되는것을 확인 할 수 있습니다. 모든 내용이 나오지는 않고, 짤리네요 아마도 서버에서 글자수를 제한해둔것 같습니다. 브라우저의 De..

    Juice Shop - XSS Tier3(★★★) 풀이

    프론트 엔드단에서 Persisted XSS 공격을 하지말라고 합니다. 툴을 이용해서 서버 쪽으로 요청을 보내서 XSS 공격을 하는것 같습니다. 먼저 메인페이지의 쥬스 목록들을 받아오는 요청을 확인합니다. JSON 방식으로 판매하는 각 쥬스에 대한 정보를 받아옵니다. 경로는 api/Products 이며 GET 방식으로 받아옵니다. 인증정보를 이용하기 위해 Send to Repeater를 눌러 Repeater로 보내줍니다. Repeater 에서 POST 방식으로 전송방식을 변경해줍니다. POST 방식이고, Content-Type는 JSON 방식 바디를 보낼것이므로 수정해주고, 맨 밑에 쥬스 항목추가를 위한 바디를 입력해 줍니다. Content-Length 는 자동으로 계산되어서 보내지는것 같습니다. 딱히 수..

    Juice Shop - Upload Size(★★★) 풀이

    100KB 이상 업로드를 해야하는 문제입니다. 먼저 100K를 넘지 않는 파일을 생성해 줍니다. dd 라는 명령어를 사용하면 된다고 하네요. 99KB의 파일이 생성 되었습니다. Complain 페이지에서 이 파일을 업로드 한 후, 버프슈트로 요청을 가로채 줍시다. 100KB가 넘도록 의미없는 데이터를 추가하여 보내줍니다.

    Juice Shop - XSS Tier 2(★★★) 풀이

    지속형 XSS 공격을 하는 문제 입니다. 클라이언트 단에서만 검증하는 매커니즘을 우회하면 된다고 하네요. 지속형은 비지속형인 Reflected XSS 와 달리 한번 공격자가 주입한 데이터가 서버에 저장된 다음 다른 사용자에게 노출되어서 계속 발생하게 됩니다. 대표적으로 게시판이 있습니다.계정을 등록하는 과정에서는 클라이언트 단에서만 검사를 하고, 서버단에서는 검사를 하지 않습니다. 그 예로 전송할때, email 부분을 조작하여 요청을 보낼 수 있습니다. 정상적으로 클라이언트 단의 보안 매커니즘을 우회하였고, 계정이 생성되었습니다. 이 계정정보를 administration 페이지에서 Registered Users 를 통해서 다시 한번 게시판 형식으로 뿌려지는데, 여기서 스크립트가 작동하게 됩니다. 게시판은..

    Juice Shop - Payback Time(★★★) 풀이

    주문하면 부자가 된다고 하네요. 주문에서 뭔가를 조작하면 될 것 같습니다. 먼저 하나를 장바구니에 담습니다. 버프슈트의 인터셉트 기능을 켜고 플러스 버튼을 눌러줍니다. 개수를 전송하는 부분에 마이너스 값을 넣어준 후, 주문을 합니다. 가격이 마이너스가 된걸 확인할 수 있네요.

    Juice Shop - Admin Registration(★★★) 풀이

    어드민으로 계정을 만드는 문제입니다. 먼저 그냥 계정을 생성해 보겠습니다. Request 에는 없던 필드가 Response에 있네요 isAdmin 이라는 필드 입니다. 해당 값이 false로 되어있습니다. Response 필드에 isAdmin:true 를 추가하여 요청하였더니 어드민 계정이 성공적으로 만들어 졌습니다.

    Juice Shop - Upload Type(★★★) 풀이

    pdf 형식이 아닌 파일을 업로드 하는 문제입니다. 한줄 웹쉘을 작성한 후, 확장자를 pdf로 변경하고 업로드를 해줍니다. 버프슈트로 인터셉트를 잡아주고, 파일이름을 webshell.php로 변경해 줍니다. 성공적으로 다른 확장자를 가진 파일을 업로드 하였습니다.

    Juice Shop - CAPTCHA Bypass Tier 1(★★★) 풀이

    캡차를 우회하여서 피드백을 10초안에 10개이상 보내는 문제입니다. 먼저 인터럽트를 걸고 피드백을 보내는 요청을 잡아줍시다. 잡은 요청을 반복해서 보내기 위해 버프슈트 내 Repeater 기능을 사용할건데요. 피드백을 보내는 http 요청 전체를 복사해줍니다.repeater의 Request 부분에 복사한 헤더를 붙여넣기 해주시고, 타겟은 localhost 포트는 3000번으로 해줍니다. 그리고 Go 버튼을 빠르게 눌러서 요청을 여러번 보냅니다. 정상적으로 요청이 보내졌고, 서버에서도 201로 응답하였습니다.

    Juice Shop - Forged Review(★★★) 풀이

    다른사람이 쓴 리뷰를 수정하거나 다른 사람의 이름으로 리뷰를 등록하라는 문제입니다. author 파라미터를 수정해 줍니다. 다른사람의 이름으로 리뷰가 등록되었습니다.

    Juice Shop - Login Jim(★★★) 풀이

    역시 똑같은 문제입니다. Jim 계정으로 로그인 하여야 합니다. Jim 계정명을 확인해 줍니다. 계정을 입력하고 싱글쿼터로 닫아준 뒤에, 패스워드 필드를 모두 주석처리 해줍니다. Jim 의 계정으로 성공적으로 로그인 되었습니다.

    Juice Shop - Login Bender(★★★) 풀이

    관리자계정에 로그인 하는것과 같은 문제 입니다. administration 페이지에서 계정을 확인합니다. 계정을 입력해 주고 싱글쿼터를 닫아 준 후, 패스워드 필드를 주석처리 해줍니다. 로그인 성공

    Juice Shop - Forged Feedback(★★★) 풀이

    다른 유저의 이름으로 피드백을 작성하는 문제입니다. 먼저 피드백을 작성하고, 버프슈트로 인터럽트를 걸어줍니다.요청을 보내는 필드에 UserId라는 파라메터가 있네요. 현재 값은 1입니다. 이 값을 3으로 바꿔서 포워드 해줍니다. 정상적으로 다른 유저 이름으로 피드백이 등록된걸 확인할 수 있습니다.

    Juice Shop - Login Admin(★★) 풀이

    관리자 계정으로 로그인하는 문제 입니다. 특별한 조건이 붙여있지 않는걸로 봐서 SQL 인젝션을 이용하면 될것같네요. 아까 administration 페이지에서 회원목록을 볼 수 있었습니다. 가입 순으로 정렬이 되는것 같고, 제일 처음 가입된 계정인 admin 이라는 이메일이 아마도 어드민 계정인것 같네요. 패스워드 쪽에서는 SQL 인젝션이 방어 되어있는것 같고, 이메일 쪽에서 아까 오류를 핸들링 해주지 못하는 모습이 보였으므로 이메일쪽에서 시도해 줍니다. 어드민 계정을 입력하고, 싱글쿼터로 닫아준후, -- (주석) 을 입력해서 뒤의 패스워드 필드를 모두 주석처리 해줍니다. 정상적으로 SQL Injection이 성공한 모습을 볼 수 있습니다.

    Juice Shop - Five-Star Feedback (★★) 풀이

    별점 5점의 피드백을 삭제하는 문제입니다. 별 한개짜리 문제에서 administration 페이지에 접근이 가능했습니다. 휴지통 아이콘이 있는걸로 봐서는 삭제도 가능한가 봅니다. 별점 5점짜리 피드백을 삭제해줍시다.