road23 2022. 8. 2. 12:09

bwapp xss + bwapp SQL injection


Cross-site scripting – Reflected (GET)

난이도 : low

Quest. xss 취약점이 있는지 알아봅시다. 다음 화면을 띄워보세요.

경고창을 누른 후 화면 (Welcome success 출력)


Cross Site Scripting-Reflected(GET)를 클릭한다.그 다음 나오는 화면에서first name에 <script>alert("XSS");</script>을 입력하고 last name에 success를 입력한다.

그러면 위의 사진처럼 새로운 창이 뜨는데 OK 버튼을 누르면 아래와 같이 Welcome success라는 글자가 뜨게 된다.


난이도 : medium


페이지의 소스코드를 확인한다.

/var/www/bWAPP 디렉토리로 이동해서 xss_get.php파일을 연다.

medium 레벨에서 xss_check_4 함수가 작동하는 것을 학인할 수 있다.

터미널에서 functions_external.php파일을 열어본다.

파일을 열어보면 xss_check_4 함수 내용을 확인할 수 있다.

이 함수 안을 보면 addslashes함수를 return값으로 출력하는 것을 확인할 수 있다.

그런데 주석에 적힌 이 함수를 살펴보면 '와 "와 \와 NUL 문자 앞에 \를 붙여서 return값을 출력하는 것을 확인할 수 있다.

그렇기 때문에 코드가 실행이 되지 않았음을 알 수 있다.


난이도 : high

필터링을 우회해서 공격해보세요. 그러나 공격이 통하지 않습니다. 그 이유를 정리해주세요.


위에서처럼 페이지 소스 코드를 열어서 확인해보면 xss_check_3 함수가 작동하는 것을 확인할 수 있다.

그래서 터미널에서 functions_external.php파일을 열어본다.

파일을 열어서 xss_check_3을 확인해보면 이 함수는 htmlspecialchars()함수를 return값으로 출력하는 것을 확인할 수 있다.

주석에 적힌 htmlspecialchars()함수를 살펴보면 입력받은 데이터를 htmlspecialchars를 통해 인코딩을 해주는 함수로, 특수문자를 UTF-8로 반환하기 때문에 공격이 통하지 않는다.

 


 

Cross-Site scripting – reflected(POST)

Quest. GET방식과 POST방식의 차이에 대해 간단히 정리해봅시다.

 

Quest. 다음 화면을 띄워보세요.

난이도 : low

경고창을 누른 후 화면 (Welcome success 출력)


Cross Site Scripting-Reflected(POST)를 클릭한다.

그 다음 나오는 화면에서

first name에 <script>alert("XSS");</script>을 입력하고 last name에 success를 입력한다.

위에서 나오는 창에서 OK를 누르면 위와 같이 Welcome success라는 출력문이 나온다.


난이도 : medium

Quest. 다음과 같이 사용자의 쿠키 값을 경고창에 출력해보세요.


first name에 <script>alert(document.cookie)</script>를 입력하고 last name에 success를 입력하면 아래와 같은 화면을 출력할 수 있다.

 


SQL injection – POST/Search

 

 MISSON. 버프스위트를 이용해 사용자들의 id와 password를 획득하자.

난이도 low

모든 공격은 버프스위트를 이용해주세요. 공격 과정은 GET방식과 유사합니다.

 

Quest. 데이터베이스 정보를 알아내세요.

' or 1=1#

을 이용하면 위의 사진과 같이 모든 영화 자료를 출력할 수 있다.

 

'union select all 1,@@version,database(),4,5,6,7#
를 입력해서 데이터베이스 정보를 출력할 수 있다.


Quest. 데이터베이스에 존재하는 모든 테이블 명을 출력하세요.

 

'union select all 1,2,3,table_name,5,6,7 from information_schema.tables#

를 입력하면 테이블 명을 출력할 수 있다.


Quest. 사용자 정보가 들어있는 칼럼을 출력하세요.

 

'union select all 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#

를 이용하여 사용자 정보가 들어있는 칼럼을 출력할 수 있다.


Quest. 사용자의 id, password, secret, login 정보를 출력해봅시다.

Quest. 사용자의 비밀번호는 해시 값으로 암호화되어 있습니다. 해시값을 크랙해 비밀번호를 알아봅시다. (툴을 설치할 필요 없이 웹사이트를 이용하셔도 됩니다.)

 

'union select all 1,id,password,secret,login,6,7 from users#

를 이용하여 사용자의 id, password, secret, login 정보를 출력할 수 있다.

https://crackstation.net/에서 6885858486f31043e5839c735d99457f045affd0해시값을 크랙하면 아래와 같이 bug를 확인할 수 있다.