command injection 예제

예를 들어 Java로 프로그래밍하는 동안 개발자는 javax.mail.*에 있는 사용 가능한 Java API를 사용해야 합니다. 이러한 사용 가능한 API가 없는 경우 개발자는 Regex 또는 허용된 값의 허용된 값의 허용 목록으로 입력의 유효성을 검사해야 합니다. 이는 Runtime.exec(아래 코드 참조)을 사용하여 `mail` 명령을 실행하는 것보다 훨씬 낫습니다. 추가 명령 구분 기호 및 삽입 된 명령 후 배치는 주입 된 명령을 주입 지점을 따르는 모든 명령과 분리하기 때문에 일반적으로 유용합니다. 이렇게 하면 다음에 주입된 명령이 실행되지 않을 가능성이 줄어듭니다. 생성할 보고서에 대한 특정 기본 설정을 사용자에게 선택하라는 메시지가 표시되고 이러한 선택 항목이 명령줄 인수로 변환되어 응용 프로그램에 매개 변수로 전달되는 시나리오를 고려합니다. 즉, OS에서 실행되는 명령줄에 표시되는 문자열은 응용 프로그램에 입력으로 전달됩니다. 예를 들어 사용자가 표를 형식 형식으로 생성하여 ?format=-T가 응용 프로그램에 쿼리 매개 변수로 전달된다고 가정해 보겠습니다. 응용 프로그램이 다음과 같이 명령줄에 직접 ”format” 매개 변수값을 삽입한다고 가정해 보겠습니다: Veracode 웹 응용 프로그램 검색은 OS 명령을 포함하여 웹 응용 프로그램 결함을 안전하고 정확하며 신속하게 검색할 수 있습니다. 프로덕션 또는 사전 프로덕션 환경에서 웹 응용 프로그램을 실행할 수 있습니다.

사용자가 사이트에 대한 피드백을 제출할 수 있는 웹 사이트를 생각해 보입니다. 사용자는 자신의 이메일 주소와 피드백 메시지를 입력합니다. 그런 다음 서버 측 응용 프로그램은 피드백이 포함된 사이트 관리자에게 전자 메일을 생성합니다. 이렇게 하려면 제출된 세부 정보가 있는 메일 프로그램에 호출합니다. 예: 명령줄 주입 취약점을 탐지하는 방법에 대한 자세한 내용은 ”명령 주입테스트 방법”이라는 문서를 참조하십시오. 이러한 영향이 큰 공격은 기본적으로 악의적인 명령을 유효한 명령에 주입하는 것을 포함합니다. 메타 문자(&, |, //;) 일반적으로 명령을 병합하고 악의적인 OS 명령 주입을 만드는 데 사용됩니다. 에코 명령은 제공된 문자열을 출력에 에코하게 하며 일부 유형의 OS 명령 주입을 테스트하는 유용한 방법입니다. 및 문자는 셸 명령 구분 기호이므로 실행되는 것은 실제로 세 개의 별도 명령이 차례로 실행됩니다. 결과적으로 사용자에게 반환되는 출력은 명령 삽입 위험이 발생할 수 있으므로 다음 API의 사용에 유의하십시오. 명령 주입은 확인되지 않고 인코딩되지 않은 신뢰할 수 없는 입력이 실행을 위해 운영 체제(OS)로 전달되는 명령에 통합되는 응용 프로그램 취약성 클래스를 나타냅니다.

Command Injection 취약점은 악의적으로 조작된 입력이 디자이너의 의도를 왜곡하고 잠재적으로 기본 플랫폼의 완전한 손상으로 이어질 수 있기 때문에 치명적일 수 있습니다.