
그냥 웹페이지에 command를 입력해 flag를 얻는 문제이다.

웹서버에 들어갔더니 이런 화면이 나왔다. 상단 탭에 Ping을 눌러보았다.

Host 아래에 있는 InputBox에서는 힌트로 8.8.8.8이라는 글자가 있었다. 8.8.8.8을 입력해서 Ping! 버튼을 눌러보았다.

뒤로가서 8.8.8.8이 아닌 문자열을 입력해보겠다.

문자열을 입력하면 요청한 형식과 일치시키세요.라는 알림이 뜨면서 Ping 버튼이 눌러지지 않는다. 개발자모드를 열어 해당 알림을 안 뜨게 설정해보았다.
<input type="text" class="form-control" id="Host" placeholder="8.8.8.8" name="host" pattern="[A-Za-z0-9.]{5,20}" required="">
개발자모드를 열어 해당 InputBox의 코드를 보았더니 pattern="[A-Za-z0-9.]{5,20}"라고 하는 정규표현식이 있었다. 해당 코드를 지우고 문자열을 입력하여 Ping 버튼을 눌러보겠다.

Error가 발생하였다. 여기서 중요한건 ping -c 3 "dddd" 이다.
Ping 버튼을 입력하면 내부에서는 ping -c 3 "[InputBox에서 입력한 내용]"을 실행시켜 결과를 Result 화면에 뛰운다는 거다. 그러면 세미콜론을 이용해 명령어를 두 번 이상 실행시킬 수 있다면 flag 값을 얻을 수 있다.

다시 돌아가 8.8.8.8";"ls를 입력하였다. 주의할 점은 위에 더블 쿼터이다. 무작정 8.8.8.8;ls를 입력하면 ping -c 3 "8.8.8.8;ls"가 입력되면서 error를 발생시키기 때문에 더블 쿼터를 신경써야 한다.

다행히 flag값이 담겨있는 파일은 바로 보였다. 따라서 그냥 InputBox에다가 8.8.8.8";cat "flag.py를 입력하면 flag값이 나올 것 같다!

flag값이 나왔다. 이 문제의 핵심은 세미콜론으로 명령어를 한줄에 중복 실행할 수 있다는 점과 더블 쿼터인 것 같다.
flag : DH{pingpingppppppppping!!}