반응형

DVWA 환경에서 sqlmap으로 Blind-SQLi 실습

DVWA 환경에서 칼리리눅스에 내장되어 있으며  SQL injection을 자동화해서 공격해주는 강력한 도구인 'sqlmap'으로 Blind-SQL injection 공격을 실습하고자 한다.

 

sqlmap은 칼리리눅스의 터미널에서 'sqlmap'이라는 명령어를 사용해서 사용할 수 있다.

도움말: sqlmap -h (or sqlmap -hh)

sqlmap은 위의 사진에서 나오듯이 -u 다음에 공격 대상의 URL 주소를 필수로 입력해 주어야 한다. 그리고 이번 실습에서는 로그인이 되어있는데 이런 경우 브라우저의 개발자 도구의 console 창에서 document.cookie 명령어를 입력해 쿠키값을 얻은 후 --cookie="COOKIEPHPSESSID"의 형태로 입력해주어야 한다. 바로 실습을 통해 알아보자.

 

가장 먼저 User ID에 1을 입력한 후의 변화된 주소 값을 얻어보자.

 

파라미터 값이 ?id=1&Submit=Submit의 형태로 추가되었다. 그리고 cookie를 확인해주니 security=low 라는 값이 저장되어 있었다.

위 내용을 참고해서 터미널에 sqlmap -u "http://localhosts/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low"를 입력해준다.

 

그러면 아래와 같은 과정이 자동으로 진행된다.

 

얼마 지나지않아 [INFO] GET parameter 'id' appears to be 'AND boolean-based blind -WHERE or HAVING clause' injectable (with --code=200)와 같이 AND boolean-based blind 공격이 가능할 것 같다고 알려준다.

* 참고로 AND boolean-based blind sql injection은 and 조건을 이용한 공격이다.(ex: and 1 = 1)

또한 휴리스틱 테스트를 통해서 백엔드의 데이터베이스 관리 시스템(DBMS)으로 MySQL이 사용한 것 같다고 하면서 다른 DBMS의 공격은 스킵할 것인지 묻는다. 따라서 Y를 입력하면 불필요한 테스트를 무시하며 아래와 같이 자동으로 공격이 진행된다.

 

GET parameter 'id' appears to be 'MySQL > 5.0.12 AND time-based blind (query SLEEP)' injectable라는 정보가 출력되어,

id 파라미터에 시간 기반 sql 인젝션 공격이 가능할 것이라고 하며 퍼지 테스트로 적절한 UNION 컬럼을 찾을거냐고 물어 N을 입력해주었다. 그리고 NULL 값으로 악용할 수 없지만 임의의 정수 값으로 시도할 수 있음을 알려주는 것은 Y를 입력해주었다.

몇 개의 과정을 거치고나면 아래와 같이 출력된다.

 

id 파라미터에 조건 기반 블라인드 취약점과 시간 기반 취약점이 발견되었다. 이제 sqlmap으로 database에 저장되어 있는 값들에 접근해보고자 한다.

 

이를 위해 아까 전  sqlmap -u "http://localhosts/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low"명령어에 --current-db를 추가로 입력해주면 현재 DB의 이름을 알 수 있다.

몇 초가 지나고나면 current database: 'dvwa' 라는 값을 반환해주는데 이를 통해 현재 DB명이 'dvwa'임을 확인할 수 있다.

 

이제 테이블 구조를 알아보기 위해 --current-db를 지우고 -D dvwa --tables를 추가해 확인해보자.

그 결과, 위와 같이 guestbook과 users 테이블이 존재함을 확인할 수 있었다.

 

이제 users의 모든 데이터 정보를 추출해보자.

sqlmap -u "http://localhosts/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low" -D dvwa -T users --dump 를 입력하면 user 테이블에 존재하는 모든 정보를 추출할 수 있다.

값을 한글자 한글자씩 뽑아내는데 현재 진행중인 Blind SQL injection은 각종 정보를 알파벳을 하나씩 모두 대입해보며 참인지 거짓인지 판별하기 때문이다. 만약 blind sqli가 아니라 general sqli라면 이 과정이 훨씬 빠르게 진행될 것이다.

여튼, 시간이 지난 후 출력된 값들 중 해시값이 있으니 이를 저장할 것인지 묻는다. 필자는 바로 Crack 과정을 거칠 것이므로 N을 선택한다.

 

그러고나서 딕셔너리기반 공격을 통해 해시값들을 크랙할 것인지 묻는데 Y를 입력한다. 그리고나서 어떤걸 사용할거냐고 묻는데 1번을 선택하도록 하자.

 

자주 사용하는 패스워드 뒤에 붙는 접미사를 사용할 것이냐는 질문에도 시간이 오래걸린다고 하니 N을 입력하자. 그러면 아래와 같이 자동으로 해시값을 크랙하는 과정을 거친다.

 

시간이 지나고나면 users 테이블의 모든 값이 위와 같이 출력된다.

 

몇 개의 명령어만으로 모든 정보를 다 탈취할 수 있다는 점을 보고 다시 한번 보안의 중요성을 느낄 수 있었고 오랜만에 SQL injection 공격을 실습해보니 재밌었다.

'Hacking & Security > Web Hacking' 카테고리의 다른 글

[Web Hacking] DVWA 실습환경 구축  (0) 2023.05.29