SQL-Injection AJAX/JSON/jQuery
용어설명
JSON : Web Server와 Data를 주고받을 때 Data를 표현하는 방법중 하나이며 Java script 의 형식으로 객체를 표현한다, 이해가 쉬우며 경량의 Data교환형식이다.
jQuery : Java script library 중 하나로, Client 에서 script 언어를 사용할 때 활용됨.
AJAX : HTML, Java script, JSON을 혼합하여 사용하는 기술 브라우저의 XMLHttpRequest를 활용하여 페이지 전체를 새로 고치지 않고 페이지의 일부분만을 데이터를 로드하는 기법이며 비동기통신, Client 와 Server 간의 XML 데이터를 주고받는 기술.
1. SQL-Injection AJAX/JSON/jQuery
해당 취약점 test 화면, 값을 입력 시 자동으로 해당 단어가 포함된 내용이 Server에서 로드 되며, URL을 확인해 보니 GET-Method 방식이 활용되어 변수가 노출되어 있는걸 볼 수 있다.
페이지의 source를 확인해보자.
<script> $("#title").keyup(function(){ // Searches for a movie title var search = {title: $("#title").val()}; // AJAX call $.getJSON("sqli_10-2.php", search, function(data){ init_table(); // Constructs the table from the JSON data var total = 0; $.each(data, function(key, val){ total++; $("#table_yellow tr:last").after("" + val.title + "" + val.release_year + "" + val.main_character + "" + val.genre + "Link"); }); // Empty result if (total == 0) { $("#table_yellow tr:last").after("<tr height='30'><td colspan='5' width='580'>No movies were found!</td></tr>"); } }) }); function init_table(){ $("#table_yellow").html("<tr height='30' bgcolor='#ffb717' align='center'>" + "<td width='200'><b>Title</b></td>" + "<td width='80'><b>Release</b></td>" + "<td width='140'><b>Character</b></td>" + "<td width='80'><b>Genre</b></td>" + "<td width='80'><b>IMDb</b></td>" + "</tr>" ); } </script> |
내용 확인 시 title 이 변수인것으로 확인되며, getJSON을 통해서 AJAX를 통한 XMLHttpRequest 통신을 진행하고 있는것으로 확인된다. SQL query문을 넣을경우 응답하는것으로 보아 SQL-Injection 공격 query문 등을 통한 test진행이 필요할것으로 확인됨. 이전 활용한 SQL query문을 통해 공격을 시도해본다.
2. SQL-Injection AJAX/JSON/jQuery Attack
“(더블쿼터) 와 달리 ‘(싱글쿼터) 의 경우 아무런 반응이 없는것으로 보아 완벽하지않은 query문으로 인식되는 것을 확인. 이를 기반으로 이전 공격 코드들을 활용하여 접근 가능 지점을 확인한다.
‘ or 1=1# (Database 내 모든 정보출력)
' union select all 1,2,3,4,5,6,7#
' union select 1,table_name,3,4,5,6,7 from information_schema.tables#
비동기화 방식임으로 공격문구의 성립 시 바로 즉각적인 페이지의 변화가 있음을 확인할 수 있다. 모든 SQL-Injection이 그러하듯 특수기호등의 필터링이 있어야한다.
'Hacking > bWAPP' 카테고리의 다른 글
Broken Authentication – Password Attack (0) | 2021.06.21 |
---|---|
Broken Authentication – CAPTCHA (0) | 2021.06.14 |
SQL Injection - Login Form (0) | 2021.06.14 |
SQL Injection - GET Select / POST Select (1) | 2021.06.07 |
HTML Injection - Reflected(POST) (0) | 2021.06.03 |