Code::Security/DVWA

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

태군 코드 2018. 7. 24. 16:44
반응형

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


DVWA 취약점 진단 항목중에 하나인 Command Execution에 대해서 알아보도록 하겠습니다.


Command Execution은 '원격 명령 실행 취약점'을 말합니다. 이 공격을 사용하면 공격자는 자신이 실행하고자 하는 명령어를 서버에 원격으로 실행하여 악의적인 행위들을 할 수 있습니다.



Command Execution 메인 화면 입니다. 웹페이지 접속 방법 및 소스코드 보는 방법은 앞에 포스팅에서 다 설명을 했기 때문에, 앞으로는 건너 뛰도록 하겠습니다.



위에 보이시는 화면은 Command Execution Low레벨의 소스코드 입니다. 소스코드를 보시면 입력받은 IP값을 target 변수에 저장하고 shell_exec 함수를 이용하여 명령어를 실행하고 있습니다. Low레벨에서는 필터링 검증을 하지 않고 입력 값을 바로 실행하므로 ping 이외의 다른 명령어도 실행 할수 있는 취약점 이 존재하고 있습니다.


ping은 ICMP 프로토콜을 이용하여 'ICMP echo request'라는 요청 메시지를 원격 호스트로 보내 'ICMP echo reply' 메시지가 돌아오는지를 판단하여 원격 호스트의 동작 여부를 확인할수 있습니다.



취약점 진단을 하기 전에 루프백 주소를 이용하여 핑 테스트를 한 모습입니다. 루프백 주소는 실제 외부 네트워크에 연결되어 있지 않은 네트워크 주소로 주로 웹 애플리케이션의 네트워크 동작 기능을 시험하는데 사용합니다.


루프백 주소를 이용하여 핑 테스트를 해보면 정상적으로 핑이 가는 것을 확인 할수 있습니다. 저는 인코딩 문제로 인해 글자가 깨져서 나오지만 테스트를 하는데 지장은 없으므로 그냥 진행을 하도록 하겠습니다.


원격명령 취약점 테스트를 하기에 앞서 실행할수 있는 명령어는 OS에 따라 다를수 있습니다. 저는 Windows 환경에서 테스트를 하도록 하겠습니다.



Low 레벨에서는 필터링을 검증하지 않고 입력값을 바로 실행 하므로 && 연산자를 이용하여 현재 디렉토리 파일 내역 조회를 하였습니다.



이번에는 || 연산자를 이용하여 시간 및 현재 공격 대상의 열려 있는 모든 포트 정보를 조회 해 보았습니다. 이렇게 원격 명령실행 취약점이 존재한다면 계정 정보 및 서버정보등이 탈취당해 공격자는 root 권한으로 서버에 악의적인 행위를 할수 있는 위험한 취약점 입니다.



Medium 레벨 소스코드에서는 Low 레벨과 마찬가지로 입력받은 IP 값을 target에 저장하고, 이때 입력 값에서 &&, ; 문자열이 있으면 str_replace 함수를 이용하여 공격으로 치환을 합니다. 하지만 명령어 실행하는데 있어서 &&, ; 을 제외한 명령어도 많기 때문에 쉽게 우회를 할수 있습니다.


이제 명령어 실행 취약점이 있는것을 확인했으니 버프스위트를 이용하여 서버에 파일 업로드 공격을 해보도록 하겠습니다.




먼저 다음과 같은 테스트코드를 만들어 줍니다. 테스트 하는 코드는 간단하게 만들었지만 이와 같은 방법을 이용하여 악성 스크립트 파일을 원격 명령어로 서버에 삽입된다면 큰 위험이 될 수 있습니다.



다음과 같이 프록시 설정을 한후 [submit] 버튼을 눌러 줍니다.



[submit] 버튼을 눌러 버프스위트에서 패킷을 잡은 모습입니다. 밑에 보시면 IP 값이 인코딩 되어 있는 모습을 확인할수 있습니다. 그리고 여기서 [Send to Intruder]를 눌러 주신후 [Intruder] 탭으로 데이터를 보내줍니다.



이번 공격에 필요한 것은 IP에 해당하는 페이로드이므로 IP 부분만 선택하여 줍니다. 이렇게 설정을 해주신후 [payloads] 탭으로 이동을 합니다.


 

[payloads] 탭에서는 조금전에 만들어 놓은 코드를 불러 오도록 하겠습니다. 아까 만들어 놓은 코드는 echo 명령어를 이용하여 test.txt라는 파일을 원격 삽입하는 코드 입니다.



해당 파일을 불러 오면 명령어가 페이로드 부분에 추가된 것을 확인할 수 있습니다. 이렇게 설정이 완료 되었다면 [Start attack] 버튼을 눌러 공격을 하도록 하겠습니다.



이렇게 원격 명령어를 삽입하는 공격을 시도를 하였으면 버프스위트 [Proxy] 탭에서 [Forward] 버튼을 눌러 화면을 넘겨 준후 실제 파일이 업로드 되었는지 확인을 해보도록 하겠습니다.



실제 dir 명령어를 사용하여 디렉토리 목록을 보시면 test.txt라는 파일이 업로드 되어 있는 것을 확인할수 있습니다. 이게 만약 실제 공격스크립트를 업로드 한후 실행을 시켰다면 서버에는 큰 영향을 미칠수 있습니다. 테스트를 하실때에는 꼭 검증된 환경에서 테스트를 하시기 바랍니다. 실제 사용중인 웹 애플리케이션에서 테스트를 할경우 이는 범죄 행위 입니다.





반응형