명령 주입 취약점은 무엇입니까?

소개

명령 삽입 취약점은 가장 위험한 웹 취약점 중 하나입니다. 많은 보안 테스터와 현상금 사냥꾼 인해 대상 응용 프로그램에 만들 수있는 영향에 명령 주입 취약점을 찾는 것을 목표로하고 있습니다.

이 문서에서는 명령 주입 취약점에 대한 개요와 함께 결국 명령 주입으로 이어질 수있는 다양한 취약점에 대한 소개를 제공합니다.

명령 주입이란 무엇입니까?

명령 삽입은 공격자가 응용 프로그램이 실행되는 서버에서 임의의 운영 체제 명령을 실행할 수 있도록 하는 웹 취약점 유형입니다. 명령 삽입 취약점은 응용 프로그램에서 쉘 명령 또는 백그라운드에서 쉘 명령을 실행하는 스크립트를 사용할 때 발생합니다.

사용자 입력의 기본 64 인코딩을 수행하는 응용 프로그램의 다음 주소를 살펴보겠습니다.

http://target-site.com/encode.php?text=helloworld

이 사용자 입력은 인코딩에 가져 오기 매개 변수로 전달됩니다.파일.

다음은 인코딩의 소스 코드입니다.2015 년:

<?이 문제를 해결하는 방법은 다음과 같습니다. $입력.”/베이스 64″);

?>

이 함수는 운영 체제 명령을 실행하는 데 사용됩니다.

사용자가 시스템 명령을 입력에 추가하면 다음과 같은 운영 체제 명령으로 실행됩니다:

http://target-site.com/encode.php?text=test;id

다음은 사용자에게 반환되는 응답입니다:

testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK

As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:

$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d

uid=33(www-data) gid=33(www-data) groups=33(www-data)

As you can see, the encoded text is the output of the id command passed to the application.

Why are command injection vulnerabilities dangerous?

취약점의 명령 주입 클래스는 공격자에게 기본 운영 체제에 대한 제어 권한을 부여하기 때문에 가장 위험한 웹 취약점 중 하나로 간주됩니다. 이 컨트롤은 대상 서버가 네트워크의 다른 시스템과 가진 신뢰를 사용하여 내부 네트워크를 통한 측면 이동을 포함하여 여러 가지 방법으로 사용할 수 있습니다.

명령 실행으로 이어질 수 있는 취약점

명령 실행 취약점은 취약한 응용 프로그램이 최종 사용자가 응용 프로그램의 기본 기능을 확장하고 시스템 명령을 실행할 수 있게 할 때 발생하지만 응용 프로그램의 코드를 통해 명령을 실행할 수도 있습니다. 이를 일반적으로 코드 실행이라고 합니다. 코드 실행 취약점이 있더라도 최종 목표는 이를 통해 임의의 시스템 명령을 실행하는 것입니다. 이를 고려하여 명령 주입 또는 코드 실행을 통해 명령 실행으로 이어질 수있는 몇 가지 취약점에 대해 설명하겠습니다.

다음은 명령 주입 공격으로 이어질 수 있는 취약점 중 일부입니다.

임의 명령 주입

이전 예에서 설명한 것처럼 응용 프로그램은 사용자로부터 임의 시스템 명령을 직접 수신하고 기본 호스트에서 실행하는 응용 프로그램을 가질 수 있습니다. 명령 삽입 취약점의 클래스 예입니다.

임의 파일 업로드

응용 프로그램에서 사용자가 임의 파일 확장명을 가진 파일을 업로드할 수 있도록 허용하면 업로드된 파일이 웹루트에 배치될 때 명령 주입이 발생할 수 있습니다. 이것은 웹 응용 프로그램이 명령 주입에 취약해질 수있는 또 다른 일반적인 방법입니다.

안전하지 않은 직렬화

표준 명령 삽입 취약점 외에도 안전하지 않은 역 직렬화와 같은 다른 취약점을 사용하여 임의 명령 실행을 수행 할 수도 있습니다. 이는 서버 쪽 코드가 제대로 유효성을 검사하지 않고 사용자가 전달한 직렬화 된 콘텐츠를 역 직렬화한다는 사실을 활용합니다. 이 취약점의 안전하지 않은 직렬화 클래스로 일반적으로 알려져 있지만 대상 응용 프로그램이 클래스 경로에서 사용할 수있는 적절한 가젯과 같은 특정 요구 사항을 충족하는 경우 결국 명령 주입으로 이어집니다.

서버측 템플릿 삽입

사용자 입력이 안전하지 않은 방식으로 템플릿에 포함되고 서버에서 원격 코드가 실행될 때 발생합니다.외부 엔터티 삽입

외부 엔터티 취약점은 약하게 구성된 구문 분석기를 사용하여 사용자 제어 입력을 구문 분석하는 응용 프로그램에 대해 발생하는 또 다른 유형의 취약점입니다. 취약점은 일반적으로 서버에서 임의의 파일을 읽고 서비스 거부 공격을 유발합니다.

그러나 특정 조건이 충족되면 서버에서 명령 실행으로 이어질 수도 있습니다. 예를 들어 대상 취약 서버에서 래퍼를 사용하도록 설정하면 서버에서 임의의 명령을 실행할 수 있습니다.

이것은 명령 주입으로 이어질 수 있는 취약점의 전체 목록이 아니며 특정 조건을 충족할 때 명령 주입으로 이어질 수 있는 몇 가지 다른 취약점이 있습니다.

결론

서버에서 명령 실행으로 이어질 수 있는 여러 가지 취약점이 있음이 분명합니다. 개발자는 기본 인프라에 대한 모든 권한을 부여할 수 있으므로 이러한 취약점이 큰 영향을 미치기 때문에 이러한 명령 삽입 취약점을 알고 있어야 합니다.

이 시리즈의 다음 몇 가지 기사에서는 블라인드 명령 주입을 식별하고 활용하는 것과 같은 더 많은 명령 주입 관련 개념을 다룰 것입니다.

답글 남기기

이메일 주소는 공개되지 않습니다.

More: