본문 바로가기

Hack The Box CBBH

Command Injection - Detection

728x90
반응형

기본적인 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에서는 작동한다.
728x90
반응형

'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