본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 7-2.크로스 사이트 스크립팅 [Stored XSS-User Agent]

by Robert8478 2023. 12. 13.

이번 페이지는 접속한 웹 브라우저의 정보가 저장된 'User-Agent' 헤더 값을 테이블 형태로 출력한다.
최근 접속한 순서대로 3개까지만 출력하고 download 링크를 통해 페이지에 접속한 모든 User-Agent 정보를 새로운 페이지에 출력하는 형태이다.

[난이도 하]

User-Agent를 페이지로 출력하기 때문에 버프슈트를 통해 User-Agent 값에 스크립트 코드를 삽입해 주면 작동할 것 같다.

버프 슈트를 사용해 쿠키 값을 얻는 스크립트 구문을 삽입해 주었다.

그 결과 PHP 세션 값이 출력되었다. 이제 다른 사용자로 로그인해서 들어갔을 때 세션 스크립트가 작동될 지 확인해보자.

다른 사용자로 로그인하여 페이지에 들어가도 세션값 알림이 뜬다.

테이블에 비어있는 공간이 바로 스크립트 구문이 들어간 곳이다.
보다시피 최근 3개의 값만 테이블에 출력하기 때문에 여기서 두번 더 들어가면 알림이 뜨지 않게 될 것이다.

[난이도 중,상]
전 문제와 같은 필터링을 사용하고 있다.
난이도 중은 addslashes 함수를 사용하는 xss_check 4 함수, 난이도 상은 htmlspecialchars 함수를 사용하는
check 3 함수를 사용하여 필터링을 수행하기 때문에 스크립트 구문이 동작하지 않는다.

또한, download 버튼을 클릭하면 나오는 logs/visitors.txt 는 데이터베이스에 저장되는 내용이다.

이는 check 3 함수를 사용하고 그 반환값을 다시 'xss' 함수에 입력함으로써 SQL 인젝션과 XSS를 동시에 방어한다.
sqli_check_3 함수는 mysql_real_escape_string 함수로 필터링을 한다.