검색 본문
engeon.tistory.com En_Geon [SK shieldus Rookies 19기][애플리케이션 보안] - WebGoat, Bee box, BeEF, XSS, CSRF 1. BeEF를 이용한 XSS 공격 1) 설치 및 실행 (1) 설치 sudo apt install beef-xss 입력으로 설치 (2) 실행 sudo beef-xss 입력 실행 처음 실행하면 기본 비밀번호 재 설정을 해야 한다. 각자의 비밀번호를 입력하고 넘어가면 127.0.0.1:3000 주소로 BeEF 페이지가 열린다. ID에는 beef를 입력하고 각자가 설정한 비밀번호를 입력하고 로그인한다. 2) XSS 공격 (1) XSS - Stored(Blog) 이전 포스팅에서 스크립트로 공격했던 페이지에서 BeEF로 공격 실습한다. (2) hook.js Kali 가상머신에 2. Django 에서 XSS 1) 질문에 스크립트 코드 포함 저장 2) 저장된 질문 확인 (1) 질문 페이지 확인 스크립트 코드가 실행되지 않고 단순한 문자열로 출력된다. 페이지 소스 코드는 어떻게 되어 있는지 확인해 본다. (2) 페이지 소스 코드 소스 코드에서 보면 스크립트 코드가 HTML 인코딩되어 단순한 문자열로 출력되는 것을 확인할 수 있다. (3) DB 확인 DB에는 스크립트 코드가 들어있는 것을 확인할 수 있다. (4) 코드 확인 DB에 저장된 내용을 XSS 공역에 안전하도록 출력해 주는 부분이다. DTL에서 실행할 수 있는 코드를 안전하게 HTM 3. CSRF(크로스 사이트 요청 위조) 요청을 전달받은 서버가 요청의 절차와 주체를 검증하지 않고 요청을 처리했을 때 발생 희생자의 권한으로 요청이 처리되는 문제 발생 자동 회원가입, 자동 글쓰기, 광고 배너 클릭 등에 악용 1) 동작 원리 만약 패스워드 변경 처리 페이지가 있을 때 아래와 같이 기능을 구현했다고 가정한다. 로그인(인증) 여부 확인 로그인해야만 패스워드 변경 가능 처리에 필요한 사용자 입력값이 전달되었는지 확인 패스워드 변경을 위한 사용자가 입력한 새 패스워드가 전달되었는지 확인 처리에 필요한 시스템이 가지고 있는 값을 추출 패스워드 변경을 4. Bee box 실습 로그인한 사용자의 패스워드를 변경을 신청하는 페이지다. 1) 개발자도구 이용 내용 분석 <h1>CSRF (Change Password)</h1> <p>Change your password.</p> <form action="/bWAPP/csrf_1.php" method="GET"> <p><label for="password_new">New password:</label><br> <input type="password" id="password_new" name="password 5. Django CSRF 토큰 발행 프레임워크에서 CSRF 토큰 발행 및 검증 처리 1) config\settings.py MIDDLEWARE에 CSRF 항목 활성화 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 31 1) 설치 및 실행 (1) 설치 sudo apt install beef-xss 입력으로 설치 (2) 실행 sudo beef-xss 입력 실행 처음 실행하면 기본 비밀번호 재 설정을 해야 한다. 각자의 비밀번호를 입력하고 넘어가면 127.0.0.1:3000 주소로 BeEF 페이지가 열린다. ID에는 beef를 입력하고 각자가 설정한 비밀번호를 입력하고 로그인한다. 2) XSS 공격 (1) XSS - Stored(Blog) 이전 포스팅에서 스크립트로 공격했던 페이지에서 BeEF로 공격 실습한다. (2) hook.js Kali 가상머신에 beef 클라우드 XSS CSRF webgoat Burp Suite 애플리케이션 보안 SK shieldus Rookies 19기 클라우드기반 스마트융합보안 Bee box 2024.03.31 블로그 검색 더보기 jjang-joon.tistory.com JJANG-JOON XSS(크로스사이트스크립팅) 기본 우회 방법 및 스킬업 XSS 공격의 원리 XSS 공격의 기본 원리는 사용자로부터 입력 받은 데이터를 적절히 검증하거나 이스케이프 처리하지 않고 웹 페이지에 그대로 반영할 때 발생한다. 공격자는 이러한 취약점을 이용해 스크립트 코드를 웹 어플리케이션에 주입하고, 이 코드가 다른 사용자의 브라우저에서 실행되도록 한다. 실행된 스크립트는 공격자에게 사용자의 데이터를 전송하거나, 사용자를 속여 피싱 사이트로 유도하는 등 다양한 악의적 행위를 할 수 있다. XSS 공격의 유형 저장된 XSS (Stored XSS): 악성 스크립트가 웹 어플리케이션 서버에 저장되어, 해당 페이지를 방문하는 모든 사용자에게 영향을 미치는 형태이다. 포럼 게시물, 댓글, 사용자 프로필 정보 등에 악성 스크립트를 삽입할 수 있다. 반사된 XSS (Reflected XSS): 사용자가 공격자가 조작한 링크를 클릭할 때, 서버로부터 악성 스크립트가 포함된 응답이 바로 반환되어 실행되는 형태이다. 검색 엔진, 메일, 메시지 등을 통해 공격 링크를 유포할 수 있다. DOM 기반 XSS (DOM-based XSS): 원래의 서버 응답은 XSS 공격 대응 방법 입력 검증: 사용자 입력 데이터에 대한 검증을 철저히 수행하여, 스크립트 등의 실행 가능한 코드가 포함되어 있지 않도록 한다. 출력 이스케이프 처리: 사용자 입력을 웹 페이지에 출력할 때, 스크립트와 같은 실행 가능한 코드가 브라우저에 의해 실행되지 않도록 HTML 엔티티 등으로 이스케이프 처리한다. 콘텐츠 보안 정책 (CSP): CSP를 사용하여, 특정 도메인이나 방식으로만 스크립트를 실행할 수 있도록 제한함으로써, XSS 공격의 위험을 줄일 수 있다. 쿠키에 HttpOnly와 Secure 플래그 설정: 이 플래그들을 설정함으로써 XSS 우회 방법 HTML 엔티티 사용 웹 어플리케이션이 특정 태그를 필터링하는 경우, HTML 엔티티를 사용하여 필터를 우회할 수 있다. 예시: < 대신 < 또는 > 대신 >를 사용할 수 있다. 이벤트 핸들러 일부 웹 어플리케이션은 <script> 태그를 필터링하지만, 다른 HTML 요소의 이벤트 핸들러 내에서 JavaScript 코드를 실행할 수 있는 것을 허용할 수 있다. 예시: <img src=x onerror=alert(1)> - 이 코드는 이미지 로드에 실패했을 때 alert를 실행한다. JavaScript URL 사용 <a> 4 HTML 엔티티 사용 웹 어플리케이션이 특정 태그를 필터링하는 경우, HTML 엔티티를 사용하여 필터를 우회할 수 있다. 예시: < 대신 < 또는 > 대신 >를 사용할 수 있다. 이벤트 핸들러 일부 웹 어플리케이션은 <script> 태그를 필터링하지만, 다른 HTML 요소의 이벤트 핸들러 내에서 JavaScript 코드를 실행할 수 있는 것을 허용할 수 있다. 예시: <img src=x onerror=alert(1)> - 이 코드는 이미지 로드에 실패했을 때 alert를 실행한다. JavaScript URL 사용 <a> JavaScript 보안 웹 XSS 해킹 우회 웹보안 우회방법 크로스사이트스크립팅 2024.02.15 one3147.tistory.com One_Blog 2024 Dice CTF Write up [Web] String.fromCharCode.apply(null, data); let ret = btoa(prev); return ret; } 이것이 encode함수 입니다. 간단히 분석해보면 data라는 Uint8 배열을 선언하고, 배열 안에 history의 데이터를 순차적으로 추가하는 것을 볼 수 있습니다. history의 0번째 인덱스가 [0][1] [9][9] 라면, data는 [0][1][9][9]가 추가 되는... hacking WebHacking Writeup ctf writeup dicectf 2024diceCTF 2024.02.06 programforlife.tistory.com 나의 공부 저장소 [Spring] Spring Boot XSS Filter 생성하기 XSS란? XSS(Cross Site Scripting)란 사이트 간 스크립팅이라는 웹 보안 취약점입니다. 악의적인 사용자가 취약한 웹 애플리케이션에 스크립트를 삽입해 공격하는 것입니다. XSS 공격 유형 Reflected XSS : URL을 통해 Script 실행 Stored XSS : Script를 서버에 저장하여 요청/응답 과정을 통해 실행 DOM Based XSS : 피해자의 브라우저가 DOM생성할 때 악성 script 실행 위험성 쿠키 및 세션정보 탈취 악성 프로그램 다운 유도 의도하지 않은 페이지 노출 이 글에서는 제가 XSS 보안 취약점을 해결하기 위한 과정을 공유하려 합니다. 조사 결과, XSS 방지할 수 있는 다양한 후보가 있었습니다. (결론부터 말하자면, 일반적인 케이스에서는 4.번이 해결책이 되며, 저는 5.번으로 해결하였습니다.) lucy-xss-filter lucy-xss-servlet-filter ObjectMapper 커스터마이징 filter 자체 제작 참고) 여기서 XSS 필터링이란 아래처럼 script 태그들을 변환하여 script가 실 1. luxy-xss-filter (실패) lucy-xss-filter는 들어오는 요청 중 HTML 태그들을 치환하는 네이버에서 제작한 filter입니다. https://github.com/naver/lucy-xss-filter XSS 필터링이 필요한 곳에 개발자가 필터를 삽입하여 방어하는 방법입니다. < → <> → >" → "' → ' 하지만 lucy-xss-filter는 아래와 같은 한계점으로 사용하지 않았습니다. 휴면에러로 인해 필요한 곳에 XSS 방어코드 누락 불필요한 곳에 XSS 방어코드 적용 XSS 방어코드 분산되어 유지보수 비용 증가 2. lucy-xss-servlet-filter (실패) lucy-xss-servlet-filter는 lucy-xss-filter와 달리 애플리케이션으로 들어오는 모든 요청 파라미터에 대해 XSS 방어로직을 수행합니다. https://github.com/naver/lucy-xss-servlet-filter 설정한 url, 파라미터 명 등으로 filtering 제외 설정도 가능합니다. 설정 파일 하나로 XSS 방어절차를 관리할 수 있으며, XSS 방어가 누락되지 않는 장점이 있습니다. 다만 일괄 적용되기 때문에 정확한 필터링 룰 설정이 필요하고, 제작자분들도 기존 서비스에 적용하는 것을 비 3. ObjectMapper 커스터마이징 (실패) ObjectMapper는 RestAPI로 들어오는 요청의 JSON body를 Java DTO로 변환해 주고, Java DTO를 HTTP 응답 메시지로 변환하는 역할을 수행합니다. 이를 활용해서 아래와 같이 XSS를 방지할 수 있습니다. 들어온 요청의 JSON 데이터를 DTO로 변환할 때 필터링 보낼 응답의 DTO를 JSON 데이터로 변환할 때 필터링 이 중에 2. 번을 택해 악성 script가 서버에 저장되더라도 클라이언트 측으로 전송 시 HTML 태그가 필터링되어 script 실행이 안되도록 적용해 보겠습니다. HandlerInt 6 XSS(Cross Site Scripting)란 사이트 간 스크립팅이라는 웹 보안 취약점입니다. 악의적인 사용자가 취약한 웹 애플리케이션에 스크립트를 삽입해 공격하는 것입니다. XSS 보안취약점 Spring Boot 백엔드 Site Scripting 2023.12.31 soriaudio.com common js /** * @file common.js * @author NAVER (developers@xpressengine.com) * @brief 몇가지 유용한 & 기본적으로 자주 사용되는 자바스크립트 함... amp|lt|gt|quot|#039);/g, function(m) { return map[m]; }); }; /** * @brief string prototype으로 stripTags 함수 추가 **/ String.prototype.stripTags = function() { return String(this).replace(/<\/?[a-z][^>]*>/ig, ""); }; /** * @brief string prototype으로 trim 함수 추가 **/ if (!String.prototype.trim... 웹문서 검색 더보기 successing.tistory.com 'll Hacker XSS Filtering Bypass - 2 정리 foo = String.fromCharCode(72, 101, 108, 108, 111); // "Hello" 1-11) 기본 내장 함수 및 객체 문자를 이용하여 우회 ⏩ 내장함수나 객체를 toString 함수를 이용해 문자열로 변경하게 되면 함수나 객체의 형태가 문자열로 변환됨 원하는 문자열을 만드는데 필요한 문자들을 내장 함수나 객체로부터 한 글자씩 가져와... 2024.02.08 통합웹 더보기