겉바속촉
[보안] OS Command Injection Reverse shell 본문
OS Command Injection Reverse shell
우선 그림으로 예시를 살펴보도록 할게요:)
공격자가 하고 싶은 것은
다음과 같이 텔넷같은 것을 이용하여 서버에 붙어서 명령어를 실행시키는 것입니다.
하지만 그 사이에 FireWall 같은 것들이 존재하기 때문에 불가능합니다.
방화벽이 존재하기 때문에 특정 포트 이외에는 못들어오게 막는 것입니다.
텔넷이나 ftp로 접속하려면 막아버리는 것입니다.
외부에서의 허용되지 않은 접근을 막는 것이쥬!!
내부에서 외부로 나가는 것은 어떨까요??
일반적으로 막지 않습니다.
그렇다면 회사 내부에 있는 서버가 웹서버라면 다음과 같은 구조가 되겠죠.
공격자는 위와 같은 구조를 이용합니다.
외부에서 내부로의 접속은 어렵기 때문에 역으로 내부에서 외부로의 접속은 가능하기 때문에
이 점을 이용하여 연결을 시도하는 것이죠.
내부에서 외부로 연결을 하도록 하는 것이 바로 Reverse Shell!!!!!!!
이때 사용하는 것이 바로 nc 입니다.
운영체제 명령어 삽입 = Command Injection
- 외부 입력값을 검증, 제한하지 않고 운영체제 명령어 또는 운영체제 명령어의 일부로 사용하는 경우 발생
- 의도하지 않은 명령어 또는 추가 명령어을 통해서 서버의 제어권을 탈취
@Attacker 가상머신
┌──(kali㉿kali)-[~]
└─$ nc -help
nc라는 것은 net cash 를 의미합니다.
http 요청 응답할 때에도 쓰이는 데요.
특정 호스트로 연결을 하고 나서 실행할 명령어들을 주고 받을 때 쓰는 프로그램이라고 보시면 됩니다.
┌──(kali㉿kali)-[~]
└─$ nc -help
[v1.10-46]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
@Bee-Box 가상머신
원활한 기능을 위해 bee-box 가상머신으로 가서 bug를 좀 수정해주고 올게요:)
다음과 같이 터미널 열어서 진행해주세요!!
@Bee-Box 가상머신에서 소스 코드를 수정해주는 것입니다.
bee@bee-box:~$ sudo gedit /var/www/bWAPP/commandi.php
다음 빨간펜으로 표시한 <pre> </pre> 를 추가해주세요.
화면이 예쁘게 나옵니다. 안해도 무방!!!
@Attacker 가상머신
이제 bee-box로 접속을 해보겠습니다.
Choose your bug에서 OS Command injection 을 골라주세요
이것은 nslookup을 제공하는 데요.
@Attacker 가상머신에서 Lookup 버튼을 클릭했을 때 결과는 다음과 같습니다.
그렇다면 이번에는
@Bee-Box 가상머신의 터미널에서 nslookup 명령어를 실행해볼게요.
bee@bee-box:~$ nslookup www.nsa.gov
Server: 192.168.137.2
Address: 192.168.137.2#53
Non-authoritative answer:
www.nsa.gov canonical name = nsa.gov.edgekey.net.
nsa.gov.edgekey.net canonical name = e16248.dscb.akamaiedge.net.
Name: e16248.dscb.akamaiedge.net
Address: 184.25.31.45
실행결과가 동일한 것을 알 수 있습니다.
이것을 통해서 사용자 화면에 입력한 도메인 www.nsa.gov 가 서버로 전달되어서
서버의 쉘에서 nslookup 명렬어의 파라미터로 사용되는 것과 동일하다는 것을 알 수 있쥬.
(1) 사용자 입력 화면
DNS lookup: www.nsa.gov [Lookup]
lookup 버튼을 누르면 서버에 전달이 되겠죠!!
(2) 사용자 화면 소스코드 분석을 통해 서버로 전달되는 내용을 유추
http://bee-box/bWAPP/commandi.php?target=www.nsa.gov&form=submit
target이라는 파라미터에 www.nsa.gov가 전달되고 있죠?!
(3) 서버 내부에의 처리를 유추
exec("nslookup www.nsa.gov");
(4) 추가 명령어를 실행할 수 있는 입력을 함께 전달해서 (3)번 과정이 맞는지 확인
◎ nslookup www.nsa.gov& ip a→ www.nsa.gov& ip a 라고 입력해주면 됩니다.
nslookup www.nsa.gov를 성공하면 ip a를 실행하라 라는 뜻!
◎ nslookup www.nsa.gov ; ip a→ www.nsa.gov; ip a 라고 입력해주면 됩니다.
nslookup www.nsa.gov를 수행하고 결과에 상관없이 ip a를 실행하라 라는 뜻!
두 가지 경우 모두 ip a 가 수행되고 있습니다.
즉, 4번 과정을 보고 알 수 있는 point가 있쥬.
외부에서 전달된 값이 내부의 쉘 명령을 실행하는 데 사용되고
그 과정에서 추가적인 명령어, 의도되지 않은 명령어가 있는 지 검증없이 사용된다는 것입니다.
이게 바로 운영체제 명령어 삽입 !!!!!!!!!
Command Injection이라고도 합니다.
'IT 일기 (상반기) > 네트워크 및 시스템 보안' 카테고리의 다른 글
[보안] VirtualBox 설치하기 (0) | 2021.03.03 |
---|---|
[보안] Reverse Shell 동작 원리 (0) | 2021.02.13 |
[보안] WebGoat_Malicious File Execution (2) | 2021.02.12 |
[보안] 경로조작 (0) | 2021.02.12 |
[보안] 파일 업로드 취약점 방어 (0) | 2021.02.12 |