
Blind SQL Injection은 쿼리의 실행 결과를 직접적으로 볼 수 없으나 공격자가 조건에 따라 서버의 응답을 분석하여 정보를 추출하는 방법입니다
Boolean-based Blind SQL Injection: 참/거짓 조건을 통해 정보를 추출합니다Time-based Blind SQL Injection: 쿼리 실행 시 딜레이를 이용해 서버 응답을 추적하는 방식입니다그럼 이번에는 Blind SQL Injection을 실습해봅시다
이번에는 DVWA에서 SQL Injection (Blind)를 눌러봅시다
본 실습은 DVWA 환경을 구축한 후 가장 취약한 환경인
Low레벨에서 진행되었습니다!
이번에도 마찬가지로 아무거나 넣어봅시다
이번에도 1을 넣었는데 데이터베이스에 User ID가 존재한다고만 뜨네요
다른 값을 넣어보겠습니다

이번에는 없다고 뜨네요
아무래도 전에 쓰던 SQLI 방식은 오래걸리고 비효율적일 것 같습니다
이번에는 sqlmap이라는 명령어를 통해서 진행해보겠습니다
sqlmap이란 SQL Injection 취약점을 자동으로 탐지하고, 이를 통해 데이터베이스 정보를 추출하거나 조작할 수 있게 도와주는 오픈소스 도구입니다
단 몇 줄의 명령어만으로도 강력한 공격이 가능합니다
터미널에서 sqlmap -h를 입력하면 아래와 같이 뜹니다

본격적으로 사용해보도록 합시다
여기서 -u를 통해 타겟 URL을 지정하고 --cookie=COOKIE를 이용해 진행해보겠습니다
먼저 1을 입력하고 URL을 확인해보면 아래와 같습니다
다음으로는 쿠키를 확인해봅시다
개발자 도구에서 Console에 들어가 document.cookie를 입력하면 아래와 같이 쿠키 확인이 가능합니다
자 이제 URL과 쿠키를 확인했으니 터미널에 아래와 같이 입력해줍시다
sqlmap -u "http://localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=k8ee67v1070prbrvrpnnt2ucd0; security=low"
그럼 아래의 사진과 같이 뜨게 됩니다
보면 GET parameter 'id' appears to be 'AND boolean-based blind -WHERE or HAVING clause' injectable (with --code=200) 처럼 AND boolean-based blind 공격이 가능하다고 알려줍니다
그리고 휴리스틱 테스트를 통해 DBMS로 MySQL이 사용가능할 것으로 보여 다른 공격을 스킵할지 물어봅니다
그래서 Y를 입력하면 불필요한 테스트를 무시하게 됩니다
넘겨봅시다!

GET parameter 'id' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable라는 정보가 출력되어, id에 time-based blind 공격이 가능할 것이라고 하며 퍼지 테스트로 적절한 UNION 컬럼을 찾을거냐고 물어봐서 N을 입력했습니다
그리고 NULL 값으로 악용할 수 없지만 임의의 정수 값으로 시도할 수 있음을 알려주는 것은 Y를 입력했습니다
좀 기다리면 아래와 같이 출력해줍니다
id에 대해 boolean-based blind, time-based blind 취약점이 발견되었습니다
그럼 이번에는 DB에 있는 값들에 접근하고자 합니다
쿼리에서 --current-db를 추가적으로 넣어주면 현재 DB를 알 수 있습니다
sqlmap -u "http://localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="PHPSESSID=k8ee67v1070prbrvrpnnt2ucd0; security=low" --current-db
입력하면 아래와 같이 정보가 나타납니다
이를 통해 current database: 'dvwa'를 확인할 수 있습니다!
이번에는 테이블에 대해 알아봅시다
쿼리에서 --current-db를 제외하고 -D dvwa --tables를 넣어봅시다
결과로 guestbook과 users 테이블이 나타난 것을 확인할 수 있습니다!
이번에는 users에서 모든 데이터를 추출해봅시다
쿼리에서 --tables를 지우고 -T users --dump를 추가해줍시다
값을 한글자씩 추출해 참인지 거짓인지 판별을 하게 됩니다
이후 해시값을 저장할 것인지 물어보지만 저는 저장은 하지 않도록 하겠습니다
이후에는 사전 공격을 할 것인지 물어봐 Y를 눌렀습니다
해시는 md5를 이용한 것으로 나타났습니다
그리고 어떤 사전을 이용할 것이냐는 질문에 default dictionary를 이용했습니다
마지막으로 추가적인 접미사를 사용할 것이냐 물어봤으나 느리기 때문에 N를 입력했습니다
이제 모든 user의 정보가 출력됩니다!
이 계정들은 이제 제 거입니다ㅎㅎ
Blind SQL Injection 같은 경우는 sqlmap이라는 도구를 활용해 진행해봤습니다
정말 명령어 단 몇 줄 만으로 모든 user의 정보를 확인할 수 있어서 보안이 정말 중요하다고 느끼면서도 직접 실습을 하면서 재미를 많이 느낀 것 같습니다
아직 Low 레벨이라 시간도 많이 걸리지 않았으나 아무래도 레벨이 높아지면 더 많이 소요될 것으로 판단됩니다
항상 언급하지만 악용은 금지입니다! 모든 책임은 본인에게 있습니다!
그리고 sqlmap을 이용하기 때문에 Mac 터미널을 이용할까 하다가 앞으로도 쓸 일이 많을 것 같아 가상머신에 Kali Linux 환경을 설치해봤습니다
Kali가 아무래도 모의 침투 테스트용 운영체제다보니 많은 툴과 응용할 수 있는 시스템이 기본적으로 제공되어서 이것저것 귀찮게 설치를 안 해도 되서 좋은 것 같습니다
Linux와 웹 해킹 공부에도 도움이 많이 될 것 같아 앞으로도 자주 이용할 것 같네요!
다른글들도 다 읽어보았지만 SQLMAP까지 실습하신건 정말 대단하신 것 같습니다. 저는 Mac 터미널에 SQLMAP 툴만 다운받아놓고 써본적은 없는데 이번 포스팅 보면서 어느정도 틀이 잡혀서 다음번에 SQLi가 가능할 것 같다면 적극적으로 사용하게 될 것같네요. 감사합니다.