Information Security/Hacking

웹 상 운영체제 명령어 실행 (OS Command Execution on Web)

Project_S 2021. 2. 14. 07:37
반응형

입력 폼 상 명령어 구문 삽입 (출처 : Openresolver.com)

* 웹 상 운영체제 명령어 실행 : 웹 애플리케이션에서 시스템 명령어 실행 함수를 제공, 입력값 필터링이 제대로 이루어 지지 않은 환경에서 공격자가 시스템 명령어를 호출 할 수 있는 취약점

 

 

 

* 시스템 명령어 실행 취약점 운용 형태

이 외에도 운영체제 별, 프로그래밍 언어 별 다양한 방법 존재

유닉스/리눅스 명령어 연속 실행 명령어 설명
명령1 ; 명령2 명령 1,2 순차적 수행
명령1 && 명령2 명령1 결과 참일 경우 명령2 수행
명령1 || 명령2 명령1 결과 거짓일 경우 명령 2 수행
명령1 | 명령2 명령 1 수행 결과를 명령2의 표준 입력으로 전달
PHP 운영체제 명령어 실행 함수 내용
shell_exec(cmd) 실행된 명령어의 전체 결과를 반환
passthru(cmd) 실행된 명령어 전체를 바이너리 데이터로 반환
exec(cmd) 실행된 명령어의 마지막 줄만 반환 (인자값 추가 시 전체 출력 가능)
system(cmd) 실행된 명령어 전체 결과 문자열로 반환

 

 

 

* 취약점 판단 기준 : 입력 가능 폼에 명령어를 삽입 시, 실행되면 취약

 

 

 

* 명령어 삽입 대응 방안

- 입력값에 OS 명령어 실행 문자가 포함되었는지 필터링 및 차단

// OS 명령 실행 문자들 포함 여부 체크하는 함수 생성
function check_blacklist($str){
	$isUnsafe=false;
    $blackList=array(';','&&','\|\|','\|');
    for($i=0l $i<count($blackList); $i++){
    	$isUnsafe=eregi($blackList[$i],$str);
        if($isUnsafe){ break; }
    }
    return $isUnsafe;
}
~~~
if(isset($_POST['submit'])){
	$target=$_REQUEST['ip]
    // 요청 파라미터($ip)에 허용하지 않는 문자가 포함되어 있는지 체크
    $isUnsafe=check_blacklist($target);
    if($isUnsafe){
    	echo "<script>window.alert('실행할 수 없는 문자 포함되어 있음');</script>";
    }else{
  		  이하 생략

- 명령어 사용이 꼭 필요할 시, 화이트리스트로 관리

 

반응형