제9관: 프로토콜 기반의 스크립트 인젝션 탐색
페이지에 <a href="your link is invalid? Is it not?">파트너링</a> 형태의 링크가 존재하며, 입력값을 통해 동작을 확인할 수 있다. 일반적으로 http://는 정상적으로 해시를 처리하지만, https://는 일부 필터링이 발생함을 발견했다.
이를 활용해 javascript:alert(123)//http:// 형태로 인젝션 시도 시, 브라우저에서 javascr_ip:alert(123)//http://처럼 문자열이 변환되는 것을 확인했다. 이는 키워드 필터링이 일어나고 있음을 의미한다.
대소문자 변형으로 회피 시도 실패 후, javascript를 HTML 엔티티 인코딩으로 변환하여 우회:
javaScript:alert(123)// http://
결과, 정상적으로 alert(123)가 실행되며 관문 통과 성공.
제10관: 숨겨진 입력 필드와 속성 기반 인젝션
처음 접속 시 아무런 출력 없이, 주소줄에 keyword 파라미터만 존재하는 것을 확인. 코드 영역에서는 <script>alert(123)</acript>가 삽입되었지만 유효하지 않음.
소스 코드 분석 결과, <, >, ", & 등의 특수문자가 htmlspecialchars() 함수에 의해 인코딩됨. 인코딩 방식은 UTF-8이며, 직접적인 인젝션은 불가능하다고 판단.
다음으로, 코드 영역 내부에 세 개의 type="hidden" 입력 필드가 존재함을 발견. 각각의 값을 전달 방식으로 수정해보았을 때, 오직 t_sort 값만 변경되는 것을 확인.
이로부터 t_sort가 유일한 인젝션 포인트임을 추정하고, 다음과 같이 공격 코드 삽입:
&t_sort=1" onmouseover="javascript:alert(123)" type="test"//
마우스를 해당 요소 위로 옮기면 알림창이 발생, 정상 작동하여 관문 통과.
제11관: 참조 헤더 기반 인젝션 (Referrer 기반)
제10관과 유사한 구조를 보이며, 네 개의 숨겨진 입력 필드 존재. 특히 t_ref 필드의 초기 값이 이전 페이지의 URL을 포함하고 있음을 확인.
이전 페이지의 경로가 level10.php?keyword=well%20done!&t_sort=1%22%20οnmοuseοver=%22javascript:alert(123)%22%20type=%22test%22// 형식이라는 점에서, t_ref 값이 서버 측에서 사용 중임을 유추.
다운로드된 데이터를 분석하기 위해 Burp Suite로 패킷 캡처를 수행했으나, 원래 상태에서 t_ref 값을 변경하면 Referer 헤더에 반영됨을 확인.
이를 이용해 다음 헤더를 조작:
Referer: 1" onmouseover="javascript:alert(123)" type="test"> //
비록 >가 인코딩되었지만, onmouseover 이벤트가 정상적으로 실행됨. 마우스를 입력 필드 위로 옮기면 알림창 표시, 성공적으로 인젝션 완료.
제12관: 사용자 에이전트 기반 인젝션
제11관과 동일한 원리로, 다만 Referer 대신 User-Agent 헤더가 인젝션 지점으로 사용됨.
다음과 같이 요청 헤더를 조작:
User-Agent: 1" onmouseover="javascript:alert(123)" type="test"> //
브라우저가 헤더를 해석하면서 onmouseover 이벤트가 트리거되고, 마우스 오버 시 알림창 발생. 인젝션 성공.
제13관: 쿠키 기반 인젝션과 세션 조작
이번에는 t_link, t_history, t_sort, t_cook 네 가지 파라미터가 존재. 기본값으로 각각 A, B, ' , call me maybe?로 설정되어 있음.
모든 파라미터를 직접 수정해도 값 변화 없음. 하지만 t_cook의 초기값이 call me maybe?라는 점에서, 쿠키 정보와 관련이 있을 가능성이 있음.
패킷을 분석해보니 실제 전송되는 쿠키는 다음과 같음:
Cookies: user=call+me+maybe%3F; PHPSESSID=qc7v2tee16d9jj4hmpass8st72
이를 바탕으로, user 쿠키 값을 조작하여 인젝션 시도:
Cookie: user=" onmouseover="alert(123)
서버 측에서 쿠키 값을 다시 읽어들여 t_cook 필드에 반영됨. 이후 t_cook의 값이 txt로 변경되며, 공격 코드가 실행되며 성공적으로 관문 통과.