카테고리 없음

[빡공팟 5기] W6 : DVWA 실습 - Command Injection (medium)

이유갬 2022. 10. 30. 23:18

[ 실습 목표 ]

Remotely, find out the user of the web service on the OS, as well as the machines hostname via RCE.

원격으로 RCE를 통해 OS의 웹 서비스 사용자 및 시스템 호스트 이름을 확인하는 것이 목표다.

여기서 RCE 가 무엇일까?

RCE(Remote Code Execution) 취약점 : 응용 프로그램이 적절한 입력의 유효성 검사 없이 쉘 명령을 실행할 때 발생하는 취약점.

[실습 화면]

- Low 와 마찬가지로 IP 를 입력하면 Ping 을 보내는 기능을 가지고 있는 폼이다.

- 일단 IP 주소를 한번 입력해보자!

- 정상적으로 동작하는 것을 확인할 수 있다.

- Low 레벨에서 사용했던 ;, &&, | 을 사용하여 명령어를 실행 시켜 보았다.

- 위와 같이 명령어를 입력했는데 아무 일도 일어나지 않았다. 한번 다양한 문자로 다시 시도해보았다.

- | 문자를 사용해보니 결과가 출력되었다.

- 공격이 통하는 문자를 입력하거나 기능이 출력될 때 로딩 시간이 좀 긴 듯 하다.

- && 문자는 먹히지 않았다. 그렇다면 | 문자를 사용하여 다른 명령어를 수행해보았다.

- 현재 경로를 파악해보았다.

- |cat etc/passwd 를 통해서 유저의 정보를 얻어냈다.

- hostname 명령어를 통해서 시스템 호스트 이름을 알아냈다.

- 이제 소스 코드를 분석해보자!

- 폼의 입력값을 POST 메소드로 서버에 전송하고 해당 아이피에게 폼에 입력한 동작을 요청을 하는 것인데 여기서 substitutions 에서 필터링을 거친다.

- | 명령어는 먹히는 이유가 여기서 발견된다.

- $target 변수의 명령어가 입력한 IP 에게 요청을 한다.

- 위와 같이 필터링을 거치더라도 모든 명령어를 완벽하게 하지 않으면 취약점이 발생하는 것을 알 수 있다.