공부/bWAPP

HTML Injection – Reflected(GET)

heisyoung 2020. 2. 19. 11:47

Firest name과 Last name에다가 안녕/하세요를 입력한 결과이다. 페이지를 우클릭해서 페이지 소스를 클릭해 확인해보자.

이번에는 소스코드에 있는 <h1></h1> 을 사용해보자.

다음과 같이 h1이 적용된 모습을 확인할 수 있다. GET방식은 헤더에 정보를 포함시켜 넘겨주기 때문에 URL을 확인해보면 입력한 정보들이 포함되어 있는 것을 확인 할 수 있다. 레벨 LOW에서는 서식코드나 <script> <img> 등 입력하면 그대로 보여준다. 레벨 MEDIUM에서는 어떻게 나타내는지 확인해보자.

미디엄에서는 소스코드 그대로 출력하는 것을 볼 수 있다.페이지 코드도 확인해보자.

확인해본 결과 low와 비교해서 < > 기호들이 다른것으로 치환된것으로 보인다. &lt, &gt는 각각 < >를 의미하는데 HTML 엔티티라고 한다. HTML 엔티티(Entity)란 예약어이며 문자그대로 사용하기위한 문자셋을 의미한다. 미디엄 레벨에서는 로우 레벨과 다르게 인젝션에 실패했는지 소스코드 내용을 확인해보자. 아까 본 페이지 소스코드를 참고해서 /var/www/bWAPP/htmli_get.php로 들어가보았다.

아까 인젝션 테스트를 한 사이트의 소스코드 파일에 들어왔다. 확인해보니 switch 이 부분은 레벨에 따른 보안설정을 하는 것으로 보인다. no_check나 xss_check 함수 소스들은 functions_external.php에 있으므로 저 파일도 열어보자.

xss_check_1 함수를 검색해보니 위와 같이 나왔다. < > 문자들을 각각의 엔티티로 치환한다는 코드들이 보인다. 하지만 미디엄 레벨에서도 인젝션하는 방법이 있다. < > 문자들을 치환한다면 URL인코딩을 하여 입력하면 된다.

https://meyerweb.com/eric/tools/dencoder/

HIGH 레벨로 넘어가보자. 소스코드를 확인해보니 htmlspectialchars HIGH 레벨로 넘어가보자. 소스코드를 확인해보니 htmlspectialchars 함수를 쓰고있다. 이 함수는 php에서 제공하는 기본 함수로 html에서 사용하는 특수문자들을 UTF-8로 변환시켜준다. url인코딩값을 넣어보면 소스코드 그대로 출력되는 것을 볼 수 있다.