A1 - Injection : HTML Injection - Stored (Blog)
HTML Injection - Stored (Blog)란?
HTML Injection - Stored (Blog)는 사용자가 입력한 악성 HTML 코드가 서버에 저장되고, 다른 사용자가 이를 볼 때마다 실행되는 취약점입니다. 이는 블로그, 게시판, 댓글 시스템과 같이 사용자 입력을 저장하고 표시하는 웹 애플리케이션에서 발생합니다.
어떻게 작동하나?
- 악성 코드 입력: 공격자는 블로그 게시글이나 댓글 입력란에 악성 HTML 코드를 삽입합니다.
- 저장: 이 입력은 서버의 데이터베이스에 저장됩니다.
- 표시: 다른 사용자가 해당 게시글이나 댓글을 볼 때, 저장된 악성 HTML 코드가 실행됩니다.
문제점
- 다수의 사용자에게 영향: 한 번의 공격으로 여러 사용자가 영향을 받을 수 있습니다.
- 데이터 유출 및 도난: 악성 스크립트가 실행되면서 사용자 쿠키, 세션 정보 등이 탈취될 수 있습니다.
- 신뢰도 손상: 사용자가 악성 스크립트로 인해 피해를 입으면 웹사이트의 신뢰도가 크게 손상됩니다.
방어 방법
- 입력 검증 및 필터링: 사용자가 입력한 데이터를 철저히 검증하고 필터링합니다.
- htmlspecialchars 또는 htmlentities 함수를 사용하여 HTML 특수 문자를 인코딩합니다.
- 출력 시 인코딩: 저장된 데이터를 출력할 때 HTML 엔티티로 인코딩하여 스크립트 실행을 방지합니다.
- 콘텐츠 보안 정책(CSP) 적용: CSP를 사용하여 외부 스크립트 로드를 제한합니다.
- 정기적인 보안 점검: 웹 애플리케이션에 대한 정기적인 보안 점검을 수행하여 취약점을 조기에 발견하고 수정합니다.
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) 를 들어가기만 한다면
이렇게 어태커 사이트로 자동으로 들어가지게 되고, 어태커 사이트에서는 자동으로 사용자의 세션을 탈취해가는 위험한 구문입니다.
이처럼 공격 구문을 어떻게 넣냐에 따라 위험도가 달라지게 됩니다.
저는 Medium 단계와 High 단계를 실습해봐야 하는데 위에도 말했다싶이 HTML Injection - Stored(Blog) 를 들어가기만 한다면 어태커 사이트로 넘어가지기 때문에 제가 입력한 구문을 삭제해주는 작업이 필요합니다.
자신의 bee-box IP /phpmyadmin 를 URL에 입력하면 이러한 창으로 들어와지는 걸 확인할 수 있습니다.
ID = root Password = bug
초기 설정값을 입력해주어 로그인을 진행해주시면 됩니다.
이렇게 내가 입력한 구문을 삭제해주는 작업을 진행해주시면 됩니다.
게시글 삭제 후 깔끔하게 사라진 것을 확인할 수 있습니다. 이제는 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 화면으로 들어가 개발자도구 (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 화면으로 넘어와 구문이 입력되는 것을 확인할 수 있습니다.