Command Execution (3)

밍기적·2022년 11월 13일
0

웹해킹

목록 보기
6/35
post-thumbnail

코드 실행 취약점을 완화하기


DVWA 보안 레벨을 HIGH로 설정한 뒤 코드 실행 취약점에서 소스코드를 확인합니다.

Command Execution Source
<?php

if( isset( $_POST[ 'submit' ] ) ) {

    $target = $_REQUEST["ip"];
    
    $target = stripslashes( $target );
    // 임의로 추가된 백 슬래시를 제거하기 위해 사용함
    
    // Split the IP into 4 octects
    $octet = explode(".", $target);
    // php에서 특정 문자열을 기준으로 나누기 위해서 위 함수를 사용함

    // Check IF each octet is an integer
		// 위의 함수로 부터 나눠진 IP 주소가 숫자인지를 확인함
		// 만약 다중 실행 명령어 기호를 사용하여 뒤의 명령을 사용한다면
		// octet[3]에 저장되어 있을 것이다.
    if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) {
    
    // If all 4 octets are int's put the IP back together.
    $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];
    
    
        // Determine OS and execute the ping command.
        if (stristr(php_uname('s'), 'Windows NT')) { 
    
            $cmd = shell_exec( 'ping  ' . $target );
            echo '<pre>'.$cmd.'</pre>';
        
        } else { 
    
            $cmd = shell_exec( 'ping  -c 3 ' . $target );
            echo '<pre>'.$cmd.'</pre>';
        
        }
    
    }
    
    else {
        echo '<pre>ERROR: You have entered an invalid IP</pre>';
    }
    
    
}

?>

해당 취약점이 발생하는 문제는 ping 뒤의 IP주소를 입력할 때 발생합니다.

우리가 다중 행 명령을 사용하기 위해 여러가지 기호를 사용한다면 IP를 .(dot)을 기준으로 나누고 위의 코드에서는 octet[3] 변수 안에 |, ; 명령어가 저장되어있을 것입니다.

그러므로 해당 변수에 대해 ping을 지원하기 위해서 숫자가 맞는지 확인하는 작업이 추가되어야 합니다.

위 코드에서는 그렇게 숫자가 맞는지 확인하는 작업을 추가로 하고 있습니다.

0개의 댓글