본문 바로가기

Hack The Box CBBH

Command Injection - Detection

기본적인 OS Command Injection 취약점을 탐지하는 과정은 이러한 취약점을 악용하는 과정과 동일하다. 다양한 방법으로 입력값을 조작해 명령어를 추가로 넣어본다. 추가한 명령어 때문에 출력이 평소와 달라지면, 이는 취약점이 존재한다고 볼 수 있다. 하지만 간단한 테스트 만으로는 취약점을 찾기 어려울 수 있다. 이럴 때 자동화 도구나 소스 코드를 직접 분석해 취약점을 찾아내야 한다. 이후, 점진적으로 페이로드를 조정하면서 Command Injection을 진행한다.

Hack The Box - Command Injection 실습

위 사진에서는 IP를 입력받아 해당 IP가 활성 상태인지 확인하는 Host Checker 기능을 사용할 수 있다. localhost의 IP인 127.0.0.1을 입력해보면 ping 명령어가 결과를 반환하게 된다.

Localhost IP 입력

여기서 직접 소스 코드를 확인할 수 없지만 출력 결과를 보면 입력한 IP가 ping 명령에 전달되고, 단일 패킷만 전송되었음을 알 수 있어서 명령어는 다음과 같을 수 있다.

ping -c 1 [INPUT]

만약 입력값이 ping 명령에 사용되기 전에 필터링이나 이스케이프 처리되지 않았다면, 임의의 명령어를 추가로 주입할 수 있다. 필터링을 확인하기 위해 추가적인 테스트를 진행해보려 한다.


추가 명령어를 삽입하려면 다음과 같은 연산자를 사용할 수 있다.

연산자 문자 URL Encoding 실행되는 명령어
Semicolon ; %3b 둘 다
New Line \n %0a 둘 다 
Background & %26 둘 다 (두 번째 출력이 일반적으로 먼저 표시됨)
Pipe/파이프 | %7c 둘 다 (두 번째 출력만 표시됨)
AND && %26%26 둘 다 (첫 번째 명령어가 성공한 경우)
OR || %7c%7c 두 번째(첫 번째가 실패한 경우)
Sub-Shell `` %60%60 둘 다(리눅스만)
Sub-Shell $() %24%28%29 둘 다(리눅스만)

위 연산자를 사용해 새로운 명령을 삽입하면, 원래 명령과 함께 또는 독립적으로 명령이 실행된다. 예를 들어, IP 주소를 입력한 후 위의 연산자를 사용하고 새로운 명령어를 사용하면 된다.

리눅스와 macOS에서만 작동하는 특정 연산자인 ``, $()도 있다. 이는 Windows에서는 작동하지 않는다.

위의 연산자는 웹 애플리케이션의 언어, 프레임워크, 백엔드 서버와 관계없이 Command Injection에 사용할 수 있다.

참고로, 는 Windows CMD에서 작동하지 않을 수 있지만, Windows PowerShell에서는 작동한다.

'Hack The Box CBBH' 카테고리의 다른 글

CBBH[Certified Bug Bounty Hunter]  (0) 2025.02.05
XSS - Intro [HTB]  (0) 2025.01.13
Command Injection - Injecting Commands  (1) 2024.12.09
OS Command Injection  (0) 2024.12.09
[Intro] Command Injection  (0) 2024.12.02