728x90

Command Injection이란?

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'))

app.py 코드의 ping 함수이다. cmd에 저장된 명령을 /bin/sh에서 실행하는 구조다.

뒤에 명령을 이어서 입력하면 x.x.x.x 형식이 아니어서 요청이 가질 않는다. Burp Suite를 이용하여 이를 조작해야한다.

8.8.8.8만 입력 후 host 데이터를 수정한다.

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

명령어 형식이 위와 같기 때문에 문법에 맞게 완성시켜야한다. intercept한 패킷을 repeater로 보낸 후 send한다.

cmd는 ping -c 3 "8.8.8.8"; cat flag.py ""가 된다. 명령어1; 명령어2 이렇게 입력하면 명령어1 실행 후 명령어2를 실행한다. 즉 명령어1의 실행 성공 여부와 상관없이 순차적으로 실행한다. FLAG가 flag.py에 있다길래 cat 명령어로 출력했다.

FLAG가 나온다.

728x90

'dreamhack > Web Hacking' 카테고리의 다른 글

image-storage  (0) 2023.02.13
CSRF-2  (0) 2023.02.12
CSRF-1  (0) 2023.02.12
XSS-2  (0) 2023.02.12
devtools-sources  (0) 2023.02.11

+ Recent posts