WEB/웹해킹

[bWAPP] XSS - Stored(Blog) ~ (Change Secret)

너굴맨이해치움 2022. 8. 7. 00:36

Cross-Site Scripting – Stored(Blog)

 

난이도 : low

Quest. 다음 화면과 같이 경고창을 띄워봅시다.

Quest. 사용자의 쿠키 값을 경고창에 띄워봅시다.

Hint1. 사용자의 쿠키값은 document.cookie에 저장되어 있습니다.

 

Quest. (게시판에 등록된 내용을 삭제하지 않았다면) XSS 공격을 시도할 때마다 경고창이 여러 개가 뜨는 것을 확인했습니다. 왜 그럴까요? 이유를 작성해주세요.

Hint1. Stored XSS 방식에 대해 잘 생각해봅시다.

Hint2. 소스코드를 확인해봅시다. 테이블에 어떻게 저장되어 있나요?

 

난이도 : high

Quest. 공격할 수 없습니다. 이유를 적어주세요.

Hint1. 특수 문자를 막는 함수가 있는 것 같습니다. 

Hint2. xss_stored_1.php에서 확인할 수 있습니다.

 

 

Cross-Site Scripting – Stored (Change Secret)

난이도 : low

Quest. Change Secret 페이지에서 XSS 공격 후 SQL Injection(Login From/users) 페이지에서 확인할 수 있습니다. 다음 화면을 출력해보세요. (bee/bug)

Quest. secret을 사용자의 쿠키 정보로 바꿔봅시다.

난이도 : high

Quest. 공격할 수 없습니다. Secret은 두 개의 함수를 이용해 방어하고 있습니다. 함수의 이름을 적어주세요.

Hint1. xss_stored_3.php에서 확인할 수 있습니다.

Hint2. DB에 저장되기 전에 변수를 어떻게 처리하는지 살펴보세요.

 


XSS - Stored(Blog)

_ 난이도 low

 

Quest. 다음 화면과 같이 경고창을 띄워봅시다.

: script 태그 코드를 텍스트박스에 그대로 입력한다.

> <script>alert("success");</script>

 

 

Quest. 사용자의 쿠키 값을 경고창에 띄워봅시다.

Hint1. 사용자의 쿠키값은 document.cookie에 저장되어 있습니다.

: 아래와 같이 입력한다.

 

앞에서 success 스크립트를 넣어 업로드한 것을 삭제하지 않았다면 이렇게 두 개의 경고가 연달아 뜨는 것이 정상이다.

삭제할 경우 입력한 스크립트만이 실행된다.

 

 

Quest. (게시판에 등록된 내용을 삭제하지 않았다면) XSS 공격을 시도할 때마다 경고창이 여러 개가 뜨는 것을 확인했습니다. 왜 그럴까요? 이유를 작성해주세요.

Hint1. Stored XSS 방식에 대해 잘 생각해봅시다.

Hint2. 소스코드를 확인해봅시다. 테이블에 어떻게 저장되어 있나요?

 

: Stored는 업로드된 글을 축적해 두는 게시판, 블로그 등의 사이트에 악성코드를 인젝션하는 방식으로

reflected 방식과는 달리 인젝션한 코드가 서버에 저장되는 것이 특징이다.

저장된 게시글 목록을 불러올 때 웹페이지는 위 코드와 같은 sql문을 이용한다.

db에 게시글이 저장되고 -> 저장된 것을 쿼리를 통해 일괄로 불러오기 때문에

이미 인젝션한 코드는 삭제하지 않는 한 계속해서 불려나올 수 있다.

위와 같은 특징을 이용해 게시판의 특정 게시글을 사용자가 클릭한 시점에

악성코드 주입 등의 공격이 발동되게 할 수도 있다.

 

 

 

_ 난이도 high

Quest. 공격할 수 없습니다. 이유를 적어주세요.

Hint1. 특수 문자를 막는 함수가 있는 것 같습니다. 

Hint2. xss_stored_1.php에서 확인할 수 있습니다.

보안 함수 목록을 확인하면 high 난이도의 경우 sqli_check_3 함수를 이용하게 되어 있다.

sqli_check_3 함수는 mysqli_real_escape_string 함수를 이용한다.

이는 sql 인젝션 공격에 사용되는 특수문자를 필터링해주는 함수이다. 

더하여 high 난이도의 경우 xss_check_3 함수도 이용하고 있다.

이전 주차까지도 여러 번 언급된 이 함수는 htmlspecialchars 함수가 들어있어

&, ', ", <, > 등의 기호가 모두 필터링된다.

 

 


XSS - Stored (Change Secret)

_ 난이도 low

 

Quest. Change Secret 페이지에서 XSS 공격 후 SQL Injection(Login From/users) 페이지에서 확인할 수 있습니다. 다음 화면을 출력해보세요. (bee/bug)

 

change secret 페이지에서 위와 같이 스크립트 태그 코드를 입력한 뒤 change 버튼을 누른다.

Login Form/User 페이지에서 bee/bug로 로그인한 뒤, 버튼을 누르면 스크립트 코드의 결과물인 경고창이 뜬다.

 

 

 

Quest. secret을 사용자의 쿠키 정보로 바꿔봅시다.

: blog에서 했던 것처럼 document.cookie를 경고창으로 띄우는 스크립트 태그 코드를 입력한다.

동일하게 login form 페이지로 돌아간 뒤 로그인하면 쿠키 값이 경고로 출력된다.

 

 

 

_ 난이도 high

Quest. 공격할 수 없습니다. Secret은 두 개의 함수를 이용해 방어하고 있습니다. 함수의 이름을 적어주세요.

Hint1. xss_stored_3.php에서 확인할 수 있습니다.

Hint2. DB에 저장되기 전에 변수를 어떻게 처리하는지 살펴보세요.

보안 레벨이 medium이거나 high이면 하단과 같은 함수를 사용한다고 나온다.

각각 mysqli_real_escape_string(SQL문의 특수문자 필터링)과 htmlspecialchars(특정 특수문자를 필터링하는 php 내장함수)이다.