bWAPP

A1 - Injection : HTML Injection - Stored (Blog)

은율00 2024. 8. 8. 20:30

HTML Injection - Stored (Blog)란?

HTML Injection - Stored (Blog)는 사용자가 입력한 악성 HTML 코드가 서버에 저장되고, 다른 사용자가 이를 볼 때마다 실행되는 취약점입니다. 이는 블로그, 게시판, 댓글 시스템과 같이 사용자 입력을 저장하고 표시하는 웹 애플리케이션에서 발생합니다.

어떻게 작동하나?

  1. 악성 코드 입력: 공격자는 블로그 게시글이나 댓글 입력란에 악성 HTML 코드를 삽입합니다.
  2. 저장: 이 입력은 서버의 데이터베이스에 저장됩니다.
  3. 표시: 다른 사용자가 해당 게시글이나 댓글을 볼 때, 저장된 악성 HTML 코드가 실행됩니다.

문제점

  1. 다수의 사용자에게 영향: 한 번의 공격으로 여러 사용자가 영향을 받을 수 있습니다.
  2. 데이터 유출 및 도난: 악성 스크립트가 실행되면서 사용자 쿠키, 세션 정보 등이 탈취될 수 있습니다.
  3. 신뢰도 손상: 사용자가 악성 스크립트로 인해 피해를 입으면 웹사이트의 신뢰도가 크게 손상됩니다.

방어 방법

  1. 입력 검증 및 필터링: 사용자가 입력한 데이터를 철저히 검증하고 필터링합니다.
    • htmlspecialchars 또는 htmlentities 함수를 사용하여 HTML 특수 문자를 인코딩합니다.
  2. 출력 시 인코딩: 저장된 데이터를 출력할 때 HTML 엔티티로 인코딩하여 스크립트 실행을 방지합니다.
  3. 콘텐츠 보안 정책(CSP) 적용: CSP를 사용하여 외부 스크립트 로드를 제한합니다.
  4. 정기적인 보안 점검: 웹 애플리케이션에 대한 정기적인 보안 점검을 수행하여 취약점을 조기에 발견하고 수정합니다.

 

Low 단계

시작화면

시작화면 입니다. 글을 입력할 수 있는 칸이 뜨니 아무 문자나 입력을 한 번 해보도록 하겠습니다.

아무거나 입력하니, 글쓴 계정, 글을 쓴 날짜, 글을 쓴 내용이 보이는 것을 확인할 수 있습니다. 단순 블로그에 글을 쓰는 건데 왜 위험할 수도 있는가? 에 대해 의문이 들 수 있으니 알아보도록 하겠습니다.

코드 입력

클릭해보세용
<a href = "https://google.com" target = _black>click</a>

HTML 코드를 입력해서 넣었고 실제로 click라는 버튼이 생겼습니다. 저 버튼을 클릭할 시에 www.google.com로 로 이동하게 됩니다. 만약 입력해서 넣은 코드가 구글이 아닌 다른 악성 사이트로 넘어가게 된다면 굉장히 위험할 겁니다. 근데 솔직히 바보가 아니라면 저 버튼 그냥 클릭 안하면 악성 사이트에 들어갈 일이 없으니 어떻게 보면 그렇게 위험하지는 않은 공격문이라고 당연히 생각할 수 있습니다.

 

아래 글 참고

2024.08.05 - [bWAPP] - A1 - Injection : HTML Injection - Reflected (GET)

 

A1 - Injection : HTML Injection - Reflected (GET)

HTML Injection - Reflected (GET)란?HTML Injection - Reflected (GET)는 웹 페이지에 사용자가 입력한 HTML 코드가 그대로 반영되어 표시되는 취약점을 이용한 공격이며, 여기서 Reflected는 입력한 데이터가 서버에

jshinh.tistory.com

전에 썻던 글을 참고하여 공격 구문을 넣어봤습니다. 이제 HTML Injection - Stored(Blog) 를 들어가기만 한다면

어태커 사이트

이렇게 어태커 사이트로 자동으로 들어가지게 되고, 어태커 사이트에서는 자동으로 사용자의 세션을 탈취해가는 위험한 구문입니다.

이처럼 공격 구문을 어떻게 넣냐에 따라 위험도가 달라지게 됩니다.

192.168.133.128/phpmyadmin

 저는 Medium 단계와 High 단계를 실습해봐야 하는데 위에도 말했다싶이 HTML Injection - Stored(Blog) 를 들어가기만 한다면 어태커 사이트로 넘어가지기 때문에 제가 입력한 구문을 삭제해주는 작업이 필요합니다.

자신의 bee-box IP /phpmyadmin 를 URL에 입력하면 이러한 창으로 들어와지는 걸 확인할 수 있습니다.

ID = root Password = bug

초기 설정값을 입력해주어 로그인을 진행해주시면 됩니다.

로그인 후 왼쪽 위에 bWAPP 클릭

 

빨간색 박스 클릭
체크 후 X 버튼

이렇게 내가 입력한 구문을 삭제해주는 작업을 진행해주시면 됩니다.

삭제 후 정상적으로 돌아온 화면

게시글 삭제 후 깔끔하게 사라진 것을 확인할 수 있습니다. 이제는 POST 사이트를 사용하여 공격해보는 실습을 진행호보도록 하겠습니다.

2024.08.06 - [bWAPP] - A1 - Injection : HTML Injection - Reflected (POST)

 

A1 - Injection : HTML Injection - Reflected (POST)

HTML Injection - Reflected (POST)란?HTML Injection - Reflected (POST)는 사용자가 입력한 데이터를 HTML 형식으로 처리하여 페이지에 즉시 반영하는 방식의 취약점을 이용한 공격입니다. 이 때, 데이터 전송 방식

jshinh.tistory.com

POST 화면

POST 화면으로 들어가 개발자도구 (F12)를 클릭하여 폼을 그대로 복사하여 줍니다.

 

<form action="/bWAPP/htmli_post.php" method="POST">

        <p><label for="firstname">First name:</label><br>
        <input type="text" id="firstname" name="firstname"></p>

        <p><label for="lastname">Last name:</label><br>
        <input type="text" id="lastname" name="lastname"></p>

        <button type="submit" name="form" value="submit">Go</button>  

    </form>

POST 글에서 복사한 form을 그대로 Blog 페이지에 삽입하게 되면 위에 화면이 나오는 것을 확인할 수 있습니다.

Blog에서 입력한 form에 HTML 태그를 넣어주고 Go 버튼을 클릭하게 된다면

이렇게 POST 화면으로 넘어와 구문이 입력되는 것을 확인할 수 있습니다.

 

Medium 단계