Command Injection은 취약한 애플리케이션을 실행 중인 서버에서 임의의 운영체제(OS) 명령을 실행하도록 하는 공격 기법입니다
더 많은 내용이 궁금하시면 Command Injection에 대해 알아보기를 봐주시면 감사하겠습니다
이번에는 Command Injection 공격을 진행해보고자 합니다
본 실습은 DVWA 환경을 구축한 후 가장 취약한 환경인
Low레벨에서 진행되었습니다!
DVWA에서 Command Injection에 들어가봅시다
이번에는 Ping a device가 떴네요
아무래도 ip 주소를 입력해서 ping 명령어를 실행하는 것 같습니다
View Source를 통해 코드를 확인해봅시다
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
Low 레벨이라 그런지 바로 문제점이 보이네요!
문제가 되는 부분은 아래와 같습니다
$target = $_REQUEST[ 'ip' ];
...
$cmd = shell_exec( 'ping -c 4 ' . $target );
바로 사용자가 입력한 ip 값을 검증 없이 shell_exec()으로 직접 넘기고 있습니다
이는 공격자가 쉘 명령어를 주입할 수 있다는 뜻이죠
그럼 한번 해보겠습니다
아래와 같이 Submit 해보겠습니다
127.0.0.1; ls
입력을 했더니 그대로 쉘에 옮겨져서 명령이 실행되었습니다!
ls 명령어를 통해 3개의 파일이 존재하는 것을 확인 할 수 있네요
그럼 이번에는 디렉토리 구조를 확인해봅시다
아래를 입력해봅시다
127.0.0.1; ls ../
이번에는 상위 디렉토리에 존재하는 파일들을 확인할 수 있네요
Low 레벨이라 그런지 간단한 코드로 바로 확인이 가능하네요!
/etc/passwd 파일은 사용자 ID나 Shell 등의 사용자 계정 정보를 저장하는 중요한 파일인데 이걸 한번 확인해보겠습니다
그리고 앞의 명령어의 결과는 필요없으니 ip는 제외하고 바로 ;부터 입력해보겠습니다
; cat /etc/passwd
이렇게 다양한 정보가 뜨는 것을 확인할 수 있네요!
필드 구조를 살펴보면 아래와 같습니다
| 필드 | 설명 |
|---|---|
| 1. 사용자명 | root, www-data, user1 등 로그인 ID |
| 2. 암호 정보 | 예전에는 암호 해시 (x 또는 * 로 대체됨) |
| 3. 사용자 ID (UID) | 0은 루트 권한. 일반 사용자: 1000+ |
| 4. 그룹 ID (GID) | 기본 그룹 ID |
| 5. 사용자 정보 | 일반적으로 사용자 설명. 비워질 수 있음 |
| 6. 홈 디렉토리 | /home/user1, /root 등 |
| 7. 로그인 쉘 | /bin/bash, /usr/sbin/nologin 등 |
우리는 이 정보들을 볼 수 있으니 해킹에 성공했네요!
이번에는 SQL Injection보다 더 간단하게 완료한 것 같습니다
간단한 명령어로 쉽게 해킹이 가능한 것을 보고 정말 악용이 쉽겠다고 생각했으며 왜 OWASP Top 10에 드는지 알 것 같았습니다
추가적으로 Reverse Shell을 시도하려 했으나 가상머신에서 Kali를 돌리면서 docker로 dvwa를 돌리다보니 네트워크 연결이 제대로 되지 않은 것 같아 계속 실패를 해서 다음에 다시 시도를 해보겠습니다....
하지만 역시 실습이 재미있는 것 같습니다ㅎㅎ
리버스 쉘은 로컬에서 실습하는 것보다 워게임 환경에서 실습하는 것이 더 좋을 것 같습니다. 말씀하신 이유도 있겠지만, 워게임 가상 머신에서 로컬 컴퓨터로 쉘을 받아오기 위해 포트 포워딩이 필요할 수 있는데, 이 과정을 통해 다양한 방면에서 학습할 수 있다고 생각합니다. 관련문제 찾으면 공유드리겠습니다.