
1.
http://ctf.segfaulthub.com:4343/xss_1/notice_list.php페이지에서 글쓰기 버튼 클릭
2.
http://ctf.segfaulthub.com:4343/xss_1/notice_write.php페이지로 이동됨
→ 각 입력란에 글 작성하기
‣ 제목 입력란: title입니다.
‣ 내용 입력란: content입니다.
→ create 버튼 클릭하여 공지사항 글 업로드
3. create 버튼 클릭하면,
http://ctf.segfaulthub.com:4343/xss_1/notice_write_process.php로 이동됨.
‣ POST 방식으로 서버에create_title,create_body파라미터를 전송함.
4. 글 업로드 확인
1.
http://ctf.segfaulthub.com:4343/xss_1/notice_write.php에서<,',",>,<script>을 필터링하는지 체크!
‣ create_title:<'"><script>
‣ create_body:content입니다
➡️ 화면에<'"><script>가 그대로 출력됨.
➡️ 해당 문자들을 필터링하지 않음을 파악함.
2.
http://ctf.segfaulthub.com:4343/xss_1/notice_write.php에서 아래처럼 파라미터 값을 바꿔서 send하자.
‣ create_title:<script>alert(1);</script>
‣ create_body:content입니다
➡️ 화면에<script>alert(1);</script>가 그대로 출력됨.
➡️해당 게시글을 클릭하면 스크립트가 실행됨.
➡️ Stored XSS 취약점 발견!
(💡) 내용 부분에 <script>alert(1);</script>을 입력하고 저장하면, 스크립트 실행되지 않음.
➡️ <script>alert(1);</script>을 보면, 브라우저가 HTML 태그로 인식하지 못하도록 "이스케이프(escape)" 처리된 형태임을 알 수 있다.
➡️ 따라서, 내용 부분에는 스크립트를 적어도 실행되지 않음.


