우선 https://sir.kr/g5_pds/4678 이 링크를 참고하여 xss 취약점을 패치한 항목을 보자.
* 이전 : 5.3.2.9.1
패치후 : 5.3.3
차근차근 취약점 패치 전 그누보드5 환경에서 xss 취약점을 확인해보면서 패치된 소스와 비교해보면 될 것 같다.
내가 고른 php 파일은 adm/board_form.php.
실습을 해보기 위해서는 패치되기 전인 5.3.2.9.1 로 먼저 그누보드를 구축해봐야할 것 같아서 5.3.2.9.1 로 구축.
관리자 권한으로 로그인해 준 후, 패치되었다는 adm/board_form.php 로 이동해서 어떤 페이지인지 먼저 살펴보자.
관리자가 게시판을 생성 및 관리하는 페이지인 것 같다.
우선 이런 페이지라는 것을 확인해두고,
직접 php 파일 소스를 비교해보자.
870 라인을 참고하여 게시판 관리 페이지 중 '상단 내용' 이라는 부분에서 패치가 되었음을 알 수 있고,
872 라인부분에 get_text 함수에서 html_purifier 함수가 추가되면서 패치가 된 것을 확인할 수 있다.
바로 이부분.
내용을 입력 받는 부분인 get_text 함수에서 html_purifier 함수가 추가되었는데 이 함수는 뭘까?
** html_purifier() : HTMLPurifier는 XSS(cross-site scripting) 취약점을 필터링을 하는 라이브러리로 ,
게시판의 글 제목이나 글 내용 등에 script, onmouseover 등을 삽입해 공격을 하거나 에러 등을 만들어서 원하는 정보를 알아내는 취약점을
필터링해서 안전한 속성, 이벤트, 태그 등만을 허용해준다.
간단히 말해서 웹사이트에 문제를 일으킬 수 있는 아이프레임이나 스크립트에 대해 필터링을 해주는 함수이다.
이 함수를 추가하여 html_purifier에서 지정한 html 만 사용할 수 있다.
그렇다면 한번 이 곳에 <script> 를 삽입한 xss공격이 이루어지는지 실습해보자.
‘게시판 관리’ -> ‘게시판 수정’ -> ‘상단 내용’ 까지 접근 후 게시판을 생성해주면 된다. 아래와 같이 입력해준다.
게시판의 테이블 이름과 그룹, 제목을 설정한 후,
글을 작성하기 전에 editor 가 아닌 html 로 설정하고
이렇게 alert 가 띄워지도록 <script>를 작성해보았다.
* 여기서
html 로 변경하지 않고 editor 에서 스크립트를 입력하면,
이런 불상사가 발생하니 반드시 html 로 변경하여 원하는 스크립트를 입력해준다.
그러나 아무런 변화가 없었다. 이미 script 태그는 필터링이 되고 있는 듯했다.
따라서 xss 공격에 쓰일 수 있는 태그들을 하나씩 추가하면서 확인해보았다.
ex1. 스트립트 태그 <script>alert('XSS');</script>
ex2. 자바스크립트 태그 <a href="javascript:alert('XSS')">XSS</a>
ex3. 이벤트 속성 <img src="#" onerror="alert('XSS')">
ex4. 내용 난독화 <a href="javas
cript
:
alert
('XSS')">XSS</a>
그러던 중 <img src="#" onerror="alert('1')"> 를 입력하니까
!!!!
이렇게 img 태그를 이용해 alert 가 띄워지는 취약점을 확인했다.
한번 패치된 후의 그누보드 (5.3.3) 으로 들어가서 똑같은 현상이 발생하는지 확인해보자.
5.3.3 을 구축한 후, 5.3.2.9.1 에서 취약점이 발견된 곳으로 동일하게 이동해서,
똑같이 입력.
해당 취약점이 패치된 5.3.3 에서는 img 태그를 활용한 onerror 의 xss 공격이 먹히지 않아
alert 가 뜨지 않고 생성한 게시판으로 이동한 화면에서도 아무것도 뜨지 않는 것을 볼 수 있었다.
또한 게시판 수정 확인 버튼을 누른 후 입력했던 ’상단 내용’의 html 부분을 보니,
원래 입력한 <img src=“#” onerror=“alert(‘XSS’)”> 가 <img src=“” alt=“”> 으로 필터링된 후 바뀌어 있는 것을 볼 수 있었다.
* alt 속성 : Alternate(대체하다)의 줄임 말로, 이미지의 대안을 의미.
이 이미지는 외부의 주소이기 때문에, 주소가 잘못되었거나 해당 위치의 서버에 문제가 있다면 이미지를 못 읽어 올 수 있기 때문에 이럴 때 이 alt 속성의 내용이 해당 이미지를 대체하여 나타나게 됨.
아마 html purifier 에서 onerror 속성을 필터링하면서 alt 속성을 img 태그 사용시 필수로 입력하도록 한 것 같기도 하다.
첫번째 Xss 공격 취약점 패치 확인 실습을 마쳤다.
Xss 공격에 사용될 수 있는 다양한 태그와 속성들을 골고루 익혀두면 취약점 발견이나 게시판 생성에 적절히 사용해서 위협을 막을 수 있을 것 같다.
'WEB Security > GNU board 5' 카테고리의 다른 글
[그누보드5] 기본 설정 및 설치 (0) | 2020.01.31 |
---|---|
[그누보드5] Mac 웹 서버 구축 with Bitnami MAMP (0) | 2020.01.31 |