Code::Security/DVWA

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

태군 코드 2018. 7. 26. 17:42
반응형

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


DVWA 취약점 진단 항목인 CSRF 공격에 대하여 알아보도록 하겠습니다.

CSRF(Cross Site Request Forgery)는 "크로스 사이트 요청 변조 공격"을 말합니다. 이 공격은 공격자가 GET, POST와 같은 HTTP 메소드로 사용자 모르게 공격자의 의도된 행위를 수행하게 하여 피해를 주는 공격 입니다. 게시판이나 공지사항등에 스크립트가 삽입되는 XSS 취약점에 의하여 스크립트 발생과 함께 요청을 하거나 공격자가 올려놓은 악성 링크를 요청할수 있습니다.


해당화면은 CSRF 취약점 진단의 메인화면이고 밑에 링크를 타고 들어가시면 자세한 설명을 보실수 있습니다.


CSRF 공격은 공격자가 사용자에게 악성메일이나 게시판에 악성서버로 유도하는 링크를 삽입하거나 보냅니다. <script src=http://서버/test.js></script> 와 같이 링크를 삽입하게 되면 스크립트 파일로 인해서 임의의 행위를 할수 있습니다.



Low레벨의 소스코드를 보시면 변경할 비밀번호화 확인 비밀번호를 입력받아 기존 비밀번호를 변경해 주는 로직으로 짜여져 있습니다. 여기서 보시면 mysql_real_escape_string 함수를 이용하여 SQL Injection 공격을 대응하고 있지만, 비밀번호를 변경할때 기존 비밀번호를 체크하지 않고 새 비밀번호와 확인 비밀번호 값만을 가지고 비교를 하고 있습니다.


다른 사이트에서 비밀번호를 변경해 보신분들은 아시겠지만 보통 현재 비밀번호, 새비밀번호, 확인 비밀번호의 과정을 거쳐서 비밀번호 변경이 이루어 집니다.


그럼 해당 비밀번호 변경창에서 한번은 똑바로 입력해보고, 한번은 다르게 입력을 해보겠습니다.



두개의 조건값을 동일하게 입력하였을 경우에는 Password Changed. 라는 메시지를 확인할수 있습니다.



두개의 값을 다르게 입력을 하였을때 화면 입니다 Passwords did not match. 메시지를 확인할수 있습니다.



여기서 한가지 더 확인을 해보자면 해당 페이지의 소스코드를 보면 GET 메소드를 이용하여 매개변수 값을 URL로 전송을 하는것을 확인할수 있습니다.


이제 CSRF 공격 코드를 만들어 보도록 하겠습니다. 해당 코드를 그대로 복사한 다음 .html로 저장을 해줍니다. (저같은 경우는 CSFRTEST.html 로 저장을 하였습니다)



저장하신 파일을 여신후 다음과 같이 수정을 해줍니다. <from action="자신의 DVWA의 CSRF 테스트 페이지 주소"> 그리고 변경하려는 비밀번호와 확인 비밀번호에 Value="" 값을 넣어 주신후 저장하셨던 HTML 파일을 열어 줍니다.



HTML 파일을 열면 위와 같은 화면이 나오고 여기서 [Change] 버튼을 눌러 줍니다.



간단한 조작만으로 비밀번호가 변경된 것을 확인할 수 있습니다.


한가지를 더 해보면 <from action=""> 값을 무차별 대입 공격 URL로 수정을 한뒤 테스트를 진행해 줍니다.


<form action="http://자신의 IP/vulnerabilities/brute/?username=admin&password=test&Login=Login#" method="GET">



실제 바꾼 비밀번호로 로그인이 된 모습입니다.


그럼 Low레벨과, Medium레벨을 버트스위트를 통해 다시한번 테스트 해보시기 바랍니다.












반응형