R's Hacking Daily Log

OS Command Injection (1) 본문

Port Swigger/Command Injection

OS Command Injection (1)

hanhxx 2023. 6. 1. 21:32

What is OS command injection?

오늘부터 살펴볼 OS command injection [= command injection or shell injection]

서버에서 돌아가는 applicaiton에 Command를 주입하는 공격으로 여기서 말하는 command는

흔히 Terminal에서 사용되는 Command라 생각하면 된다. 

 

 

이해를 돕기 위해 Command injection 예시를 하나 살펴보도록 하자. 

:) 상품 재고를 조회하는 쇼핑 application

:) 상품 재고를 확인하기 위해서는 ProductID & StoreID를 활용 

 

 

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

사용자가 상품과 지점을 선택하면 위와 같은 url이 만들어지게 된다. 

서버에서는 이 url에서 얻은 productID & storeID로 재고를 조회하여 결과를 알려준다.

 

 

stockreport.pl 381 29

 

위의 내용은 서버에서 만든 query라 보면 되고 여기서 사용된 stockreport.pl는 하나의 command인 셈이다.

 

 

상황을 정리해 보자면,

:) url로 ProductID & StoreID를 얻은 서버는 stockreport.pl command를 이용해서 재고를 조회한다. 

:) stockreport.pl command는 productID & storeID, 총 2개의 argument를 사용하는 명령어인 듯하다. 

 

 

이제 전반적인 상황을 파악했으니 Command injection을 대입해 보자. 

Command injection은 이미 언급했듯이 서버에서 동작하게 될 command를 주입하는 건데...

그래서 그게 뭔데 싶을 것이다. (g.g)

 

 

 

& echo aiwefwlguh &

공격자가 ProdectID 대신 위의 내용을 입력한다면 서버에서 실행하는 command는 아래와 같다. 

 

stockreport.pl & echo aiwefwlguh & 29

서버에서 이 command를 실행하게 되면 크게 3개의 결과가 나오게 된다. 

 

 

1) stockreport.pl

stockreport.pl은 원래대로라면 381 & 29라는 두 개의 ID를 argument로 사용하는 command인데

위의 경우, stockreport.pl command만 입력되고 argument가 없기 때문에 에러가 발생할 것이다.

 

2) aiwefwlguh

두 번째로 동작하는 command는 echo

echo command가 정상적으로 동작했다면 echo 뒤에 나온 문자열이 그대로 적용된 결과가 나올 것이다.

 

3) 29 : command error 

원래는 29가 stockreport.pl command의 두 번째 argument로 들어가는 값인데 

prodeuctID 자리에 & echo command &가 들어가면서 하나의 command처럼 인식되어 버린 것이다.

그런데 29라는 명령어는 존재하지 않기 때문에 해당 명령어가 존재하지 않는다는 내용의 에러가 출력될 것이다. 

 

 

** 여기서 &는 여러 명령어를 작성할 때 병렬적으로 입력할 수 있도록 

각 명령어를 구분해 주는 separator 역할을 한다. 

 

** separator로 &에 더불어 &&, |, ||, ; 등도 사용할 수 있다.

 

따라서 공격자가 입력한 command injection으로 인해 서버에서 실행되는 command가 

총 3개로 늘어나게 된 것이다. 

 

 

여기서는 echo command를 이용했지만 command injection 취약점이 있는 서버에 

cat /etc/passwd 같이 임의의 파일 내용을 출력하는 명령어를 주입하는 경우도 상상해 볼 수 있을 것이다. 

 

'Port Swigger > Command Injection' 카테고리의 다른 글

Access Control - Lab (2)  (0) 2023.06.13
OS Command Injection (3) & Lab (3)  (0) 2023.06.04
OS Command Injection (2) & Lab (2)  (0) 2023.06.03
OS Command Injection (1) - Lab (1)  (0) 2023.06.02
Command Injection  (0) 2022.11.17
Comments