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이다.
[oyes mall 실습] SQL Injection - Union based (0) | 2023.04.05 |
---|---|
[oyes mall 실습] SQL Injection -Error Based (0) | 2023.04.05 |
[Bee-Box] 비밀번호 변경, 비밀번호 힌트 변경 (0) | 2022.08.11 |
[Bee-Box] 서버 측 요청 변조 (0) | 2022.08.04 |
[Bee-Box] 반사된 XSS 취약점 (0) | 2022.08.02 |