
Vulmap은 웹 취약점 스캔 및 검증 도구로, webapps에 대한 취약점 스캔을 수행할 수 있으며 취약점 검증 기능을 갖추고 있습니다.
Vulmap은 웹 취약점 스캔 및 검증 도구로, 웹 애플리케이션에 대한 취약점 스캔 및 취약점 활용 기능을 제공합니다. 현재 지원하는 웹 앱은 activemq, flink, shiro, solr, struts2, tomcat, unomi, drupal, elasticsearch, fastjson, jenkins, nexus, weblogic, jboss, spring, thinkphp 등입니다.
Vulmap은 취약점 스캔과 검증(취약점 이용)을 하나로 결합하여, 테스터가 취약점 발견 후 신속하게 다음 작업을 수행할 수 있도록 크게 돕습니다. 이 도구는 효율성과 편의성을 추구합니다.
효율성: 점진적인 개발 과정에서 배치 스캔, Fofa, Shodan 배치 스캔을 도입했으며, 멀티스레딩을 지원하고 기본적으로 코루틴을 활성화하여 많은 자산을 빠르게 스캔합니다.
편의성: 취약점 발견 즉시 활용 가능하며, 많은 자산 스캔 결과를 다양한 형식으로 출력할 수 있습니다.
Vulmap 0.8 버전부터는 dismap 식별 결과 파일을 직접 취약점 스캔할 수 있습니다
-f output.txt
운영 체제에 python3가 설치되어 있어야 하며, python3.8 이상을 권장합니다.
# git 또는 릴리스 페이지에서 소스 코드 다운로드
git clone https://github.com/zhzyker/vulmap.git
# 필요한 python 종속성 설치
pip3 install -r requirements.txt
# Linux & MacOS & Windows
python3 vulmap.py -u http://example.com
Fofa Api && Shodan Api && Ceye 설정
Fofa 또는 Shodan을 사용하려면 vulmap.py에서 설정 정보를 수정해야 합니다:
# xxxxxxxxxx를 fofa 이메일로 변경
globals.set_value("fofa_email", "xxxxxxxxxx")
# xxxxxxxxxx를 fofa 키로 변경
globals.set_value("fofa_key", "xxxxxxxxxx")
# xxxxxxxxxx를 자신의 shodan 키로 변경
globals.set_value("shodan_key", "xxxxxxxxxx")
# xxxxxxxxxx를 자신의 도메인으로 변경
globals.set_value("ceye_domain","xxxxxxxxxx")
# xxxxxxxxxx를 자신의 ceye 토큰으로 변경
globals.set_value("ceye_token", "xxxxxxxxxx")
기존 라이선스 LICENSE에 다음 면책 조항을 추가합니다. 기존 라이선스와 충돌하는 경우 면책 조항이 우선합니다.
본 도구는 허가되지 않은 상업적 용도로 사용할 수 없으며, 2차 개발 후 허가되지 않은 상업적 용도로 사용할 수 없습니다.
본 도구는 합법적으로 인가된 기업 보안 구축 활동에만 사용됩니다. 본 도구를 사용하여 검사할 때는 해당 행위가 현지 법률 및 규정을 준수하고 충분한 승인을 받았는지 확인해야 합니다.
본 도구를 사용하는 과정에서 불법 행위가 발생할 경우, 사용자는 그에 따른 모든 책임을 부담해야 하며, 당사는 어떠한 법적 책임이나 연대 책임도 지지 않습니다.
본 도구를 사용하기 전에 각 조항을 주의 깊게 읽고 완전히 이해하시기 바랍니다. 제한, 면책 조항 또는 귀하의 중요한 권리에 영향을 미치는 기타 조항은 굵은 글씨, 밑줄 등의 형태로 강조 표시될 수 있습니다. 본 계약의 모든 조항을 충분히 읽고 완전히 이해하며 동의하지 않는 경우 본 도구를 사용하지 마십시오. 본 도구를 사용하거나 기타 명시적 또는 묵시적 방식으로 본 계약에 동의하는 경우, 본 계약을 읽었으며 그 구속에 동의한 것으로 간주됩니다.
YouTube: https://www.youtube.com/watch?v=g4czwS1Snc4
Bilibili: https://www.bilibili.com/video/BV1Fy4y1v7rd
Gif:
선택적 인수:
-h, --help 이 도움말 메시지를 표시하고 종료합니다.
-u URL, --url URL 대상 URL (예: -u "http://example.com")
-f FILE, --file FILE 대상 목록 파일을 선택합니다. 각 url은 줄로 구분되어야 합니다. (예: -f "/home/user/list.txt")
--fofa keyword fofa API를 사용한 배치 스캔 (예: --fofa "app=Apache-Shiro")
--shodan keyword shodan API를 사용한 배치 스캔 (예: --shodan "Shiro")
-m MODE, --mode MODE 모드는 "poc"와 "exp"를 지원합니다. 이 옵션을 생략하면 기본적으로 "poc" 모드로 진입합니다.
-a APP [APP ...] 웹 앱을 지정합니다 (예: "weblogic"). 지정하지 않으면 자동으로 지문 인식합니다.
-c CMD, --cmd CMD 원격 명령 실행 시 실행할 명령을 사용자 정의합니다. 기본값은 echo 무작위 md5입니다.
-v VULN, --vuln VULN 취약점을 활용합니다. 취약점 번호를 지정해야 합니다. (예: -v "CVE-2019-2729")
-t NUM, --thread NUM 스캔 스레드 수, 기본값은 10스레드입니다.
--dnslog server dnslog 서버 (hyuga, dnslog, ceye). 기본값은 자동 폴링입니다.
--output-text file 스캔 결과를 txt 파일로 출력합니다. (예: "result.txt")
--output-json file 스캔 결과를 json 파일로 출력합니다. (예: "result.json")
--proxy-socks SOCKS socks 프록시 사용 (예: --proxy-socks 127.0.0.1:1080)
--proxy-http HTTP http 프록시 사용 (예: --proxy-http 127.0.0.1:8080)
--user-agent UA User-Agent를 사용자 정의할 수 있습니다.
--fofa-size SIZE fofa api 호출 자산 수, 기본값 100, (1-10000) 사용 가능.
--delay DELAY 지연 시간, 요청 간격, 기본값 0초.
--timeout TIMEOUT 타임아웃 시간, 기본값 5초.
--list 지원되는 취약점 목록을 표시합니다.
--debug exp 모드에서 request와 responses를 표시하고, poc 모드에서 스캔 중인 취약점 목록을 표시합니다.
--check 대상 활성 여부 감지 (on/off), 기본값은 on입니다.
# 모든 취약점 poc 테스트, -a all을 지정하지 않으면 기본적으로 지문 인식 활성화
python3 vulmap.py -u http://example.com
# 사이트에서 struts2 취약점만 검사
python3 vulmap.py -u http://example.com -a struts2
# http://example.com:7001에 대해 WebLogic의 CVE-2019-2729 취약점 활용
python3 vulmap.py -u http://example.com:7001 -v CVE-2019-2729
python3 vulmap.py -u http://example.com:7001 -m exp -v CVE-2019-2729
# list.txt의 url들을 배치 스캔
python3 vulmap.py -f list.txt
# 스캔 결과를 result.json으로 내보내기
python3 vulmap.py -u http://example.com:7001 --output-json result.json
# fofa API 호출로 배치 스캔
python3 vulmap.py --fofa app=Apache-Shiro
+-------------------+------------------+-----+-----+-------------------------------------------------------------+
| 대상 유형 | 취약점 이름 | Poc | Exp | 영향 버전 && 취약점 설명 |
+-------------------+------------------+-----+-----+-------------------------------------------------------------+
| Apache ActiveMQ | CVE-2015-5254 | Y | N | < 5.13.0, 역직렬화 원격 코드 실행 |
| Apache ActiveMQ | CVE-2016-3088 | Y | Y | < 5.14.0, http put&move 웹쉘 업로드 |
| Apache Druid | CVE-2021-25646 | Y | Y | < 0.20.1, apache druid 콘솔 원격 코드 실행 |
| Apache Flink | CVE-2020-17518 | Y | N | < 1.11.3 또는 < 1.12.0, 업로드 경로 순회 |
| Apache Flink | CVE-2020-17519 | Y | Y | 1.5.1 - 1.11.2, 'jobmanager/logs' 경로 순회 |
| Apache OFBiz | CVE-2021-26295 | Y | N | < 17.12.06, rmi 역직렬화 임의 코드 실행 |
| Apache OFBiz | CVE-2021-29200 | Y | N | < 17.12.07, rmi 역직렬화 임의 코드 실행 |
| Apache OFBiz | CVE-2021-30128 | Y | Y | < 17.12.07, 역직렬화 원격 명령 실행 |
| Apache Shiro | CVE-2016-4437 | Y | Y | <= 1.2.4, shiro-550, rememberme 역직렬화 rce |
| Apache Solr | CVE-2017-12629 | Y | Y | < 7.1.0, runexecutablelistener rce & xxe, rce만 포함 |
| Apache Solr | CVE-2019-0193 | Y | N | < 8.2.0, dataimporthandler 모듈 원격 코드 실행 |
| Apache Solr | CVE-2019-17558 | Y | Y | 5.0.0 - 8.3.1, velocity response writer rce |
| Apache Solr | time-2021-0318 | Y | Y | 전체 버전, apache solr 임의 파일 읽기 |
| Apache Solr | CVE-2021-27905 | Y | N | 7.0.0-7.7.3, 8.0.0-8.8.1, replication handler ssrf |
| Apache Struts2 | S2-005 | Y | Y | 2.0.0 - 2.1.8.1, cve-2010-1870 parameters interceptor rce |
| Apache Struts2 | S2-008 | Y | Y | 2.0.0 - 2.3.17, debugging interceptor rce |
| Apache Struts2 | S2-009 | Y | Y | 2.1.0 - 2.3.1.1, cve-2011-3923 ognl interpreter rce |
| Apache Struts2 | S2-013 | Y | Y | 2.0.0 - 2.3.14.1, cve-2013-1966 ognl interpreter rce |
| Apache Struts2 | S2-015 | Y | Y | 2.0.0 - 2.3.14.2, cve-2013-2134 ognl interpreter rce |
| Apache Struts2 | S2-016 | Y | Y | 2.0.0 - 2.3.15, cve-2013-2251 ognl interpreter rce |
| Apache Struts2 | S2-029 | Y | Y | 2.0.0 - 2.3.24.1, ognl interpreter rce |
| Apache Struts2 | S2-032 | Y | Y | 2.3.20-28, cve-2016-3081 rce (method를 통해 수행 가능) |
| Apache Struts2 | S2-045 | Y | Y | 2.3.5-31, 2.5.0-10, cve-2017-5638 jakarta multipart rce |
| Apache Struts2 | S2-046 | Y | Y | 2.3.5-31, 2.5.0-10, cve-2017-5638 jakarta multipart rce |
| Apache Struts2 | S2-048 | Y | Y | 2.3.x, cve-2017-9791 struts2-struts1-plugin rce |
| Apache Struts2 | S2-052 | Y | Y | 2.1.2 - 2.3.33, 2.5 - 2.5.12 cve-2017-9805 rest plugin rce |
| Apache Struts2 | S2-057 | Y | Y | 2.0.4 - 2.3.34, 2.5.0-2.5.16, cve-2018-11776 namespace rce |
| Apache Struts2 | S2-059 | Y | Y | 2.0.0 - 2.5.20, cve-2019-0230 ognl interpreter rce |
| Apache Struts2 | S2-061 | Y | Y | 2.0.0-2.5.25, cve-2020-17530 ognl interpreter rce |
| Apache Struts2 | S2-devMode | Y | Y | 2.1.0 - 2.5.1, devmode 원격 코드 실행 |
| Apache Tomcat | Examples File | Y | N | 전체 버전, /examples/servlets/servlet |
| Apache Tomcat | CVE-2017-12615 | Y | Y | 7.0.0 - 7.0.81, put 메소드로 모든 파일 업로드 |
| Apache Tomcat | CVE-2020-1938 | Y | Y | 6, 7 < 7.0.100, 8 < 8.5.51, 9 < 9.0.31 모든 파일 읽기 |
| Apache Unomi | CVE-2020-13942 | Y | Y | < 1.5.2, apache unomi 원격 코드 실행 |
| CoreMail | time-2021-0414 | Y | N | Coremail 구성 정보 노출 취약점 |
| Drupal | CVE-2018-7600 | Y | Y | 6.x, 7.x, 8.x, drupalgeddon2 원격 코드 실행 |
| Drupal | CVE-2018-7602 | Y | Y | < 7.59, < 8.5.3 (8.4.8 제외) drupalgeddon2 rce |
| Drupal | CVE-2019-6340 | Y | Y | < 8.6.10, drupal core restful 원격 코드 실행 |
| Ecology | time-2021-0515 | Y | Y | <= 9.0, e-cology oa workflowservicexml rce |
| Elasticsearch | CVE-2014-3120 | Y | Y | < 1.2, elasticsearch 원격 코드 실행 |
| Elasticsearch | CVE-2015-1427 | Y | Y | < 1.3.7, < 1.4.3, elasticsearch 원격 코드 실행 |
| Exchange | CVE-2021-26855 | Y | N | 2010 2013 2016 2019, microsoft exchange server ssrf |
| Exchange | CVE-2021-27065 | Y | Y | 2010 2013 2016 2019, exchange 임의 파일 쓰기 |
| Eyou Email | CNVD-2021-26422 | Y | Y | eyou 이메일 시스템 원격 명령 실행 |
| F5 BIG-IP | CVE-2020-5902 | Y | Y | < 11.6.x, f5 big-ip 원격 코드 실행 |
| F5 BIG-IP | CVE-2021-22986 | Y | Y | < 16.0.1, f5 big-ip 원격 코드 실행 |
| Fastjson | VER-1224-1 | Y | Y | <= 1.2.24 fastjson parse object 원격 코드 실행 |
| Fastjson | VER-1224-2 | Y | Y | <= 1.2.24 fastjson parse object 원격 코드 실행 |
| Fastjson | VER-1224-3 | Y | Y | <= 1.2.24 fastjson parse object 원격 코드 실행 |
| Fastjson | VER-1247 | Y | Y | <= 1.2.47 fastjson autotype 원격 코드 실행 |
| Fsatjson | VER-1262 | Y | Y | <= 1.2.62 fastjson autotype 원격 코드 실행 |
| Jenkins | CVE-2017-1000353 | Y | N | <= 2.56, LTS <= 2.46.1, jenkins-ci 원격 코드 실행 |
| Jenkins | CVE-2018-1000861 | Y | Y | <= 2.153, LTS <= 2.138.3, 원격 코드 실행 |
| Laravel | CVE-2018-15133 | N | Y | 5.5.x <= 5.5.40, 5.6.x <= 5.6.29, laravel get app_key rce |
| Laravel | CVE-2021-3129 | Y | N | ignition <= 2.5.1, laravel debug 모드 원격 코드 실행 |
| Nexus OSS/Pro | CVE-2019-7238 | Y | Y | 3.6.2 - 3.14.0, 원격 코드 실행 취약점 |
| Nexus OSS/Pro | CVE-2020-10199 | Y | Y | 3.x <= 3.21.1, 원격 코드 실행 취약점 |
| Node.JS | CVE-2021-21315 | Y | N | systeminformation < 5.3.1, node.js 명령 주입 |
| Oracle Weblogic | CVE-2014-4210 | Y | N | 10.0.2 - 10.3.6, weblogic ssrf 취약점 |
| Oracle Weblogic | CVE-2016-0638 | Y | N | 10.3.6.0, 12.2.1-3, t3 역직렬화 rce |
| Oracle Weblogic | CVE-2017-3506 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.0-2, weblogic wls-wsat rce |
| Oracle Weblogic | CVE-2017-10271 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.1-2, weblogic wls-wsat rce |
| Oracle Weblogic | CVE-2018-2894 | Y | Y | 12.1.3.0, 12.2.1.2-3, 역직렬화 모든 파일 업로드 |
| Oracle Weblogic | CVE-2018-3191 | Y | N | 10.3.6.0, 12.1.3.0, 12.2.1.3, t3 역직렬화 rce |
| Oracle Weblogic | CVE-2019-2725 | Y | Y | 10.3.6.0, 12.1.3.0, weblogic wls9-async 역직렬화 rce |
| Oracle Weblogic | CVE-2019-2890 | Y | N | 10.3.6.0, 12.1.3.0, 12.2.1.3, t3 역직렬화 rce |
| Oracle Weblogic | CVE-2019-2729 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.3 wls9-async 역직렬화 rce |
| Oracle Weblogic | CVE-2020-2551 | Y | N | 10.3.6.0, 12.1.3.0, 12.2.1.3-4, wlscore 역직렬화 rce |
| Oracle Weblogic | CVE-2020-2555 | Y | Y | 3.7.1.17, 12.1.3.0.0, 12.2.1.3-4.0, t3 역직렬화 rce |
| Oracle Weblogic | CVE-2020-2883 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.3-4, iiop t3 역직렬화 rce |
| Oracle Weblogic | CVE-2020-14882 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.3-4, 14.1.1.0, console rce |
| Oracle Weblogic | CVE-2020-2109 | Y | Y | 10.3.6.0, 12.1.3.0, 12.2.1.3-4, 14.1.1.0, 비인가 jndi |
| QiAnXin | time-2021-0410 | Y | Y | qianxin ns-ngfw netkang next generation firewall front rce |
| RedHat JBoss | CVE-2010-0738 | Y | Y | 4.2.0 - 4.3.0, jmx-console 역직렬화 모든 파일 업로드 |
| RedHat JBoss | CVE-2010-1428 | Y | Y | 4.2.0 - 4.3.0, web-console 역직렬화 모든 파일 업로드 |
| RedHat JBoss | CVE-2015-7501 | Y | Y | 5.x, 6.x, jmxinvokerservlet 역직렬화 모든 파일 업로드 |
| RuiJie | time_2021_0424 | Y | N | 계정 비밀번호 획득, 백그라운드 rce |
| Saltstack | CVE-2021-25282 | Y | Y | < 3002.5, saltStack 임의 파일 쓰기 취약점 |
| Spring Data | CVE-2018-1273 | Y | Y | 1.13 - 1.13.10, 2.0 - 2.0.5, spring data commons rce |
| Spring Cloud | CVE-2019-3799 | Y | Y | 2.1.0-2.1.1, 2.0.0-2.0.3, 1.4.0-1.4.5, 디렉토리 순회 |
| Spring Cloud | CVE-2020-5410 | Y | Y | < 2.2.3, < 2.1.9, 디렉토리 순회 취약점 |
| ThinkPHP | CVE-2019-9082 | Y | Y | < 3.2.4, thinkphp rememberme 역직렬화 rce |
| ThinkPHP | CVE-2018-20062 | Y | Y | <= 5.0.23, 5.1.31, thinkphp rememberme 역직렬화 rce |
| Vmware vCenter | time-2020-1013 | Y | N | <= 6.5u1, vmware vcenter 임의 파일 읽기 (cve 아님) |
| Vmware vCenter | CVE-2021-21972 | Y | Y | 7.0 < 7.0U1c, 6.7 < 6.7U3l, 6.5 < 6.5U3n, 모든 파일 업로드 |
| VMware vRealize | CVE-2021-21975 | Y | N | <= 8.3.0, vmware vrealize operations manager api ssrf |
+-------------------+------------------+-----+-----+-------------------------------------------------------------+
docker build -t vulmap/vulmap .
docker run --rm -ti vulmap/vulmap python vulmap.py -u https://www.example.com