일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Cryptography
- sql injection
- Authentication
- active recon
- php
- file upload
- php login page
- Recon
- privilege escalation
- php 파일 업로드하기
- THM
- BANDiT
- php To Do List
- php file upload
- active reconnaissance
- overthewire
- php 로그인 페이지 만들기
- access control
- 파일 업로드 취약점
- ssrf
- Cookie
- SQLi
- Leviathan
- War Game
- Reconnaissance
- Server Side Request Forgery
- over the wire
- tryhackme
- OS Command Injection
- FTZ
- Today
- Total
R's Hacking Daily Log
OS Command Injection (1) 본문
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 |