상세 컨텐츠

본문 제목

[Bee-Box] 저장된 XSS 취약점

해킹공부/웹해킹 실습

by 밍구21 2022. 9. 20. 16:53

본문

9.1. Blog

0) 배경

해당 페이지는 텍스트 입력 공간에 내용을 입력하고 submit을 클릭하면 아래 테이블에 입력한 내용을 저장한다.

 

 

 

1) 실습

텍스트 입력 공간에 <script>alert('Succeed')</script> 스크립트 코드를 입력하고 Submit 클릭

 

스크립트가 실행되어 경고창이 뜬다.

원래라면 위에서 입력한 텍스트가 테이블에 입력돼야 한다. 하지만 내가 입력한 텍스트가 스크립트 코드로 인식되어 실행되었기 떄문에 테이블은 비어있고 경고창이 뜬 것이다.

 

 

 

 <script>alert(document.cookie)</script> - 이번에는 쿠키값을 출력하는 스크립트 코드를 입력한다. 

 

스크립트 코드가 실행되어 쿠키값이 출력된다. 마찬가지로 테이블 또한 비어있는 걸 확인할 수 있다.

 

 

 

 

2) 대응방안

mysql_real_escape_string 함수를 사용해 입력한 데이터를 우회한다. 해당 함수는 SQL문법에서 사용되는 특수문자들에 백슬래시를 붙여 입력값을 SQL 문법으로 인식되지 않게 한다. 백슬래시가 붙는 문자는 NULL, \n, \r, \, ', ", ^z이다.

 

 

 

 


 

9.2 Change Secret

0) 배경

해당 페이지는 비밀번호 힌트를 새로 설정하는 기능 제공한다. 

 

1) _실습1

새로운 힌트를 입력하는 칸에 경고창을 출력하는 스크립트 코드를 입력한다. change 입력 시 비밀번호가 바뀌었다는 메시지가 출력된다.

 

비밀번호 힌트를 확인할 수 있는 페이지인 sqli_16.php로 이동 후 로그인을 하니 succeed 메시지 창이 뜬다.

위에서 입력한 스크립트 코드가 잘 실행되는 것을 확인한 것이다.

 

 

_실습2

다시 비밀번호 힌트를 설정하는 페이지로 돌아와 이번에는 쿠키값을 출력하는 메시지 스크립트 코드를 입력해준다.

 

비밀번호 힌트를 확인할 수 있는 페이지인 sqli_16.php로 이동 후 로그인을 하니 쿠키값 메시지 창이 뜬다.

위에서 입력한 스크립트 코드가 잘 실행되는 것을 확인한 것이다.

 

 

_실습3

음 개발자 도구로 들어가도 소스코드가 보이지 않는다...

 

2) 대응방안

htmlspecialchars 함수를 통해 우회한다. 해당 함수의 두번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 특수문자들을 HTML엔티티 코드로 변환시킨다. 그러면 스크립트 코드를 입력해도 웹브라우저는 문자로 인식한다. 해당 함수가 우회하는 특수문자는 &, ", ', <, >이다.

 

 

 


9.3 User-Agent

0) 배경

해당 페이지는 접속한 웹 브라우저의 정보가 저장된 User-Agent 헤더값을 테이블 형태로 출력한다.

 

1)

_실습1

해당 페이지를 버프스위트로 받아 User-Agent 헤더에 메시지창을 출력하는 스크립트 코드를 입력한다. 그 후 forward를 눌러 수정한 내용을 전송시킨다.

 

스크립트 코드가 실행되어 메시지창이 뜨는 걸 볼 수 있다.

 

User-Agent 헤더를 수정해 스크립트 코드를 입력했기 때문에 User-Agent 테이블은 비어있다.

 

 

 

_실습2

이번에는 User-Agent 헤더에 쿠키값을 출력하는 메시지 스크립트 코드를 입력한다.

 

Forward를 하니 쿠키값이 출력됨을 볼 수 있다. 실습1과 마찬가지로 User-Agent 테이블 또한 비어있다.

 

이 후 해당 페이지를 접속할 때마다 쿠키값이 경고창으로 출력된다. 테이블 내용은 보이지 않지만 User-Agent 헤더에 입력된 스크립트 코드가 테이블에 저장되어 있기 때문이다. 하지만 테이블은 최대 세 개의 정보만 저장하기 때문에 접속횟수가 세 번이 지나면 스크립트 코드가 있는 테이블 내용이 사라져서 더 이상 스크립트가 실행되지 않는다.

 

2) 대응방안

-1. htmlspecialchars 함수를 통해 우회한다. 해당 함수의 두번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 특수문자들을 HTML엔티티 코드로 변환시킨다. 그러면 스크립트 코드를 입력해도 웹브라우저는 문자로 인식한다. 해당 함수가 우회하는 특수문자는 &, ", ', <, >이다.

-2. mysql_real_escape_string 함수를 사용해 입력한 데이터를 우회한다. 해당 함수는 SQL문법에서 사용되는 특수문자들에 백슬래시를 붙여 입력값을 SQL 문법으로 인식되지 않게 한다. 백슬래시가 붙는 문자는 NULL, \n, \r, \, ', ", ^z이다.

 

관련글 더보기