기본적인 OS Command Injection 취약점을 탐지하는 과정은 이러한 취약점을 악용하는 과정과 동일하다. 다양한 방법으로 입력값을 조작해 명령어를 추가로 넣어본다. 추가한 명령어 때문에 출력이 평소와 달라지면, 이는 취약점이 존재한다고 볼 수 있다. 하지만 간단한 테스트 만으로는 취약점을 찾기 어려울 수 있다. 이럴 때 자동화 도구나 소스 코드를 직접 분석해 취약점을 찾아내야 한다. 이후, 점진적으로 페이로드를 조정하면서 Command Injection을 진행한다.
위 사진에서는 IP를 입력받아 해당 IP가 활성 상태인지 확인하는 Host Checker 기능을 사용할 수 있다. localhost의 IP인 127.0.0.1을 입력해보면 ping 명령어가 결과를 반환하게 된다.
여기서 직접 소스 코드를 확인할 수 없지만 출력 결과를 보면 입력한 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 |