티스토리 뷰

반응형

1. Form SQL Injection

Form은 검색하려는 데이터를 입력하는 HTML의 구조이다.

 

User ID에 1을 입력하면고 Submit을 누르면 http://서버IP/vulnerabilities/sqli/?id=1&Submit=Submit URL로 요청을 하게된다.

이후 id라는 키값에 1이라는 값이 입력되어 $id라는 변수에 할당되고 아래와 같이 쿼리의 where절에 있는 $id에 1이 입력이 되는 구조이다.

$id = $_REQUEST[ 'id' ];
$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

 

Form SQL Injection은 쿼리 문의 where 절을 무력화 시키는 방법이다. 아래와 같이 쿼리를 작성하면 user_id가 공백 또는 1=1의 조건을 만족하는 유저가 나오기 때문에 결과적으로 SELECT first_name, last_name FROM users 가 실행된다. 이후 #은 뒤에오는 '를 주석처리(mysql 기준)하는 기호이다. 

SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #';

이렇게 되면 아래와 같이 모든 유저가 나오는 것을 알 수 있다.

 

이를 막기위한 방법에는 여러 함수를 적용할 수 있다.

1. mysql_real_escape_string() 함수 사용

$id = mysql_real_escape_string($GLOBALS["___mysqli_ston"], $id);

2. prepared statement() 함수 사용

$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );

 

위의 두가지 방법을 사용하면 SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #'; 쿼리문의 빨간색 부분을 단순히 문자로 취급하여 id 값이 ' or 1=1 # 인 것을 찾게 된다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함