Webhacking-Write-Up/DVWA

DVWA(medium) - SQL Injection, Blind SQL Injection, Weak Session IDs

SlowTurtle_ 2023. 1. 20. 14:52
728x90

1. SQL Injection

db에 5users있고 내가 해야할 것은 SQLi를 이용해 그들의 패스워드를 훔쳐오는 것이라 한다.

우선 low와 차이점을 알아보자.

$query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

소스코드 중 핵심부분부터 봤는데 low때와달리 '(작은따옴표)를 사용하지 않는 것을 확인했다. low때와 달리 버프슈트를 이용해서 더욱 수월하게 풀어보겠다. low때 작성하였던 코드에서 '만 빼서 버프슈트에서 사용하였다.

UNION SELECT user,password FROM users#

슈웃

id별로 Surname에서 password를 출력함을 확인할 수 있다.

 

2. SQL Injection(Blind)

Blind SQL 공격을 통해서 SQL db 소프트웨어 버전을 알아내라.

low와의 차이점을 알아보자.

우선 소스코드에서 차이점은 SQL Injection때와 같이 '(작은따옴표)를 사용하지 않는 것을 확인할 수 있었다.

low때 6이라는 존재하지 않는 User_ID를 요청하면 404코드로 바뀌고 우리에겐 User ID is MISSING from the database.라는 문구를 보여줬지만 이번에는 200코드를 보내고 low때와 같은 문구를 보여줬다. 이것은 404코드를 이용하여 브루트포스공격을 방지함을 알 수 있다. 그러나 아직 참이나 거짓일 때 다른 문구가 나오는 것을 봐서 Blind SQL Injection을 사용할 수 있다.

 

파이썬 스크립트로 짜거나 버프슈트를 이용해서 하는 방법도 있지만 low때 목표를 몰라 단순 User_id별 password를 알아낸게 신경쓰여서 sqlmap으로 버전을 확인할 수 없을까 생각을 하다가 db명을 알았내서 결국 그 db에 접속하여 버전을 확인하면 되는게 아닐까 생각이 들어 실행해볼 것이다.

sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=medium; PHPSESSID=2lo9j1hoha9h8pl8sh8t4dfijb" --current-db

위 코드는 low때 썼던 코드와 거의 동일하지만 secrity가 medium으로 변경되었고

PHPSESSID가 2lo9j1hoha9h8pl8sh8t4dfijb로 변경되었다. 즉 쿠키값만 변경된 것이다.

위 코드를 입력해 현재 db를 확인하였다.

위 그림과 같이 현재 db의 이름은 dvwa임을 알 수 있었다. 그러면 dvwa에 들어가 버전을 확인해보자.

sudo mysql // mysql 접속
use dvwa // dvwa라는 db 접속
SELECT VERSION(); // sql문으로 version 확인

위 그림을 보면 알 수 있듯이 버전은 10.6.10-MariaDB 를 사용함을 알 수 있었다.

 

3.  Weak Session IDS

쿠키값인 dvwaSession이 생성되는 규칙을 찾아라.

low때는 클릭 한 번당 1씩 증가하는 식이었다. medium은 어떤지 확인해보겠다.

1667050158, 1667050193 뒷 두자리만 변경되었다.

 <?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value = time();
    setcookie("dvwaSession", $cookie_value);
}
?>

코드를 보니 time()으로 받아서 세션키를 발급해주는 것을 확인할 수 있었다.

728x90