앞 서 Host Checker 웹 애플리케이션이 Command Injection에 취약할 수 있다는 점과 이를 악용하기 위한 삽입 방법에 대해 알아봤다. 이제 ; 를 통해 Command Injection을 사용하려 한다.
https://securitas.tistory.com/27
Command Injection - Detection
기본적인 OS Command Injection 취약점을 탐지하는 과정은 이러한 취약점을 악용하는 과정과 동일하다. 다양한 방법으로 입력값을 조작해 명령어를 추가로 넣어본다. 추가한 명령어 때문에 출력이 평
securitas.tistory.com
127.0.0.1 IP 뒤에 세미콜론을 추가하고 명령어 whoami를 추가해 삽입 페이로드를 작성할 수 있다. 최종적으로 해당 웹 애플리케이션에서 실행되는 명령어는 다음과 같다.
ping -c 1 127.0.0.1;whoami
먼저, 해당 명령어가 실제로 실행되는지 확인해보면
┌──(kali㉿Acricks)-[~]
└─$ ping -c 1 127.0.0.1;whoami
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.014 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.014/0.014/0.014/0.000 ms
kali
위 결과를 보면 ping과 whoami가 실행되고, 각각의 출력이 표시된 것을 확인할 수 있다. 이제 이 페이로드를 Host Checker 웹 애플리케이션에서 적용할 수 있다.
Host Checker 웹 애플리케이션에 127.0.0.1;whoami 페이로드를 입력하면 애플리케이션이 입력값을 거부하며 오류 메시지를 출력한다. 이는 입력값이 IP 형식이어야만 허용되는 것을 확인할 수 있다. 그러나 오류 메시지를 보면 백엔드가 아닌 프런트엔드에서 발생한 것으로 보인다. F12 개발자 도구 Network 탭에서 Check 버튼을 눌렀을 때 Request가 발생하지 않았다. 이는 이 검사가 프론트엔드에서 이루어지는 것을 확인할 수 있다.


프론트엔드 검증은 사용자가 악의적인 페이로드를 보내지 못하도록 막기 위한 방어책이다. 그러나 개발자들은 프론트엔드에서만 입력 검증을 수행하고, 백엔드에서는 검증이나 필터링을 하지 않는 경우가 많다. 이는 다음과 같은 이유로 발생한다.
- 프론트엔드와 백엔드가 다른 팀에서 개발됨
- 프론트엔드 검증만으로 충분하다고 잘못 판단
하지만 프론트엔드 검증만으로는 Injection 공격을 막기에 충분하지 않다 이는 HTTP 요청을 직접 백엔드로 보냄으로써 쉽게 우회할 수 있다.
HTTP 요청을 백엔드로 보낼 때, 이를 수정할 수 있는 가장 쉬운 방법은 웹 프록시(Ex: Burp Suite)를 사용하는 것이다.

해당 Request를 보면 ip=127.0.0.1로 되어 있는데, ip=127.0.0.1;whoami로 변경해서 보내면 된다.

그러고 Forward를 누르게되면 결과가 달라진 것을 확인할 수 있다.

위 사진에서 ping 명령어와 whoami 명령어 출력이 포함된 것을 확인할 수 있다. 이는 삽입된 명령어가 실행된 것을 확인할 수 있다. 이처럼 프론트엔드 검증만으로는 명령어 삽입을 막기에 충분하지 않으며, HTTP 요청을 직접 조작해 손쉽게 우회할 수 있다.
'Hack The Box CBBH' 카테고리의 다른 글
| CBBH[Certified Bug Bounty Hunter] (0) | 2025.02.05 |
|---|---|
| XSS - Intro [HTB] (0) | 2025.01.13 |
| Command Injection - Detection (0) | 2024.12.09 |
| OS Command Injection (0) | 2024.12.09 |
| [Intro] Command Injection (0) | 2024.12.02 |