본문 바로가기

Study records/Web hacking

커맨드 인젝션 공격

커맨드 인젝션(command injection)은 명령어를 삽입한다는 뜻으로,  웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송하여 웹 서버에서 해당 명령어를 실행하도록 하는 공격이다.

 

;를 입력하여 ls 명령을 추가로 실행한다

 

 

ping 명령어 인자인 IP 주소는 어떤 값이 되더라도 상관없으며, 아예 IP 주소를 입력하기 않고, ;만 추가하여 ;ls와 같이 입력하는 것도 가능하다.

앞의 명령이 실패하더라도 뒤에 추가한 ls 명령은 여전히 실행된다

 

 

DVWA에서의 ls 명령 실행

 

/etc/passwd 파일의 내용 출력

 

이와 같이, ; 뒤에 명령어를 추가함으로써 원격 호스트를 대상으로 시스템 명령어를 자유자재로 실행할 수 있다. 이것이 기본적인 커맨드 인젝션 공격 방버이다. 리눅스를 대상으로 파라미터에 ; 등의 특수문자와 함께 시스템 명령어를 입력하여 커맨드 인젝션 공격을 시도할 수 있고, 윈도우의 경우 &&를 사용한다.

 

웹 애플리케이션을 실행하는 사용자 권한 확인

 

DVWA 웹 애플리케이션이 www-data 사용자 권한으로 실행되고 있다는 의미다. 그런데 이 사용자 권한으로는 관리자(루트) 권한이 필요한 명령은 사용할 수가 없다.

 

 

커맨드 인젝션 공격 대응

공격 대응 방안으로 가장 좋은 방법은 직접적으로 시스템 명령어를 호출하지 않는 것이다. 소스코드 레벨에서는 exec()이나 system()과 같은 직접적으로 명령어를 실행하는 함수를 사용하지 않고, 대신 프로그래밍 언어 및 라이브러리에서 자체적으로 제공하는 함수를 사용하는 것을 권장한다. 시스템 명령어를 사용할 수밖에 없는 경우에는 사용자 입력값이 명령어에서 사용될 수 없도록 확실히 점검해야 한다.

'Study records > Web hacking' 카테고리의 다른 글

[Beebox] HTML 인젝션  (0) 2024.06.20
크로스 사이트 스크립팅 공격  (1) 2024.05.25
SQL 인젝션 공격  (1) 2024.05.24
취약한 인증 공격  (0) 2024.05.24
정보 수집과 대응 방법  (0) 2024.05.23