본문 바로가기

드림핵 워게임

[드림핵/워게임] command-injection-1

https://dreamhack.io/wargame/challenges/44

 

command-injection-1

특정 Host에 ping 패킷을 보내는 서비스입니다. Command Injection을 통해 플래그를 획득하세요. 플래그는 flag.py에 있습니다. Reference Introduction of Webhacking

dreamhack.io

 

 

 

input에 ip를 넣어 주면 ping을 보내 주는 사이트이다.

 

 

플래그가 flag.py에 있으므로 cat을 이용해 까 주려고 했지만, 요청한 형식과 일치 시키라고 뜬다.

개발자 도구를 열고 sources를 확인해 보면

<input type="text" class="form-control" id="Host" placeholder="8.8.8.8" name="host" pattern="[A-Za-z0-9.]{5,20}" required>

이런 코드가 있는 것을 볼 수 있다.

 

더보기

<input> 태그의 pattern 속성

pattern = "[A-Za-z0-9.]{5,20}"

 

[A-Za-z0-9.]: 대소문자 알파벳, 숫자, 마침표에 대응

{5, 20}: 최소 길이와 최대 길이를 나타냄. 따라서 입력 문자열의 길이는 5~20이 되어야 함

 

<input> 태그의 required 속성

- 폼 데이터가 서버로 제출되기 전에 반드시 채워져 있어야 하는 입력 필드를 명시

- 명시하지 않으면 자동으로 false 값을 가짐

 

input 태그의 pattern 속성으로 명령어가 입력될 수 없게 되어 있다.

이는 개발자 도구 -> console에서 document.designMode = 'on' 을 입력해 주고, elements에 들어가서 pattern 부분만 지워 주면 된다.

'on'이라고 뜨면 elements를 수정할 수 있는 상태가 된다.
pattern 속성만 지운 모습

 

이렇게 코드를 수정해 주고 다시 입력으로 127.0.0.1; cat flag.py를 넣어 주면

 

다음과 같이 에러가 뜬다.

 

ping -c 3 "127.0.0.1; cat flag.py" 이런 식으로 커맨드가 들어가니 입력을 127.0.0.1"; cat flag.py" 이렇게 넣어 주면 될 것 같다.

 

 

플래그가 잘 뜨는 모습이다.