이 문서에 포함된 어떠한 내용도 불법적이거나 비윤리적인 목적으로 보안 도구나 방법론을 사용하도록 가르치거나 장려하지 않습니다. 항상 책임감 있는 태도로 행동하세요. 여기에 설명된 도구나 기법을 사용하기 전에 개인 테스트 환경 또는 허가를 받았는지 확인하세요. |
[ 환경 ]
DVWA | v1.9 |
Burp Suite | Community Edition v2024.11.2 |
이 코드는 사용자가 제출한 id를 기준으로 데이터베이스에서 사용자 정보를 조회하여 출력한다.
if( isset( $_POST[ 'Submit' ] ) ) {
$id = $_POST[ 'id' ];
$id = mysql_real_escape_string( $id );
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
$i++;
}
취약한 SQL 쿼리 생성
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
SELECT first_name, last_name FROM users WHERE user_id = 1 OR 1=1;
mysql_real_escape_string( )의 한계
디버깅 정보 노출
die('<pre>' . mysql_error() . '</pre>');
구식 데이터베이스 함수 사용
입력값 검증 부족
소스코드에서 살펴보았듯이 mysql_real_escape_string() 함수를 이용하여, SQL Injection 공격을 보호하고 있다. 그러나 SQL 쿼리가 파라미터 주의에 따옴표가 없는 SQL 쿼리로 인해 쿼리가 변경되는 것을 완전히 보호하지 못한다. Medium level에서는 기존 텍스트 상자가 드롭다운 목록으로 변경되었고, POST를 사용하여 전송하기 때문에 브라우저에서 직접 SQL Injection 공격을 진행 하기는 어렵다. Burp Suite로 전송되는 드래픽을 Intercept 해보자.
Burp Suite로 전송되는 드래픽을 Intercept 해보자. Medium level에서도 id 파라미터에 사용자가 제출한 폼에 데이터를 넣은 후에 전송하는 것을 확인할 수 있다. Low level과 다른점은 POST로 전송하고 있다는 것이다.
Low level에서와 동일하게 id 파라미터에 작은따옴표(')를 입력해서 전송하면, SQL 쿼리에서 구문 오류가 발생하여 오류 메시지를 출력하는것을 확인할 수 있다. 이는 여전히 id 파라미터가 SQL Injection에 취약하다는 의미이다.
id 파라미터가 SQL Injection에 취약하다는것을 확인하였으나, 이전과 동일한 명령을 실행할 수 있다. Medium level에서는 Low level과 다르게, mysql_real_escape_string( )함수가 문자열에 대한 이스케이프 처리만 제공하여 숫자형 값에 대한 보호는 불완전하기 때문에 Paylod는 ' OR 1=1#가 아닌 OR 1=1가 된다.
ㅁ 데이터베이스 버전 확인
union select null, version() # |
ㅁ 데이터베이스의 메타데이터를 조회하여, 테이블 이름 확인
UNION SELECT schema_name, NULL FROM information_schema.schemata # |
ㅁ User 테이블에서 사용자 이름과 비밀번호 확인
UNION SELECT user, password FROM users # |
DVWA : SQL Injection - High level (0) | 2025.01.07 |
---|---|
DVWA : SQL Injection - Low level (0) | 2025.01.05 |
DVWA : File Upload - Impossible level (0) | 2025.01.05 |
DVWA : File Upload - High level (0) | 2025.01.05 |
DVWA : File Upload - Medium level (0) | 2025.01.05 |