정보보안 스터디 - 5주차 2일 - Reflected XSS
Reflected XSS
먼저 일단 사이트의 여러 기능들을 사용해봅니다.
개인정보 입력, 작성자/내용/제목별 검색창이 있네요.
다둘러보고 history를 확인해서
param이 체크되어있는 페이지들 위주로 봅니다.
reflected의 실행 조건이라고 한다면 파라미터 변수가 있어야합니다.
검색기능, 글 수정, 연도설정, 페이지설정 등이 변수페이지입니다..
내가 입력한 값이 응답하는 구조라면 모두 테스트해봅니다.
일단 글 수정으로 테스트를 하기위해 Repeater로 불러옵니다.
빠른 검색을 위해 auto scroll을 실행시켜줍니다.
글수정 확인 - Stored XSS
페이지번호: 62, 제목, 내용 변수를 수정할 수 있도록 구성되어 있습니다.
제목, 내용 부분이 div 태그 에 쌓여 있는 것을 확인합니다.
혹시나 페이지 번호를 수정할 수 있을까 싶었지만
622222로 설정하니 권한이 없다고 바로 뜨고, 적용된 부분을 찾지 못했습니다.
그러면 제목과 내용에 기호가 필터링 되지 않고 사용되는지 삽입해봅니다.
<>는 필터링되었고 " '는 살아남았습니다.
script태그에 쌓여있지도 않아서 xss가 어렵습니다.
검색 기능 확인
검색어를 입력했더니 "~~에 대한 결과가 없습니다." 라고 alert가 뜹니다.
내가 입력했던 검색어를 반사시켜주기 때문에 reflected xss으로 의심할 수 있는 부분입니다.
POST 방식으로 검색하게 합니다.
옵션과 검색어, 연도가 변수입니다.
결과를 보니 script 에 쌓여 alert를 주고 있습니다.
옵션 설정
검색 옵션인 작성자 옵션을 변형시켜봤더니,
제가 입력했던 값을 반사하는 게 아니라 지정된 옵션들만 선택만 할 수 있게 되어 있습니다.
검색 설정
바로 검색어를 변형시켜 보겠습니다.
기호는 필터링 되어 " '만 사용가능합니다.
하지만 script 태그안에 쌓여있기 때문에
Reflected XSS'); //
로 태그에 맞춰 뒷 부분을 주석 처리시키면
원하는 값으로 alert가 실행됩니다.
하지만 지금은 POST 방식으로 되어있기 때문에 change request method로 GET방식으로 바꿔주어 링크 전송을 할 수 있게 만들어야 합니다.
짧은 주소로 만들어 링크를 전송하면,
특정 대상이 클릭하고 스크립트 실행을 당하게 됩니다.
쿠키탈취, alert등을 할 수 있지만 주된목적은 쿠키탈취입니다.
연도 설정
연도 설정도 옵션과 마찬가지로
입력방식이 아니기 때문에 입력값을 반사하지 않습니다.
만약 구문에서 textarea 같은 태그에 감싸져있다면
태그를 벗어나고, 마무리도 깔끔하게 해줘야 스크립트 태그가 실행됩니다.
깔끔하게 해주지 않는다면 태그가 남겨져서 노출되는 경우가 생기고
글 삭제가 안되는 경우도 있으니 확실하게 해주는 편이 좋습니다.
Dom Based XSS
dom based xss는 reflected처럼 입력값에 대한 반응이
사이트 소스로 노출 되거나 Stored처럼 서버에 저장되지 않고
말 그대로 숨겨져 있습니다.
실제로 반응값이 화면에 뜨긴 뜨지만 사이트소스에는 확인 되지 않습니다.
자바스크립트를 하나하나 분석하면서 찾아야합니다.
클라이언트 측에서 조립하는 방식이고
document.write(사용자 파라미터)로 출력하는 방식입니다.
소스의 입력한 값을 확인하기 위해서는 개발자 페이지의 element를 확인합니다.
그 부분을 찾아서 reflected xss와 마찬가지로 특정 대상자에게 링크를 보내 공격하는 방식입니다.
다음 시간에는
xss공격으로 도대체 어디까지 공격이 가능하고
뭘할 수 있는지 예시와 함께 가져와보겠습니다.