본문 바로가기

모의해킹

[BeeBox] 인젝션 공격 유형(AJAX)

AJAX 인젝션

 

AJAX?

AJAX란, JavaScript의 라이브러리중 하나이며 Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자이다. 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법 이며 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이다.

즉, 쉽게 말하자면 자바스크립트를 통해서 서버에 데이터를 요청하는 것이다.

비동기 방식이란?

비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식이며 Ajax를 통해서 서버에 요청을 한 후 멈추어 있는 것이 아니라 그 프로그램은 계속 돌아간다는 의미를 내포하고 있다.

비동기 방식의 장점

페이지 리로드의 경우 전체 리소스를 다시 불러와야하는데 이미지, 스크립트 , 기타 코드등을 모두 재요청할 경우 불필요한 리소스 낭비가 발생하게 되지만 비동기식 방식을 이용할 경우 필요한 부분만 불러와 사용할 수 있으므로 매우 큰 장점이 있다.

b-box AJAX TEST 환경 sqli_10-1.php 페이지

- AJAX TEST 환경 sqli_10-1.php 페이지에서는 버튼이 없이 바로 입력창에 문자열 b를 입력만 해도 즉시 반응하여 b 문자가 포함된 영화를 검색하고 결과를 정렬해서 보여주는 웹 페이지이다.

위를 자세히 확인하기 위해 버프스위트를 활용해 보자.!!!

iron 입력하여 정보를 송신

- AJAX 공격 테스트 웹페이지에서 값을 전송한 결과 title의 파라미터가 iron의 데이터를 sqli_10-2.php 로 전송하며 결과값을 요청하는 request payload를 확인할 수 있다.

 

iron의 요청 값

- AJAX 공격 테스트 웹페이지의 요청값으로 json 데이터를 수신하여 사용자 웹페이지에 전달되어 iron의 결과값을 사용자에게 출력한다.

즉, sqli_10-1.php 페이지에서 입력할 시 sqli_10-2.php에 전달되어 DB에 있는 데이터를 전달 받는 구조이다.

데이터 요청 구조

즉, sqli_10-1.php 페이지에서 입력할 시 sqli_10-2.php에 전달되어 DB에 있는 데이터를 전달 받는 구조이다.

 

악성 스크립트(0' union select 1,concat(id,login),password,email,secret,6,7 from users#)

 

=> AJAX 페이지도 기존 동기된 페이지에서 비동기로된 방식이 가장 큰 차이점이라서 입력값 필터링을 안할 경우 SQL 취약점에 노출될 수 있다. 그러므로 취약한 웹페이지에 악성 스크립트를 삽입하면  위와 같은 결과로 시스템 정보를 노출할 수 있다. 

대응방안

1. 서버단에서 입력값 필터링하고 검증을 한다.

2. 최신 패치로 인한 SQL 인젝션 예방

3. 패턴 모니터링 후 정책 차단

 

참고 사이트

https://velog.io/@surim014/AJAX%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80