Command Injection [1]
DATE : 2023/9/26
OS Command Injection??
OS command injection이란,
어떤 application이 돌아가고 있는 대상 서버에서 공격자가 입력한 OS command를
실행해주는 취약점을 말한다.
어떻게 해서 shell을 얻은 다음, 명령어를 사용하는 것과는 다르게
동작하고 있는 서버에 명령어를 주입하는 형태의 공격이다.
이 취약점을 악용하게 되면 자신의 서버가 아닌 서버임에도 불구하고
공격자가 원하는 명령어의 결과를 얻을 수 있게 된다.
"명령어 입력하면 실행해줄게~ :)" 하고 서버가 명령어를 처리해주는 게 아니라
사용자로부터 데이터를 얻으려고 하는 과정에서
공격자가 적절히 섞어 넣은 명령어를 제대로 걸러내지 못하고 그대-로 서버에서 실행하게 되면서
발생하는 취약점이다.
예를 들어 쇼핑 application이 돌아가고 있는 서버에
어떤 상품의 재고를 알려 달라는 요청을 보내면 위와 같은 URL이 만들어진다고 한다.
서버에서는 parameter로 전달된 상품 ID & 지점 ID 값을 가지고
상품의 재고가 얼마나 남아있는 지 확인하기 위해 위와 같은 명령어를 실행한다고 상상해보자.
이때 명령어로 사용된 stockreport.pl은 productID & storeID 값을 필요로 한다.
만약 이런 상황에서 공격자가 다음과 같은 값을 productID에 넣으면 어떻게 될까?
원래 381이 들어가야 하는 자리에 대신 이 값을 넣게 되면 서버에서 실행하게 되는 명령어는
위와 같이 만들어진다.
여기서 사용되는 &(Ampersand) 기호는 command separator로
"&" 기준 앞 뒤에 있는 내용을 분리해 독립적인 명령어로 실행되도록 만들어주는 역할을 한다.
따라서 & echo hanhxx & 를 입력함으로써 총 3개의 명령어가 만들어지는 셈이다.
(1) stockreport.pl
: 필요로 하는 상품 ID & 지점 ID 값이 없기 때문에 에러
(2) echo hanhxx
: 성공적으로 "hanhxx"를 출력
(3) 29
: 29라는 명령어는 존재하지 않음으로 에러
이런 식으로 특정 기능을 수행하는 부분에 명령어를 주입하여
그 결과를 얻어낼 수 있는 취약점을 OS command injection이라 하고
주입하고자 하는 명령어 뒤에 어떤 내용이 실행되든 영향을 받지 않도록
명령어 뒤에 & 기호를 사용하는 것은 꽤 유용한 방법일 수 있다!
Last updated