[ 모 의 해킹 ] 블라인드 SQL 인젝션 실습 하 기 - DVWA Blind SQL Injection - Low Level 
 블라인드 SQL 인젝션 은 보통 의 SQL 인젝션 보다 더 어렵 다 . 당연히 SQL 인젝션 이 유행 하 면서 많 은 개발자 들 이 이 에 경각심 을 갖 기 시작 했 고 시큐어 코딩 을 적용 했 다 . 
 하지만 해커 들 의 열정 은 웹 사이트 개발자 보다 월등히 높 다 . 해커 들 은 손쉬운 SQL 인젝션 이 통하 지 않 지만 제목 에서 도 알 수 있 듯 . . 깜깜 한 어둠 속 에서 손 을 더듬 어 가 며 손 에 닿 는 감촉 으로 무엇 인가 를 인식 할 수 있 듯 . . DB 에 접근 할 것 으로 추측 되 는 화면 만 있 으면 조회 결과 가 화면 에 보이 지 않 더라도 화면 조작 의 결과 가 화면 에 표현 되 는 방식 에 따라 그 결과 를 추측 하 여 DB 에 접속 하 는 공격 을 시도 하 기 시작 했 다 . 
 그런 공격 의 유형 이 바로 Blind SQl Injection 이 다 . 
 DVAW 에서 는 SQL 인젝션 다음 의 예제 로 실습 을 해 볼 수 있 다 . 
 Blind SQL 인젝션 의 실습 화면 이 다 . 
 User ID 를 입력 하 면 그 결과 가 다음 라인 에 적색 텍스트 로 표현 된다 . 사용자 ID 가 DB 에 있 다 . 없 다 . 로 그 결과 면 표시 된다 . 해커 는 당연히 이 페이지 가 DB 에 접속 하 여 사용 자 정보 가 담긴 테이블 을 조회 ( SELECT ) 한다고 추측 할 수 있 다 . 어떻게 추측 할 수 있 는지 이해 가 되 지 않 는다면 . .. 뭐 라 해 줄 수 있 는 말 이 없 다 . 직접 로그인 을 수행 하 는 웹 페이지 를 코딩 해 보 고 다시 이 포스트 를 보 기 바란다 . 
 그런데 문제 는 단순히 이 웹 페이지 에서 저 작 은 User ID 입력 창 에 DB 의 종류 를 알아내 고 DB 와 Table 의 구조 를 알아내 고 테이블 을 조회 해 내용 을 알아낼 수 있 는 SQL 을 입력 하 는 것 도 힘든 작업 이 지만 문제 는 앞 에서 테스트 한 SQL Injection 예제 처럼 그 결과 를 이 화면 에서 는 표시 해 볼 수 없 다는 점 이 다 . 
 공격 의 이름 에 Blind 라는 단어 가 들어가 는 이유 가 여기 에 있 다 . 예 를 들 어 MySQL DB 의 버전 을 가져오 려면 아래 와 같 은 SQL 을 실행 해야 한다 . 
 사용자 ID 는 위 화면 처럼 2 로 고정 하 고 아래 SQL 문 을 추가 해 조작 하 여 그 결과 를 모니터링 하 는 것 이 다 . 
 솔직 하 게 이야기 해 substr ( ) 의 결과 가 5 . .. 즉 5 . 7 버전 의 앞 글자 5 라면 그 결과 가 참 ( 1 ) 이 되 는데 . .. 이런 식 으로 수백 , 수천 번 의 SQL 을 직접 실행 해 그 결과 를 확인 하 는 방법 으로 해킹 이 가능 할까 싶 다 . SQL 인젝션 을 통해 위 의 SQL 을 조작 해 실행 하 고 사용자 ID 가 DB 에 있 다 . .. 없 다 를 보 면서 한 글자 . .. 한 글자 . .. 아니 면 SQL 의 참 / 거짓 여부 를 확인 하 는 노가다 를 하 면서 해킹 을 하 고 싶 지 는 않 다 . 무슨 부귀영화 를 누리 겠 다고 그런 노가다 를 한다는 말 인가 . . 
 그래서 도구 를 만들 고 사용 한다 . 
 이때 활용 할 수 있 는 도구 가 바로 SQLMap 이 라는 DB 취약점 점검 도구 다 . 
 SQLMap 은 칼리 리눅스 에 기본 으로 설치 되 어 있 기 때문 에 이번 블라인드 SQL 공격 실습 은 칼리 리눅스 에서 해 봤 다 . 
 먼저 칼리 리눅스 에 설치 된 사파리 웹 브라우저 를 통해 DVWA 에 접속 한다 . 
 왜냐하면 SQLMap 을 통해 웹 브라우저 를 시뮬레이션 하 면서 취약점 점검 을 수행 하 려면 웹 브라우저 에서 해당 사이트 에 로그인한 뒤 부여 받 는 세션 ID 가 필요 하 다 . 그래서 칼리 리눅스 에 설치 된 사파리 브라우저 로 DVWA 에 로그인 한 뒤 세션 ID 를 복사 해 SQLMap 명령 행 에 입력 해 줘야 한다 . 
 접속 했 다면 브라우저 의 ! 아이콘 을 클릭 한 뒤 > 표시 를 클릭 한다 . 
 아래 의 More Information 을 클릭 한다 . 
 Security 를 클릭 하 면 나오 는 View Cookies 를 클릭 한다 . 
 번 저 PHPSESSID 를 선택 하 고 아래 의 Content 에 있 는 길다란 . .. 문자열 을 복사 한다 . 이 문자열 이 웹 서버 가 로그인한 사파리 브라우저 에게 부여 한 세션 ID 다 . 
 두 번 째 쿠키 는 security 레벨 을 설정 하 는 쿠키 다 . 값 은 low 다 . 
 그리고 칼리 리눅스 에 SSH 로 접속 해 root 로 su 한 뒤 sqlmap 을 실행 한다 . 
 위 화면 처럼 SQL Injection ( Blind ) 메뉴 를 선택 했 을 때 사파리 주소창 에 표시 되 는 URL 과 조금 전 복사 해 둔 두 개 의 쿠키 즉 세션 ID 와 Security Level 을 위 화면 처럼 입력 해 준다 . 
 그리고 엔터 키 를 누르 면 sqlmap 이 실행 되 고 취약점 을 찾 아 준다 . 
 id 라는 GET 방식 의 파라미터 가 취약 할 수 있 고 id 가 AND boolean - based blind 고역 에 취약 할 것 같 고 . .. DB 는 MySQL 인 걸로 보인다는 둥 앞 에서 설명 한 방법 을 통해 자동 으로 취약 한 정보 들 을 수집 해 준다 . 
 주루룩 ~~ 계속 수집 해 준다 . 
 점검 이 끝나 면 점검 결과 를 요약 해 준다 . 
 백 엔드 에 숨 어 있 는 DB 는 MySQL 이 고 운영 체제 는 Ubuntu , 웹 서버 는 아파 치 며 에러 도 발견 되 었 다는 이야기 다 . 
 그리고 그 앞 에 가장 중요 한 GET 방식 의 id 파라미터 가 AND boolean - based blind 공격 에 취약 하 다는 것 과 time - based blind 공격 에 도 취약 할 수 있 다는 결과 를 알려준다 . 
 Blind SQL Injection 취약점 이 있 는 것 같 으므로 이제 DB 이름 을 확인 해 본다 . 아래 화면 처럼 -- current - db 옵션 을 추가 해 실행 한다 . 
 db 이름 이 dvwa 로 확인 되 었 다 . 그렇 다면 dvwa DB 에 어떤 테이블 들 이 있 는지 확인 하 기 위해 - D 옵션 과 -- tables 옵션 을 함께 써본다 . 
 주루룩 . .. 스캔 하 더니 guestbook 과 users 테이블 이 있 다고 알려준다 . 
 테이블 이 확인 되 었 으니 테이블 의 내용 을 조회 해 보 자 . - D , - T , -- dump 옵션 을 함께 써본다 . 테이블 은 users 테이블 을 지정 해 보 자 . 
 뭔가 값 들 을 가져오 기 시작 한다 . 계속 가져온다 . . ( 이 야 ~~ 신난다 ~~) 
 가져오 는 내용 에 Hash 값 으로 추측 되 는 문자열 도 보인다 . 그런데 hash 문자열 이 조금 짧 다 . 
 역시 나 조금 짧 은 Hash 문자열 은 MD 5 다 . 비밀 번호 를 크랙 하 겠 냐고 물어본다 . 사전 파일 도 자체 적 으로 갖 고 있 는 사전 파일 을 쓰 겠 냐고 도 물어본다 . 그리고 Hash 를 무작위 대입 공격 으로 크랙 해본다 . 사전 파일 에 있 는 비밀 번호 를 사용 한다면 크랙 이 될 것 이 다 . 
 역시 나 크랙 이 된다 . 그리고 최종 적 으로 users 테이블 에서 조회 된 사용 자 정보 를 일목요연 하 게 정 래 해 보여준다 . 
 tag : Blind SQL Injection , 블라인드 SQL 인젝션 
 [ 1 ] [ · ·· ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ · ·· ] [ 91 ] 
 total : 4 , 347 , 400