https://dreamhack.io/wargame/challenges/44
특정 Host에 ping 패킷을 보내는 서비스에서 Command Injection을 통해 플래그를 획득하는 문제입니다. 플래그는 flag.py에 있습니다.
Host에 8.8.8.8을 입력하면 ping이 제대로 넘어감을 확인했고, 이 입력란에 Command Injection을 사용해야 함을 유추해볼 수 있었습니다.
8.8.8.8; cat flag.py 로 입력하였지만 형식에 맞지 않다며 오류메시지가 뜨고, ping이 수행되지 않았습니다.

f12를 눌러 개발자 도구를 켜주고, html 코드에서 위의 입력을 막는 코드를 찾아낼 수 있었습니다.
pattern="[A-Za-z0-9.]{5,20}" 라는 코드로, 이는 "영어/숫자/마침표로만 구성된 문자열이며, 길이는 5~20자여야 함"을 의미합니다. 이를 요소에서 제거해 우회합니다.
다시 8.8.8.8; cat flag.py 을 입력하여도 우리가 원하는 플래그 값이 나오지 않습니다.
이는 제공된 파이썬 코드의 cmd = f'ping -c 3 **"{host}"** 이 부분 때문입니다. 우리가 요청을 보낸 값이 큰 따음표 안에 한번에 들어가는 구조이기에 "8.8.8.8; cat flag.py" 로 한번에 인식됩니다. 즉, Command Injection이 성공되지 못하고 에러가 뜹니다.
따로 실행이 될 수 있도록 8.8.8.8"; cat flag.py" 형태로 넣어줍니다. 앞 8.8.8.8이 제대로 실행되고, 뒤의 우리가 원하는 ; cat flag.py" 공격을 따로 인식시키기 위해서 따음표가 필요합니다.

이렇게 입력했을 경우 cmd = f'ping -c 3 "8.8.8.8"; cat flag.py"" 로 실행됩니다.
첫번째 명령은 ping -c 3 "8.8.8.8" 으로 정상 수행되고, 두 번째 명령인 cat flag.py"" 은 큰따옴표 두 개는 빈 문자열로 무시되며 cat flag.py가 정상 실행됩니다.
최종적으로 flag.py의 내용을 출력해 플래그를 획득할 수 있었습니다.

Command Injection의 명령어 등, 기본 공격을 학습할 수 있었습니다.ping.8.8.8.8; cat flag.py were blocked due to HTML pattern validation.pattern attribute using DevTools to bypass client-side restrictions.ping -c 3 "{host}", preventing basic command injection.8.8.8.8"; cat flag.py" to escape the quotes and chain another command.ping -c 3 "8.8.8.8"; cat flag.py"", where the final "" is ignored.cat flag.py and obtained the flag.