TeamH4C

[빡공팟 5기] W5 : DVWA 실습 - Command Injection

이유갬 2022. 10. 23. 02:19

[Command Injection 공격의 정의]

시스템 함수 호출이 진행될 때 사용자 입력에 메타 문자를 사용하여 추가적인 명령어를 수행하게끔 해서 의도하지 않은 행위를 하게 한다.

-> 시스템 함수는 서버의 권한으로 호출되기 때문에 중요한 파일을 읽어낼 수도 있다.

 

[연계 공격]

1. 바인드 쉘 : 취약한 서버의 포트가 열렸을 때 (Listen 상태) 해당되는 포트에 접속하여 쉘을 생성하는 것이다.

2. 리버스 쉘 : 해커 쪽의 포트를 열어 취약한 서버 쪽에서 접속하여 쉘을 생성하는 것이다.

-> 방화벽을 뚫기 위해서 사용함.

 

[공격을 보안하는 방법]

1. 개발자는 입력 값에 대해 메타 문자의 유무를 확실하게 검사한다.

2. 시스템 메타 문자를 해석 하지 않고 그대로 사용하는 함수를 사용해야 한다.


[초기 화면]

 

- IP address 를 입력하면 Ping 을 보내는 기능을 수행한다.

- 드림핵에서 실습한 내용과 매우 유사하다.

- ; && | 메타 문자를 사용하여 명령어를 실행시켜보았다.

 

 

- ; ls 를 사용해보니 파일들의 목록이 출력되었다.

- 메타문자와 명령어가 실행된다는 것을 알 수 있다.

- /etc/passwd 에는 사용자들의 정보가 담겨있는 파일인데 이를 출력해보았다.

 

 

- 계정들의 정보를 다 확인할 수 있었다.

- id 명령어를 통해서 현재 계정의 권한을 살펴보았다.

 

[View Source]

 

- 위와 같은 명령어가 실행 가능했던 이유는 shell_exec() 덕분이다.

- shell_exec() : 실행 결과를 변수로 받을 수 있는 시스템 함수이다. -> echo "<pre>{$cmd}</pre>" 가 가능한 이유다.

- 이렇듯 메타 문자를 사용하여 서버의 권한으로 명령어를 실행할 수 있다.

- 추가적으로 연계 공격의 바인드 쉘을 실습해보았다.

 

바인드 쉘을 생성하는 이유는 해커가 명령어를 손쉽게 사용하기 위함이다. -> netcat 을 이용한다.

 

[ 바인드 쉘 공격 시도 ]

mkfifo /tmp/pipe
sh /tmp/pipe | nc -l 4444 > tmp/pipe

- mkfifo 명령어 : 리눅스에서 프로세스 간 통신에 사용되는 FIFO 를 생성하는 명령어이다.

- nc 명령어 : 커맨드 쉘을 생성해주는 명령어다.

- TCP 의 4444번 포트를 바인드하여 Listen 상태의 바인드 쉘이 생성된다.

- 이때, 포트를 연 상태에서 해당 서버로 접속하기 위해서는 서버의 IP 주소가 필요하다.

- ip 주소를 획득했으니 이제 바인드 쉘을 생성해보자.

- 해당 명령어를 입력하고 제출했다.

- /bin/sh 가 종료되지 않고 실행 중이라 페이지 로딩만 계속 뜨는 거라고 한다.

- 가상머신의 Window10 에서 netcat 을 깔고 환경변수 설정까지 한 다음 nc 해당 ip 주소 4444 명령어를 입력했지만 연결되지 않았다.

- 가상머신에서 가상머신이라 뭔가 또 다른 추가적인 조치를 해줘야하는 것 같다.

- 바인드 쉘까지 실습해보고 싶었는데 몇 번이나 시도했지만 성공하지 못했다..