공격자가 악의적인 스크립트 코드를 웹 애플리케이션에 삽입한 후 웹 사용자의 웹 브라우저에 해당 코드가 실행되도록 만드는 공격이다. 이 공격 방식은 다른 웹 공격들과는 차이가 있는데, 다른 공격들은 취약점을 가지고 있는 서버쪽을 공격하지만 크로스 사이트 스크립팅 공격은 서버의 취약점을 이용하여 클라이언트 쪽을 공격한다는 점이다.
리플렉티드 크로스 사이트 스크립팅(Reflected XSS)
document.cookie 코드로 인해 쿠키의 값이 출력된다. 쿠키 중에서 PHPSESSID라는 쿠키는 PHP에서 생성하는 세션 쿠키이고, 크로스 사이트 스크립팅 공격은 주로 세션 쿠키를 알아내는데 초점을 맞춘다.
access.log 파일은 접근 로그를 기록하는 파일이다. 웹 서버로 들어온 요청 정보가 기록된다.
새롭게 기록된 로그중에서 GET /cookie? 문자열 이후 나오는 내용이 document.cookie에 의해 출력된 쿠키 정보이다. 크로스 사이트 스크립팅을 통해 PHPSESSID 세션 쿠키를 탈취한 것이다.
이 메시지를 참고하여 피싱에 사용할 링크를 만들 수 있다. 요청 메시지의 내용 중 name 파라미터의 값이 <script>가 %3Cscript%3E와 같이 전송된 이유는 웹 브라우저에서는 일부 특수문자를 URL 인코딩으로 자동 변환하기 때문이다.
BeEF 공격 프레임워크
비프 프로그램은 브라우저 익스플로잇 프레임워크 프로그램으로, 자체적으로 제공하는 자바스크립트로 된 후킹 코드를 사용자가 실행하면 그 사용자의 호스트를 대상으로 여러 가지 공격을 실행할 수 있도록 하는 프로그램이다.
크로스 사이트 스크립팅 공격과 BeFF 프레임워크를 이용하여 제3 사이트의 계정 정보를 획득해본다.
처음에 오프라인 브라우저에 폴더가 생성되서 sudo nano /usr/share/beef-xss/config.yaml에서 host에 내 IP를 넣어줬다.
쿠키는 물론이고 어디서 후킹되었는지와 같은 페이지 정보와 각종 호스트 정보를 확인할 수 있다. 커맨드(Commands) 탭에서는 해당 호스트에 대해 추가로 공격을 수행할 수 있다.
팝업창에는 페이스북을 오랫동안 사용하지 않아서 세션이 종료되었다는 메시지가 표시된다. 만약 사용자가 실제로 페이스북을 웹 브라우저의 다른 탭에 띄어 놓은 후 오랜 시간 동안 놔두었다면, 별다른 의심 없이 다시 로그인하고자 이메일과 패스워드를 입력할지도 모른다.
이메일과 패스워드를 입력하고 Log in 버튼을 누르면 입력한 값이 비프 프로그램을 통해 노출된다.
스토어드 크로스 사이트 스크립팅(Stored XSS) 공격
클라이언트 쪽에서 입력값을 제한하거나 검증하도록 구현된 인터페이스는 쉽게 우회할 수 있다.
access.log 파일을 확인해보면 쿠키 정보가 담긴 요청 기록이 새롭게 생성되었다.
방명록에 글이 남겨졌기 때문에 이 다음에 방명록을 보는 모든 사용자가 공격에 당할 수 있다.
크로스 사이트 스크립팅 공격 대응
크로스 사이트 스크립팅 공격에 대응하기 위해서는 지금처럼 스크립트가 입력되어도 그것이 실행되지 않도록 하고 단순히 문자열로 표시하도록 만드는 것이 가장 좋은 방법이다.
$message = htmlspecialchars( $message );
htmlspecialchars() 함수는 &, ", ', <, >와 같은 특수문자들을 HTML 엔티티로 변환해주는 함수이다. 변환된 문자열은 웹 브라우저가 읽더라도 더 이상 스크립트로 처리하지 않게 된다.
마찬가지로 리플렉티드 크로스 사이트 스크립팅 공격 역시 이와 같은 방법으로 대응할 수 있다. 이렇게 공격을 막기 위해서는 사용자 입력값을 웹 페이지에 출력될 때 지금처럼 특수문자들을 제대로 변환시켜 주어야 한다. 입력값 검증을 통해 파라미터의 입력값에 불필요한 문자열이 포함되지 않도록 하는것 역시 공격을 차단할 수 있다.
'Study records > Web hacking' 카테고리의 다른 글
[Beebox] iframe, OS, PHP, SSI 인젝션 (0) | 2024.06.21 |
---|---|
[Beebox] HTML 인젝션 (0) | 2024.06.20 |
커맨드 인젝션 공격 (0) | 2024.05.25 |
SQL 인젝션 공격 (1) | 2024.05.24 |
취약한 인증 공격 (0) | 2024.05.24 |