Code::Security/DVWA

취약한 웹 애플리케이션을 이용한 (DVWA) Brute Force 취약점 진단

태군 코드 2018. 7. 23. 18:13
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.


이번에는 DVWA 환경의 Brute Force 항목을 진단해 보도록 하겠습니다.


Brute Force는 무차별 대입 공격을 의미 하고 있으며, 무차별 대입 공격은 공격자가 계정 암호 값에 입력할 수 있는 모든 값을 대입하여 암호를 알아내는 공격을 말합니다. 일반적으로 로그인 기능이 있는 웹 페이지는 공격자의 무차별 대입 공격에 의해 쉽게 크랙될 수 있으며, 로그인 페이지 이외에도 많은 곳에서 무차별 대입 공격을 할수 있습니다. 만약 웹 페이지의 인증이나 횟수 제한이 설정되어 있지 않다면 무차별 대입 공격으로 쉽게 해킹당할 수 있습니다.



해당 화면은 Brute Force의 메인화면 이며 로그인창이 존재 하고 있습니다. 그 밑에 More Information에는 Brute Force 공격이 설명된 링크가 있으며 한번 씩 들어 가서 보시기 바랍니다.




위에 보이시는 화면은 DVWA Brute Forece Low 레벨의 소스코드 입니다. 소스코드를 보시면 아이디와 비밀번호를 단순 검증하는 로직으로 이루어져 있으며, 아이디와 비밀번호를 입력받아 MD5값으로 저장을 합니다. 이는 입력 값에 대한 검증이 존재하지 않는 취약한 검증 로직입니다.


그럼 버프스위트를 이용하 무차별 대입 공격을 시도해 보도록 하겠습니다. 버프스위트를 사용을 하려면 프락시 서버 설정을 해주셔야 합니다.


■ Burp Suite(버프스위트) Proxy 설정 방법


그리고 지금까지는 http://127.0.0.1/login.php로 접속을 하였는데, http://DVWA가 설치된 IP주소/login.php 이렇게 접속해 주시기 바랍니다.(시작 -> 실행 -> cmd -> ipconfig)를 하시면 자신의 IP 를 확인할수 있습니다.




해당 화면은 버프스위트를 이용하여 패킷을 잡은 모습니다. HTTP 요청 헤더를 보시면 GET 메소드를 이용하여 사용자의 ID, PW 로그인 정보를 보내는 것을 알수 있습니다. 로그인 페이지를 처리하는데 있어서 GET 메소드를 사용을 한다면 보안에 큰 문제가 있다는 것을 알아 두시기 바랍니다. 


/vulnerabilities/brute/?username=1&password=1&Login=Login 먼저 해당 주소를 살펴 보시면 빨간색 부분이 URL 이고, 파란색 부분이 매개변수라는 것을 알수 있습니다. 일반적으로 웹 페이지에서 로그인 페이지를 구현할 때에는 GET 방식이 아닌 POST 방식을 사용하는것이 바람직합니다. POST 방식은 GET 방식과 다르게 매개변수를 넘겨줄 때 HTTP BODY를 이용하므로 URL 상에서는 매개변수를 노출하지 않습니다.


그럼 다시 본론으로 들어가서 패킷을 잡은 상태에서 마우스 오른쪽 버튼을 누르신후, [Send to Intruder]를 눌러 Intruder 탭에 패킷을 넘겨주도록 하겠습니다.



아마 제 블로그에서 Burp Suite 사용법을 보신분들은 왜 이렇게 하는지 이해를 하실겁니다. 


■ Burp Suite(버프스위트) 메뉴 Intruder


해당 링크를 참고하여 주시기 바랍니다.


여기서는 실제 공격할 페이로드 포지션을 설정을 해야 하는데, 대상이 되는 아이디와 패스워드에 대한 페이로드 포지션을 잡아 주도록 하겠습니다. 페이로드 설정을 다 해주셨다면 Attact type을 'Sniper' 에서 'Cluster bomb' 로 변경해줍니다. 그 이유는 Sniper는 단일 페이로드를 사용하여 공격하는데, 여기서는 아이디와 비밀번호 2개 페이로드가 필요하기 때문입니다.



설정이 완료되면 Payloads 탭으로 넘어가서 무차별 대입 공격을 시도할 목록을 설정해 줍니다. 여기서 Payload set 설정값 1은 앞에서 설정한 아이디와 비밀번호 2개의 페이로드 중 아이디를 의미하고, 2는 패스워드를 의미 합니다.



여기서는 테스트를 위한 환경이기 때문에 4개의 페이로드를 설정을 하도록 하겠습니다, Payload Options 실제 무차별 대입 공격을 시도할 아이디(설정값 1번)에 대한 페이로드 목록과, 비밀번호(설정값 2번)에 대한 페이로드 목록을 각각 설정을 해줍니다.


이러한 방식은 '사전 대입 공격'이라고 합니다. 사전에 있는 단어를 하나씩 대입하여 공격하기 때문에 사전 파일의 질이 공격의 성공 유무를 확인할수 있습니다. 실제 페이로드 값을 4개가 아닌 큰 데이터의 사전 파일을 넣어서 공격을 하면 어떻게 될까요? 시간은 오래 걸리겠지만 그만큼 값을 알아낼 확률이 높아 집니다.



페이로드 값이 설정이 완료 되셨다면 Options 탭으로 이동해서 Grep-Match 값에 해당 문구를 넣어 줍니다. 이문구는 확인하신 분들도 계시겠지만 처음 아무거나 로그인을 시도 하였을때 실패했다는 메시지 입니다. Grep-March는 공격 후 서버의 응답 메시지와 비교하여 해당 문자열이 포함되어 있으면 그 항목을 체크하는 역할을 합니다.



설정을 완료한후 Start attack를 눌러주면 대입을 하면서 공격을 시도를 하는것을 볼수 있습니다. 아까 Get-Match에 넣어준 값은 로그인 실패에 대한 메시지 이므로 정상적으로 로그인이 된다면 다른 메시지를 나타내므로 체크박스에는 체크가 안되어 있을 것입니다.


그럼 여기서 또 테스트를 할수 있는것은 로그인 성공했을때 메시지를 넣고 테스트를 해보시면 또 다른 모습으로 보이실 겁니다.










반응형