이번에는 Command Injection에 대하여 알아보고 간단히 실습을 진행해보겠습니다.
Command Injection은 보기와 같이 사용자로부터 받은 입력을 내부적으로 시스템 명령어의 인자로서 사용하는 서비스에서 악의적으로 ";" 등의 키워드를 통해 다른 시스템 명령어를 덧붙여 실행시키는 공격을 말합니다.
위 예시와 같이 사용자로 부터 ip주소를 입력을 받아서 내부적으로 ping 명령어를 실행시키는 서비스가 있습니다.
여기에 ";" 키워드를 붙혀서 추가적인 시스템 명령어인 ls를 붙혀 보내면 놀랍게도 ls 명령어의 실행결과도 반환되는 것을 볼 수 있습니다.
1. low 단계 : 대응 없음.
2. medium 단계 :
// Remove any of the charactars in the array (blacklist).
$substitutions = array(
'&&' => '',
';' => '',
);
위와 같이 입력에서 '&&', ';' 문자들을 blacklist에 추가하여 삭제함으로써 공격에 대응하고 있습니다.
3. high 단계 :
// Split the IP into 4 octects
$octet = explode(".", $target);
// Check IF each octet is an integer
if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4) )
high 단계에서는 입력이 실제로 ip주소 형식을 띠는지 면밀하게 검사하기 위해 '.'을 기준으로 분할하여 숫자인지 확인하는 방식으로 공격에 대응하고 있는 것을 볼 수 있습니다.
Reference :
rjswn0315.tistory.com/150
PS.
읽어주셔서 감사합니다!!
개인적으로 처음 접하는 부분들을
혼자 공부하면서 진행하다 보니 부족한 점이 많습니다.
항상 정확하고 좋은 글을 쓰려고 노력하겠지만
부족한 부분을 발견하시면 언제든지 말씀해주시면 감사하겠습니다!!