어 나 정현욱.

[ DVWA ] Command Injection ( Low ) Write Up 본문

DVWA

[ DVWA ] Command Injection ( Low ) Write Up

정현욱 2023. 7. 12. 17:32

DVWA ( Damn Vulnerable Web Application )


취약점 진단 및 모의 해킹을 공부/실습할 수 있도록 만들어진 웹 애플리케이션

 

Command Injection

개발자가 의도치 않은 명령어를 실행하는 해킹 기법입니다.

이해하기 쉽도록 예시를 들어 설명하겠습니다.

특정 파일을 읽는 웹 서비스

서버에 저장된 특정 파일을 읽는 웹 서비스입니다.

위 그림에서는 list.txt 파일을 읽으려는 정상적인 요청을 하고 있습니다.

 

위 요청을 받고 서버에 실행되는 명령

위와 같은 요청을 받게 되면 서버에서는 cat list.txt 명령 실행 후에,

나온 결과 값을 사용자에게 반환해 줍니다.

Command Inject 시도하는 김경X씨..

위 그림은 Command Injection을 시도하는 모습입니다.

정상적인 입력값이 아닌 악의적인 구문을 입력하고 있습니다.

 

Command Injection 실행 결과

실행 결과를 보시면,

cat 1 명령어와 echo "Hi" 명령어 모두 실행된 모습을 볼 수 있습니다.

이와 같은 공격이 가능한 이유는
리눅스의 명령어 구분자( ; , 세미콜론 )를 이용했기 때문입니다.

 

리눅스는 세미콜론( ; )으로 구분되는 경우 세미콜론( ; )을 기준으로 명령어를 순차적으로 실행합니다.

따라서 다음과 같이 여러 가지 명령을 한 줄에 입력할 수 있습니다.

Write Up


Command Injection 페이지

Command Injection 페이지입니다.

해당 페이지에서는 ping 명령을 실행해 주는 웹 서비스를 운영하고 있습니다.

 

Source Code

간단하게 코드를 설명해 드리겠습니다.

 

1) POST 방식으로 ip 입력값을 받아와서 target 변수에 저장합니다.

2) if-else 조건문을 통해 DVWA 서버 환경에 맞는 ping 명령을 실행합니다. ( Windows OR Linux )

3) 실행 결과값을 웹 페이지에 보여줍니다.

 

위 코드에서는 입력값을 받을 때, 명령어 구분자( ; , 세미콜론 )를 필터링하지 않기 때문에

Command Injection 취약점이 발생하는 코드입니다.

 

먼저 정상적인 입력값을 넣어보겠습니다.

 

정상적인 입력값

개발자가 의도한 대로 ping 서비스가 잘 되는 것을 확인할 수 있습니다.

다음은 Command Injection을 시도해 보겠습니다.

 

Command Injection 시도

Command Injection을 성공한 모습입니다.

명령어 구분자( ; , 세미콜론 )를 통해 echo 명령어를 실행시켰습니다.

(마지막 줄에 Command Injection! 이라는 문자열이 보입니다.)

 

저는 echo 명령어를 사용해 실습을 진행하였지만
실제로 /etc/passwd 같은 중요한 파일을 읽는다면 굉장히 위험한 취약점입니다.

되도록 직접적인 시스템 명령어 호출을 자제하는 것이 좋지만,
부득이한 경우 특정 문자 필터링을 통해서도 Command Injection을 방어할 수 있습니다.
이 글이 Command Injection을 이해하는데 도움이 됐으면 좋겠습니다. 😉

( 실제 서비스되고 있는 환경에서 사용하시면 안 됩니다. )

'DVWA' 카테고리의 다른 글

[ DVWA ] Reflected Cross Site Scripting ( Low ) Write Up  (12) 2023.07.13
[ DVWA ] Brute Force ( Low ) Write Up  (10) 2023.07.10