DVWA - Command Injection ( Low )
DVWA - Command Injection ( Low ) 입니다

개요
이 포스팅에서는 DVWA(Damn Vulnerable Web Application) - Command Injection, Low 단계 실습을 진행하면서 공부했던 내용에 대한 내용을 정리해 보았고, 모두 본인이 소유한 가상머신에서 실습이 이루어졌습니다
실습환경
M1 MacBook Air
16G RAM
UTM - 가상머신
Kali Linux 2023.1 - Apple Silicon (ARM64)
목차
1. 취약점 설명 및 분석 - 소스코드 분석, Command Injection
2. Command Injection 실습
3. 대응방안
4. Reverse Shell
취약점 설명 및 분석
소스코드 분석
// 위치 : /var/www/html/dvwa/vulnerabilities/exec/source -> low.php
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
/*5*/ // 입력값 가져오기
$target = $_REQUEST[ 'ip' ];
// OS를 결정하고 ping 명령을 실행
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
/*10*/ // 윈도우
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix ( ~~nix 인 운영체제 )
/*15*/ $cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 마지막 사용자를 위한 피드백
$html .= "<pre>{$cmd}</pre>";
/*20*/ }
?>
4 ~ 6
사용자가 입력한 값이 있다면 입력값을 target 변수에 담아준다
9 ~ 16
운영체제에 따라 다른 명령어를 실행해야 해서 윈도우인 경우와 아닌 경우로 나뉜다
19
실행 결과를 화면에 출력한다
Command Injection
DVWA - Command Injection ( Low )는 입력값이 ip 주소라면 ip 주소 이후에 입력된 모든 값을 target 변수로 가져온다
그리고 입력된 값을 그대로 쉘 명령어로 실행시킨 후 실행 결과를 사용자의 화면에 그대로 보여준다
Command Injection 실습
Command Injection 적용하기
입력창에 입력을 하면 입력한 값이 그대로 쉘로 옮겨져서 실행이 된다
따라서 Command Injection 을 하기 위해선 1줄 명령어를 사용해야 하기에 1개의 줄에 여러 개의 명령어를 적을 수 있도록 해야 한다
127.0.0.1; ls
# localhost의 ip 주소; 현재경로의 목록
# ip 주소 뒤에 ;(세미콜론)을 사용해 주어야 한다
상위 폴더에 어떤 폴더들이 있는지 확인한다
상위 폴더에서 brute 폴더를 선택해서 이동해 보았다
위와 같은 방식으로 계속 이동하여 low.php 라는 소스코드를 화면에 출력하는 데 성공하였다
대응방안
이 경우 ip 주소를 이용하는 경우이므로 ip주소의 형식 이외에 ls, cat 과 같은 문자가 포함되어 있다면 제거해주어야 한다
입력의 첫 시작이 문자라면 정상적으로 작동하지 않음을 이용하여 ip의 최대 자리수인 15자리로 자리수를 제한하는 방법도 있지만 127.0.0.1 같은 경우 ip 의 주소가 짧기에 효율적이지 않다
Reverse Shell
Reverse Shell 을 실행시키기 위하여 여러 가지 시도를 해 보았고 local환경에서 kali linux로 접속을 하여 성공하였다
문제풀이
https://ruang0124.tistory.com/206
참고자료
https://youtu.be/HMYqJuo2FEo - Reverse Shell