Command Injection은 명령어를 삽입한다는뜻으로, 웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송하여
웹 서버에서 해당 명령어를 실행하도록 하는 공격.
Low 레벨
- IP를 입력받는 폼이 있는 형태
- ICMP 메시지를 돌려주는 기능을 갖는 것 같음.
- localhost와 127.0.0.1와 동일한 로컬 주소를 입력하니, 한글은 깨지지만, Ping Test의 결과값이 반환됨.
- Command Injection은 시스템 명령어를 악의적으로 조작하는 공격이므로, 쉘 메타캐릭터를 사용하여 입력값 조작.
- 메타 캐릭터는 &, &&, |, ||, 등등 특수목적을 갖는 캐릭터들을 의미함.
192.168.35.125&&dir
# 리눅스에서는 ; 를 사용하여 명령어 두개를 실행시켜줄 수 있음
# 윈도우에서는 &를 사용하여 명령어 두개를 실행시킬 수 있음.
# 윈도우에서는 &&사용할시and뜻을 갖으며 &&앞의 명령어가 성공해야, &&뒤의 값이 반환.
# |(파이프)는 윈도우가 리눅스 동일하게 명령어의 결과를 인자로 넘겨주는 역할을 함.
# 윈도우에서는 || 사용할시 or뜻을 갖으며 ||앞의 명령어가 실패해도, || 뒤의 값이 반환.
- 정상적인 IP주소 뒤에 메타캐릭터 &를 사용하여 커맨드 두개를 실행.
- 한글이 깨졌지만, 윈도우 cmd 에서 dir을 실행했을때의 결과와 동일한 구조를 갖고 있음.
&echo os_command_injection > inject.txt
를 입력하여 웹서버에 파일을 생성해 낼 수도있음. 굉장히 위험한 공격임.
- 리눅스에서는 nc로도 쉘을 연결시켜줄수도 있음.
- Low레벨의 소스코드사진임. 입력값을 검증하지않고, 그대로 shell_exec()함수를 실행하여 시스템명령어를 실행하는
구조를 갖고 있음.
Medium 레벨
- 일단 정상적으로 ping test는 실행됨을 확인.
- 음? Low레벨과 동일하게 입력했더니 인젝션 성공.
- Low 레벨과 동일하게 웹서버에 파일을 생성해줄수 있음.
- 소스코드 확인. 소스코드상에서는 블랙리스트로 메타캐릭터 && 와 ; 만 방어하고 있기 때문에, 필자가 입력한
& 는 방어를 못한 것으로 확신.
High 레벨
- High 레벨에서는 더 많은 메타캐릭터들이 블랙리스트에 추가된 것을 확인할 수있음.
- 하지만 개발자의 의도인지는 모르겠지만, '|'를 필터링하면될것을 '| '로 필터링하고있음. 그렇기 떄문에
|명령어로 뚫으면 될 것 같음.
- 이렇게 인젝션을 해줄 수 있음.
- 하지만 여기서, 이상한것을 발견했는데 127.0.0.1 || echo success_injection 입력하여 우회해줄수 있음.
- 블랙리스트에 분명히 or(||)가 추가되어있는데, 왜 실행되는지 모르겠음,...ㅇㅅㅇ...
Impossible 레벨
- Command Injection의 가장 좋은 대응방법은. 사용자의 입력값이 원래 의도에 맞는지 검사하는 것이다.
- 본래 목적이 Ping Test를 하기위해 만들어진 폼이므로, 진짜 IP인지 검사해주는 검증하는 과정이 들어가면 정말 좋다.
- 소스코드를 보면 입력Form으로 받은 IP가 진짜 . 를 기준으로 나누어져있는지 확인하고, . 으로 나누어진 4개의 필드가
숫자인지 확인함으로서 Command Injection으로부터 대응하고있음.
'WebHacking > DVWA' 카테고리의 다른 글
[DVWA] XSS (Reflected) (2) (0) | 2022.01.13 |
---|---|
[DVWA] XSS (Reflected) (0) | 2022.01.13 |
[DVWA] SQL Injection (3) (0) | 2022.01.12 |
[DVWA] SQL Injection (Blind) (0) | 2022.01.12 |
[DVWA] SQL Injection (2) (0) | 2022.01.12 |