2021/01/05 - [프로젝트/DVWA 실습] - DVWA 실습 #3 - Command Injection
문제 해결 방법
High 단계에서는 Medium 단계와 동일하게 관련 문자를 필터링하여 커맨드 인젝션을 방지하고 있으나 '|'를 '| '로 착각하여 치환하는 바람에 보안 취약점이 발생하게 되었다.
지난 포스트에 언급했듯이 '|'는 파이프라인 문자로 왼쪽 명령어의 출력을 오른쪽 명령어에 입력으로 넘겨주는 역할을 한다. '|'를 사이에 두고 두 명령어는 'cat /etc/passwd | grep root'처럼 주로 공백을 두지만 'cat /etc/passwd|grep root'처럼 공백 없이 사용할 수도 있기 때문에 '| '가 아닌 '|' 자체를 필터링해야 이를 방어할 수 있다.
물론 제일 좋은 방법은 이런 시스템 커맨드를 사용하지 않고 관련 라이브러리를 사용하는 것이다. 예를 들어 ping 명령을 대신하는 소켓 라이브러리를 사용한다던지 디렉토리를 생성하기 위해 mkdir() 함수를 사용한다던지 등 대체할 수 있는 방법은 충분히 많으며 불가피하게 시스템 커맨드를 사용해야 하는 경우 Impossible 단계처럼 최대한 필터링 및 입력값 검증을 수행해야 한다.
'프로젝트 > DVWA 실습' 카테고리의 다른 글
DVWA 실습 #4-1 - CSRF(low) (0) | 2021.01.06 |
---|---|
DVWA 실습 #4 - CSRF (0) | 2021.01.06 |
DVWA 실습 #3-2 - Command Injection(medium) (0) | 2021.01.05 |
DVWA 실습 #3-1 - Command Injection(low) (0) | 2021.01.05 |
DVWA 실습 #3 - Command Injection (0) | 2021.01.05 |