운영체제 명령 실행(OS Command Execution) 의미와 점검방법
개념
운영체제 명령 실행이란 웹에서 시스템 명령어인 system(), exec() 등을 실행시킬 수 있는 환경을 제공한 대상에게 실행되는 취약점이다.
사용자 입력값에 대한 필터링이 제대로 이루어지지 않을 때, 공격자가 원하는 운영체제 시스템 명령어 실행이 가능하다. 부적절하게 권한이 변경되거나 시스템 동작에 악영향을 줄 수 있다.
리눅스 다중 명령어
명령 ; 명령 | 명령어 순차적으로 한 번에 실행한다. |
명령 && 명령 | 명령어 순차적으로 실행하지만, 명령어 실행에 실패할 경우 뒤에 오는 명령어는 실행하지 않는다. |
명령 || 명령 | 명령어 순차적으로 실행하지만, 명령어 실행에 성공하면 뒤에 오는 명령어는 실행하지 않는다. |
명령 | 명령 | 처음 명령어 수행 결과를 뒤에 명령어의 표준 입력으로 전달한다. |
PHP 운영체제 명령어 실행 함수
shell_exec(cmd) | 실행된 명령어의 전체 결과를 반환 |
passthru(cmd) | 실행된 명령어 전체를 바이너리 데이터로 반환 |
exec(cmd) | 실행된 명령어의 마지막 줄만 반환 |
system(cmd) | 실행된 명령어 전체 결과 문자열로 반환 |
점검방법
운영체제 명령어 삽입 공격을 수행할 부분 찾기
예를 들어 서버에 IP 응답을 확인하기 위해서 IP 주소를 입력하여 ping을 보낸다.
정상적이라면 ping의 결과를 리턴해주지만 운영체제 명령어를 이용하여 ping을 보낸다면 공격자가 원하는 사용자 시스템에 대한 정보를 얻어올 수 있다.
ping 172.16.0.130; ls(현재 디렉터리 목록)
- linux 기준: URL parameter에 ls, cat, dir 등의 명령어 삽입
- Windows 기준: URL parameter에 dir, ipconfig 등의 명령어 삽입
보안대책
* 서버 내부로 시스템 명령어를 전달시키지 않도록 필터링 구현
* 외부에서 전달되는 값을 검증 없이 시스템 내부 명령어로 사용하지 않거나 악용될 수 있는 특수문자나 구문 등을 필터링할 수 있는 규칙을 적용("|", "&", ";", "`" 등)
* 외부 명령어 필요한 경우, 미리 지정해두고 외부 입력에 따라 선택적 사용
참고
'Security > WebHacking' 카테고리의 다른 글
[bWAPP] 운영체제 명령 실행 / OS Command Injection 풀이 (299) | 2023.01.05 |
---|---|
[bWAPP] 칼리리눅스(Kali Linux)에 bWAPP 설치 / bee-box 설치 (282) | 2023.01.05 |
[웹취약점] 포맷스트링(Format String) 기본지식 및 공격방법 (454) | 2023.01.04 |
[WebGoat] Buffer Overflows / Off-by-One Overflows 풀이 (440) | 2022.12.28 |
[HackCTF Web] 가위바위보 (파일 업로드 취약점) (440) | 2021.02.03 |