Command Injection [1]

DATE : 2023/9/26

OS Command Injection??

OS command injection이란,

어떤 application이 돌아가고 있는 대상 서버에서 공격자가 입력한 OS command를

실행해주는 취약점을 말한다.

어떻게 해서 shell을 얻은 다음, 명령어를 사용하는 것과는 다르게

동작하고 있는 서버에 명령어를 주입하는 형태의 공격이다.

OS command

OS는 operating system의 약자로 "운영체제"를 의미한다.

흔히 linux 터미널에서 사용하는 ls, ifconfig, whoami, pwd 등의 명령어가 이에 해당한다.

이 취약점을 악용하게 되면 자신의 서버가 아닌 서버임에도 불구하고

공격자가 원하는 명령어의 결과를 얻을 수 있게 된다.

"명령어 입력하면 실행해줄게~ :)" 하고 서버가 명령어를 처리해주는 게 아니라

사용자로부터 데이터를 얻으려고 하는 과정에서

공격자가 적절히 섞어 넣은 명령어를 제대로 걸러내지 못하고 그대-로 서버에서 실행하게 되면서

발생하는 취약점이다.


예를 들어 쇼핑 application이 돌아가고 있는 서버에

https://insecure-website.com/stockStatus?productID=381&storeID=29

어떤 상품의 재고를 알려 달라는 요청을 보내면 위와 같은 URL이 만들어진다고 한다.

서버에서는 parameter로 전달된 상품 ID & 지점 ID 값을 가지고

stockreport.pl 381 29

상품의 재고가 얼마나 남아있는 지 확인하기 위해 위와 같은 명령어를 실행한다고 상상해보자.

이때 명령어로 사용된 stockreport.pl은 productID & storeID 값을 필요로 한다.

만약 이런 상황에서 공격자가 다음과 같은 값을 productID에 넣으면 어떻게 될까?

& echo hanhxx &

원래 381이 들어가야 하는 자리에 대신 이 값을 넣게 되면 서버에서 실행하게 되는 명령어는

stockreport.pl & echo hanhxx & 29 

위와 같이 만들어진다.

여기서 사용되는 &(Ampersand) 기호는 command separator로

"&" 기준 앞 뒤에 있는 내용을 분리해 독립적인 명령어로 실행되도록 만들어주는 역할을 한다.

따라서 & echo hanhxx & 를 입력함으로써 총 3개의 명령어가 만들어지는 셈이다.

(1) stockreport.pl

: 필요로 하는 상품 ID & 지점 ID 값이 없기 때문에 에러

(2) echo hanhxx

: 성공적으로 "hanhxx"를 출력

(3) 29

: 29라는 명령어는 존재하지 않음으로 에러

이런 식으로 특정 기능을 수행하는 부분에 명령어를 주입하여

그 결과를 얻어낼 수 있는 취약점을 OS command injection이라 하고

주입하고자 하는 명령어 뒤에 어떤 내용이 실행되든 영향을 받지 않도록

명령어 뒤에 & 기호를 사용하는 것은 꽤 유용한 방법일 수 있다!

Last updated