1. xss1의 취약점 점검 과정처럼 create_body, create_title의 파라미터에
<script>alert(1);</script>을 작성하여 서버에 전송해봤지만, 둘 다 이스케이프 처리되어 있어서 스크립트가 실행되지 않음
➡️ 공지사항의 게시글 작성의 제목 및 내용 입력란에는 XSS 취약점 존재 x
2. 검색란에 xss 취약점이 존재하는지 확인해보자!
→hello검색
→POST방식으로option_val,board_result,boared_search,date_from,date_to의 파라미터를 서버에 전송하고 있다.
→ hello를 검색하니,script>alert('hello에 대한 검색 결과가 존재하지 않습니다.');</script>의 스크립트가 실행되어, 화면에 해당 알림창이 뜸.
3.
board_result파라미터의 값을1')('로 설정하여 서버에 전송하면,
서버 응답에 다음과 같은 스크립트가 삽입되어 실행될 가능성 有..!<script>alert('1')('에 대한 검색 결과가 존재하지 않습니다.');</script>→ 기존의 request의
POST방식을GET방식으로 변경
(Reflected XSS 적용되는지 확인하기 위해)
→ URL 복사 (http://ctf.segfaulthub.com:4343/xss_2/notice_list.php?option_val=username&board_result=1')('&board_search=%F0%9F%94%8D&date_from=&date_to=)
→ 복사한 URL을 검색
➡️복사한 URL을 브라우저에 검색하면 스크립트가 실행됨.
➡️ Reflected XSS 취약점 발견!
1.
http://ctf.segfaulthub.com:4343/xss_3/notice_list.php페이지에서 글쓰기 버튼 클릭
2.
http://ctf.segfaulthub.com:4343/xss_3/notice_write.php페이지로 이동됨.
→ 각 입력란에 글 작성하기
‣ 제목 입력란: title입니다.
‣ 내용 입력란: content입니다.
→ create 버튼 클릭하여 공지사항 글 업로드
3. create 버튼 클릭하면,
http://ctf.segfaulthub.com:4343/xss_1/notice_write_process.php로 이동됨.
‣ POST 방식으로 서버에 create_title, create_body 파라미터를 전송함.
4. 글 업로드 확인
1.
http://ctf.segfaulthub.com:4343/xss_3/notice_write_process.php에서<,',",<script>,</script>를 필터링 하는지 체크!
‣ create_title:<'"><script>
‣ create_body: content입니다
➡️ 화면에<'"><script>가 그대로 출력됨.
➡️ 해당 문자들을 필터링하지 않음!
2.
http://ctf.segfaulthub.com:4343/xss_3/notice_write.php에서 아래처럼 파라미터 값을 바꿔서 send하자.
‣ create_title:<script>alert(1);</script>
‣ create_body:content입니다
➡️해당 게시글을 클릭해도,<script>alert(1)</script>는 실행되지 않음.
➡️HTML Entity처리되어 있어서 브라우저가 실제<script>태그로 해석하지 않고, 단순 텍스트로 출력함.
➡️ 이곳에서는 XSS 공격 불가
3. 검색란에 xss 취약점이 존재하는지 확인해보자!
→hello검색
→POST방식으로option_val,board_result,boared_search,date_from,date_to의 파라미터를 서버에 전송하고 있다.
→ hello를 검색하니,<script>alert('hello에 대한 검색 결과가 존재하지 않습니다.');</script>의 스크립트가 실행되어, 화면에 해당 알림창이 뜸.
👉 구조
4.
board_result파라미터의 값을1')('로 설정하여 서버에 전송하면,
서버 응답에 다음과 같은 스크립트가 삽입되어 실행될 가능성 有..!
➡️<script>alert('1')('에 대한 검색 결과가 존재하지 않습니다.'</script>가 응답된 것으로 보아,'(작은따옴표)가 HTML Entity 처리된다는 것을 알 수 있다!
➡️ 검색란에서는 XSS 공격 불가
5. 마이페이지에 xss 취약점이 존재하는지 확인해보자!
http://ctf.segfaulthub.com:4343/xss_3/mypage.php?user=user01
➡️<form method = "post" action = "mypage_update.php">을 보니,
폼에 입력된 데이터를POST방식으로mypage_update.php에 전송
➡️id,info,pw파라미터가mypage_update.php로 전송되면,
해당 값에 따라placeholder도 변경되는 것으로 예상된다.
➡️id파라미터 값을user02로 작성하여 폼 제출.
➡️ 해당 알림창이 뜸
→http://ctf.segfaulthub.com:4343/xss_3/mypage.php?user=user01페이지로 이동됨
✔️ Update버튼 클릭 후, 마이페이지의 HTML을 살펴보았지만, placeholder가 user01로 그대로인 것을 보아,mypage_update.php에서 제출한 폼의 각 데이터(파라미터)값을 바탕으로
placeholder값을 동적으로 바꾸는 것은 아닌 것 같다..!
💡 요청(Request)에 포함된user=user01이 URL 파라미터 (GET)이다.
이 값을 바탕으로 서버나, 자바스크립트가 placeholder값을 동적으로 바꿔서 출력하는 구조일 것으로 예상.
6. URL 파라미터를
user = user02로 변경하여 전송해보자.
➡️http://ctf.segfaulthub.com:4343/xss_3/mypage.php?user=user01에서
user01을 user02로 변경하여 send
✔️ URL 파라미터를 user02로 변경하였더니, placholder의 값도 user02로 변경됨을 확인가능.
✔️ 즉, 요청(Request)에 포함된user이라는 URL 파라미터 값을 바탕으로
placeholder값을 동적으로 바꿔서 출력하는 구조임을 확인!
7.
user파라미터의 값을user01"/><script>alert(1)</script><"로 변경하여 서버에 전송
➡️placeholder속성값은user01로 설정이 되고,
➡️<script>alert(1)</script>로 실행이 되고,
➡️<"을 통해 태그를 완벽히 닫아주었다.
👉 XSS1의 동작과정을 참고 (동일)
1.
http://ctf.segfaulthub.com:4343/xss_5/notice_write.php에서<,',",>,<script>을 필터링하는지 체크!
‣ create_title:title입니다.<'"><script>
‣ create_body:content입니다
➡️title입니다.<'"><>가 출력되는 것으로 보아,script문자열이 필터링되고 있음을 알 수 있다!
2.
script문자열의 대소문자 혼용해도 필터링하는지 확인하기
‣ create_title:title입니다.<ScRipt></ScRipt>
‣ create_body:wege
➡️ 아무것도 출력안되는 것을 보아,
script는 대소문자 혼용해도 필터링됨.
(ScRiPt,SCRIPT등도 모두 차단됨)
3.
alert문자열의 필터링 하는지 확인하기
➡️(1)이 출력되는 것으로 보아,
alert는 필터링되고 있는 것으로 보인다.
↳ 대소문자 혼용해도 필터링하는지 확인하기.
‣ create_title:AlErt(1);
➡️AlErt(1);그대로 출력되는 것을 보아,
alert는 대소문자를 혼용하면 필터링하지 않음.
4.
alert필터링 우회하기
‣ create_title:aalertlert(1);
➡️alert문자열이 필터링되기 때문에,
중간에 문자를 끼워 넣어서 우회하자!
➡️alert(1);이 출력되는 것으로 보아, 우회 성공!
5-1.
script필터링 우회하기 +alert필터링 우회하기
‣ create_title:<sscriptcript>aalertlert(1);</sscriptcript>
➡️script문자열이 필터링되기 때문에,
중간에 문자를 끼워 넣어서 우회하자!
➡️alert문자열이 필터링되기 때문에,
중간에 문자를 끼워 넣어서 우회하자!
➡️ 해당 게시글을 클릭하면,alert(1)스크립트 실행됨
5-2.
script필터링 우회하기 + confirm 사용하기
‣ create_title:<sscriptcript>confirm(1);</sscriptcript>
➡️ 해당 게시글을 클릭하면,confirm(1)스크립트 실행됨
5-3.
script필터링 우회하기 + prompt 사용하기
‣ create_title:<sscriptcript>prompt(1);</sscriptcript>
➡️ 해당 게시글을 클릭하면,prompt(1)스크립트 실행됨
👉 XSS1의 동작과정을 참고 (동일)
1. 공지사항 게시판에서 글 게시하기
‣ create_title:title<'"><script>
‣ create_content:content
➡️ 그대로 출력되는 것으로 보아 해당 문자들은 필터링 하지 않는 것 같다.
2. 해당 게시글을 클릭하여
http://ctf.segfaulthub.com:4343/xss_6/notice_read.php?id=343&view=1의 응답을 살펴보면,
해당 특수문자들이HTML Entity처리되어 있는 것을 확인함.
➡️ 즉, 게시글의 title 입력란에서는 xss 공격불가
3. 공지사항 게시판의 content 입력란에서 xss 취약점을 찾아보자.
‣ create_title:title
‣ create_body:content<'"> <script></script>
➡️ title부분은 html entity처리가 되어서 xss 공격이 불가하지만,
content부분은 html entity가 적용되어 있지 않아서 xss 공격이 가능
➡️ 해당 게시글 클릭
→http://ctf.segfaulthub.com:4343/xss_6/notice_read.php?id=355&view=1로 이동
➡️ content 부분은HTML Entity적용되지 않아서,스크립트실행가능함.
➡️ 또한<,',",>,<script>,</script>가 필터링 되지 않음!
4. 공지사항 게시판의 content 입력란에서 xss 취약점을 이용해 알림창을 띄워보자.
‣ create_title:title
‣ create_body:<script>alert(1);</script>
➡️ 해당 게시글 클릭
→ 응답을 살펴보면,<script>alert(1);</script>스크립트가 실행되는 것을 알 수 있다.
➡️ 알림창 뜸!
1. 공지사항에 글 게시하기
‣ create_title:title<'"><script>
‣ create_content:content<'"><script>
- 해당 게시글 클릭하면,
http://ctf.segfaulthub.com:4343/xss_7/notice_read.php?id=524&view=1로 이동하는데,
응답을 살펴보면, title부분, content부분 둘 다HTML Entity처리되고 있음.
➡️ 즉, xss 공격 불가.
2. 공지사항의 검색란에서 xss 취약점을 찾아보자.
‣title이라고 검색
➡️ 검색한 문자열(title)이 alert 함수의 인자로 직접 삽입되는 구조가 아니므로,
이 동작만으로는 XSS 취약점이 발생하지 않는다
3.마이페이지에서 xss 취약점을 찾아보자.
- 마찬가지로 마이페이지에서 개인정보를 수정하려고 하면, 해당 알림창이 뜸.
➡️ 수정하려는 문자열이 alert 함수의 인자로 직접 삽입되는 구조가 아니므로,
이 동작만으로는 XSS 취약점이 발생하지 않는다
💁♀️ 공지사항의 글 게시, 공지사항의 검색란, 마이페이지에서 xss 취약점을 찾으려고 하였으나, 발견하지 못함..
👉 일단 로그아웃을 하고, 로그인 페이지에서 xss 취약점을 찾아보려고 함.
4. 로그인 페이지에서 xss 취약점을 찾아보자.
- 로그인 페이지:
http://ctf.segfaulthub.com:4343/xss_7/login.html
- 존재하지 않는 계정으로 로그인 시도
‣ email: test
‣ password: test1234
Log In 클릭하면,http://ctf.segfaulthub.com:4343/xss_7/login.php이동
→[test] 등록되지 않은 사용자입니다.라는 알림창을 뜸.
→ 사용자가 입력한 email을 alert 인자에 삽입하여 출력되고 있다!
5.
id파라미터 값(email칸에 입력한 값)을1]');('로 변경하여 서버에 전송하면,
서버 응답에 다음과 같은 스크립트가 삽입되어 실행될 가능성 有..!
기존의 방식은POST방식으로 요청을 전송했는데,
GET방식으로 변경후, URL 복사하여 브라우저에 복붙 후, 검색하니,
alert(1)실행됨.
➡️ URL=http://ctf.segfaulthub.com:4343/xss_7/login.php?id=1]');('&pw=test1234
➡️ Reflected XSS 발견.