728x90 반응형 Juice Shop5 OWASP Juice Shop - Database Schema Exfiltrate the entire DB schema definition via SQL Injection. 직역하면 SQL Injection을 통하여 DB 스키마의 정의어를 가져오라는 의미이다. SQLi를 시도해 볼 수 있는 공격 벡터는 크게 로그인과 상품 검색 두 가지 었지만 로그인 부분은 일단 SQLi를 통해 원하는 결과를 가져오지 못하므로 일단 패스하였다. (그리고 이런 문제 유형의 공격 벡터는 주로 검색 페이지인 경우가 많았었다.) 주제와는 상관 없지만 계정 페이지에는 ERROR BASED를 이용하는 블라인드 SQLi 가능성은 있었다. jim@juice-sh.op' AND CASE WHEN (select 1 from Users where email='jim@juice-sh.op') THEN 1.. 2023. 9. 29. OWASP Juice Shop - Login Admin (Injection) 만일 로그인 쿼리문이 아래와 같다. SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL "admin@juice-sh.op' or '1'='1'--"를 입력한다면 SELECT * FROM Users WHERE email = 'admin@juice-sh.op' or '1'='1'--' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL 쿼리문의 결과가 참이 되면서 로그인이 성공한다. 2023. 9. 27. OWASP Juice Shop - 100kB보다 큰 파일을 올리세요. (Improper Input Validation) 다음과 같이 크기 별로 다른 파일이 있다. 가장 큰 파일은 120KB (122,880 바이트) 가장 작은 파일은 1바이트 (1 바이트) 중간은 97.6KB (100,000 바이트) 파일 업로드는 최대 100 KB까지 가능하므로 가장 큰 파일을 올리면 위와 같은 오류가 뜬다. 개발자 도구에 Console 탭을 확인하면 fileSize에 관련된 오류가 뜨게 된다. 크기가 큰 파일을 올리면 저 오류 문구가 뜨지만 그렇지 않으면 뜨지 않는다. 오류 원인 파일인 vendor.js를 확인하면 파일의 최대 사이즈를 비교하는 것 같은 필터 함수 부분이 보인다. 이걸 보았을 때는 최대 크기 사이즈인지 검증을 클라이언트 측에서 하는 것으로 보인다. 그럼 저 부분을 수정하면 100 KB가 넘는 파일도 올려 볼 수 있지 않을.. 2023. 9. 27. OWASP Juice Shop - 상품 리뷰 조작 (Broken Access Control) 다음은 특정 제품에 상품평을 작성하는 화면이다. 임의로 상품평 내용을 적고 확인을 누르면 등록이 되는 구조이다. 페이로드를 확인하면 author, message를 입력받는 것을 볼 수 있다. 버프스위트를 실행해 Interrupt를 걸어 아래의 페이로드 중 author를 "admin@juice-sh.op"로 조작한다. 리뷰를 확인하면 실제 관리자(admin@juice-sh.op)가 리뷰를 단 것처럼 모방할 수 있다. OWASP TOP 10에 등재된 취약한 접근 제어(Broken Access Control)의 한 예시 문제다. 2023. 9. 27. OWASP Juice Shop - 문의하기 Captcha Bypass (Broken Anti Automation) 문의하기 페이지(/contact) 구성도 사용자로부터 평점과 댓글을 입력받는데 하단에 CAPTCHA 인증이 필요하다. 캡챠 요청 REST API 구조 (/rest/captcha/) 서버에서 미리 캡챠를 생성하는 SSR 방식이 아닌 클라이언트가 페이지에 들어오면 캡챠를 요청하는 CSR 방식임을 알 수 있다. 따라서 클라이언트가 "http://localhost:3000/rest/captcha/"로 GET을 요청하면 다음과 같은 응답이 온다. {"captchaId":38,"captcha":"8*8-5","answer":"59"} 보다시피 캡챠 아이디, 문제, 정답이 그대로 전달이 된다. 캡챠 검증 REST API 구조 (/api/Feedbacks/) 사용자가 캡챠를 풀고 서버로부터 요청을 할 때는 "http:.. 2023. 9. 27. 이전 1 다음 728x90 반응형