본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 2-5.SQL 인젝션 [AJAX/JSON/jQuery]

by Robert8478 2023. 12. 12.

AJAX 란? - Asynchronous Javascript and XML 으로 HTML, 자바스크립트, JSON을 혼합해서 쓰는 기술을 말한다.
JSON 이란? - Javascript Object Notation으로 웹서버와 데이터를 주고받을때 데이터를 표현하는 방법을 뜻하는데, 자바스크립트 형식으로 객체를 표현한다.
JQuery 란? - 자바스크립트 라이브러리중 하나로 클라이언트에서 스크립트 언어를 쓸때 이를 단순화하며, AJAX 기능도 제공한다.


[난이도 하]
이번 페이지는 AJAX 기술을 활용하여 검색 버튼을 누르지 않아도 글자만 입력하면 알아서 검색 결과를 보여준다.
이럴 때에는 개발자 도구를 활용하여 검색에 사용하는 변수가 무엇인지 알아볼 수 있다.

보아하니 title 변수를 사용하는것 같다. 위의 Sources 탭에 들어가서 php 코드를 확인해 보아도 된다.
AJAX로 구현한 페이지는 URL에 ?title=' 처럼 변수에 값을 입력해도 결과를 출력하지 않는다.
그럼 이제 union select로 테이블명을 뽑아보자.

0' union select null,table_name,null,null,null,null,null from information_schema.tables where table_schema="bWAPP"# 구문을 입력했더니 bWAPP 데이터베이스의 테이블명이 노출되었다. 전 문제와 크게 다를것이 없다.

​이제 0' union select null,column_name,null,null,null,null,null from information_schema.columns where

 table_name="users" and table_schema="bWAPP"# 구문을 이용하면 칼럼명이 노출될 것이다.


[난이도 중,상]
php 코드를 확인해보자.

보아하니 AJAX를 호출할 때 sqli_10-2.php 페이지를 호출하고 있는것을 볼 수 있다.

가보니 난이도 중은 sqli_check_1 , 난이도 상은 sqli_check_2 함수로 필터링하여 입력한 SQL 구문을 쿼리로 인식하지 못하도록 한 것 같다.
위 함수들은 functions_external.php 코드에 작성되어있다.

check 1은 addslashes 함수로 ' " 와 같은 특수문자들을 필터링하여 SQL 구문을 방어하고 있고
check 2는 mysql_real_escape_string 함수로 여러 특수문자들을 \를 붙이는 필터링을하여 방어하고 있다.