[Dreamhack] command-injection-1

sy46·2023년 6월 25일
0

dreamhack

목록 보기
7/20

Level 1 - command injection 1

개인적으로 생각지도 못한 풀이 방법이었다..
@APP.route('/ping', methods=['GET', 'POST'])
def ping():
    if request.method == 'POST':
        host = request.form.get('host')
        cmd = f'ping -c 3 "{host}"'
        try:
        .
        .

먼저 위의 코드를 살펴보면,
/ping 페이지에서 host를 받아온다는 것을 알 수 있다.
그리고 받아온 host를 이용해 풀이를 진행하면 되는데,
문제는 ping페이지에 존재했다.

아래 코드는 ping.html의 일부이다.

<div class="col-md-6 form-group">
      <label for="Host">Host</label>
      <input type="text" class="form-control" id="Host" placeholder="8.8.8.8" name="host" 
      pattern="[A-Za-z0-9.]{5,20}" required>
    </div>

현재 pattern이 존재하므로
; | 와 같은 메타문자를 어떻게 우회할 수 있을지 생각해야했다.

그 결과 그냥 개발자모드에서 해당 pattern 부분을 지운 후
코드를 작성해주면 되었다..

위는 pattern을 지운 모습이고,
아래는 지운 후 파일을 검색하는 코드이다. sql injection처럼 뒤에 코드를 추가해주면 되는데, 더블쿼터에 주의하면서 코드를 작성해주어야한다.
이후 찾은 flag.py 파일을 이용해 FLAG 값을 구하면 된다.

해결하고보니 정말 간단하게 풀 수 있었는데,
F12에서 코드를 수정한 후 진행할 수 있다는 점은 생각지도 못해서 재미있었다.

0개의 댓글