Normaltic 모의해킹 취업반 스터디 8기 - 9주차 과제(CTF Write-up)

containerxox·2025년 6월 11일
post-thumbnail

☑️ XSS1

▶ 동작 과정 확인

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. 글 업로드 확인

▶ XSS 취약점 점검

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>을 입력하고 저장하면, 스크립트 실행되지 않음.
➡️ &lt;script&gt;alert(1);&lt;/script&gt;을 보면, 브라우저가 HTML 태그로 인식하지 못하도록 "이스케이프(escape)" 처리된 형태임을 알 수 있다.
➡️ 따라서, 내용 부분에는 스크립트를 적어도 실행되지 않음.




☑️ XSS2

▶ XSS 취약점 점검

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 취약점 발견!




☑️ XSS3

▶ 동작 과정 확인

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. 글 업로드 확인

▶ XSS 취약점 점검

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&apos;)(&apos;에 대한 검색 결과가 존재하지 않습니다.'</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>로 실행이 되고,
➡️ <"을 통해 태그를 완벽히 닫아주었다.




☑️ XSS4

👉 XSS1의 동작과정을 참고 (동일)

▶ XSS 취약점 점검

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)스크립트 실행됨




☑️ XSS5

👉 XSS1의 동작과정을 참고 (동일)

▶ XSS 취약점 점검

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>스크립트가 실행되는 것을 알 수 있다.

➡️ 알림창 뜸!




☑️ XSS6

▶ XSS 취약점 점검

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 발견.

0개의 댓글