
CVE-2016-1240 익스플로잇 및 패치
1.가상 머신에 Tomcat 7을 설치합니다
sudo apt-get install tomcat7
2.첫 번째 단계가 실패하면 J**DK_DIRS="/usr/lib/jvm/java-8-oracle"**를 설정하고 “export JAVA_HOME=/usr/lib/jvm/java-8-oracle” 및 “export CATALINA_HOME=/usr/share/tomcat7” 명령문을 추가한 다음 Tomcat 7을 다시 설치합니다.
3.Tomcat 사용자의 초기 비밀번호를 설정합니다
sudo passwd tomcat7
4.Tomcat 사용자에게 로그인 셸을 할당합니다
sudo usrmod -s /bin/bash tomcat7
5.Tomcat 7 사용자 셸에 접속합니다
ssh tomcat7@localhost
1.Tomcat7 사용자 셸을 통해 /tmp에 익스플로잇 스크립트 attack.sh를 생성한 다음 익스플로잇 코드를 실행 가능하게 만듭니다.
touch attack.sh
chmod +x attack.sh
2.익스플로잇 코드를 실행합니다
./attack.sh
3.공격 결과를 확인하기 위해 Tomcat 서버를 다시 시작합니다.
sudo service tomcat7 restart
4.사용자의 ID를 확인합니다
id
그러면 공격이 성공해야 하며 euid는 0, 즉 root가 되어야 합니다.
# Run the catalina.sh script as a daemon
set +e
touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
chown $TOMCAT7_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
start-stop-daemon --start -b -u "$TOMCAT7_USER" -g "$TOMCAT7_GROUP" \
-c "$TOMCAT7_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
-x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
status="$?"
set +a -e
return $status
위 코드는 권한 상승의 핵심입니다. 루트 권한으로 실행되므로 우리가 원하는 모든 작업을 수행할 수 있습니다. 그런 다음 catalina.out의 소유자를 tomcat7 사용자로 변경해야 합니다. Tomcat을 재부팅한 후에는 catalina가 가리키는 파일을 읽을 수 있습니다.
구체적으로, Tomcat이 재시작되면 catalina.out의 소유자를 Tomcat 사용자로 변경하며, 이 재시작은 Linux init에 의해 호출됩니다. Linux init을 이용하면 심볼릭 링크를 사용하여 임의 파일의 소유자를 tomcat 사용자로 변경할 수 있습니다. catalina.out을 임의의 파일에 심볼릭 링크하면 catalina.out에 의해 부여되는 root 권한으로 시스템의 모든 파일을 조작할 수 있습니다. 이것은 전형적인 DLL 하이재킹 악용입니다.