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 |