-
DVWA - SQL Injection ( Low )모의해킹/Groot - 스터디 2023. 6. 27. 09:06
DVWA - SQL Injection ( Low ) 입니다
개요
이 포스팅에서는 DVWA(Damn Vulnerable Web Application) - SQL Injection, Low 단계 실습을 진행하면서 공부했던 내용에 대한 내용을 정리해 보았고, 모두 본인이 소유한 가상머신에서 실습이 이루어졌습니다
실습환경
M1 MacBook Air
16G RAM
UTM - 가상머신
Kali Linux 2023.1 - Apple Silicon (ARM64)목차
1. 취약점 설명 및 분석 - 소스코드 분석
2. SQL Injection
3. 대응방안
취약점 설명 및 분석
소스코드 분석// 위치 : /var/www/html/DVWA/vulnerabilities/sqli -> low.php // 중요내용 제외 삭제하였음 <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // 입력받은 id 값을 가져온다 $id = $_REQUEST[ 'id' ]; switch ($_DVWA['SQLI_DB']) { case MYSQL: // 데이터베이스 조회 $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ); // result가 존재할 경우 while( $row = mysqli_fetch_assoc( $result ) ) { // 값을 가져온다 $first = $row["first_name"]; $last = $row["last_name"]; // 화면에 보이는 부분 echo "<pre>ID: {$id}<br/>First name: {$first}<br/>Surname: {$last}</pre>"; } // 아래는 SQLLITE를 사용할 경우 case SQLITE: global $sqlite_db_connection; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; } } ?>
입력받은 id값을 이용하여 데이터베이스에 정보를 조회한 후 해당 유저의 정보를 가져온다
입력받은값에대해 아무런 검증이 이루어지지 않고 있어서 SQL Injection에 매우 취약하다
SQL Injection
SQL Injection 적용하기입력받은 id 값을 이용하여 SQL Injection을 진행하였지만 위와 같은 경우는 에러가 발생하였다
URL로 SQL Injection을 시도하면 위와 같이 데이터베이스의 모든 계정정보를 획득할 수 있다
대응방안
SQL Injection을 막기 위해선 사용자의 입력값을 검증해야하고 Prepare Statement 방식을 사용하여 데이터베이스의 내용을 조회하는것이 좋으며, Prepare Statement를 사용하지 못하는 경우는 화이트리스트 기반의 검증 방식을 사용하여야 한다
728x90'모의해킹 > Groot - 스터디' 카테고리의 다른 글
DVWA - Command Injection ( Medium, High ) (0) 2023.07.26 DVWA - Brute Force ( High ) (0) 2023.06.27 DVWA - Brute Force ( Medium ) (0) 2023.06.21 DVWA - CSRF ( Low ) (0) 2023.06.04 DVWA - Vulnerability: CSRF, low 문제풀이 (0) 2023.06.04