
CMS 버전, 플러그인, 취약한 JavaScript 라이브러리, 이메일 주소 및 전화번호를 대상 웹사이트에서 탐지하고 정보 유출 위험을 점수화하는 웹 스캐너입니다.
먼저 docker run --rm -p 8000:80 siwecos/infoleak-scanner를 실행하세요.
브라우저를 열고 스캐너를 사용하세요: http://localhost/?url=<URL>
php5, curl 및 웹서버를 설치하세요:
sudo apt-get install apache2 php5 php5-curl
애플리케이션을 웹서버로 복사하세요:
cp -R . /var/www/html/
감지된 CMS에 대한 플러그인을 검색합니다. 가장 큰 목록(워드프레스)에는 980개의 다양한 플러그인이 포함되어 있습니다.
취약점이 있거나 가장 많이 사용되는 자바스크립트 라이브러리를 검색합니다.
이메일 주소를 검색합니다. 스팸 및/또는 사회 공학 공격에 유용합니다.
전화번호를 검색합니다. 사회 공학 공격 및/또는 사기 행위에 유용합니다.
| 발견 항목 | 점수 (0-100) | |---------------------+---------------| | CMS_ONLY | 100 | | CMS_VERSION | 96 | | CMS_VERSION_VULN | 아래 참조 | | PLUGIN_ONLY | 99 | | PLUGIN_VERSION | 96 | | PLUGIN_VERSION_VULN | 아래 참조 | | JS_LIB_ONLY | 99 | | JS_LIB_VERSION | 96 | | JS_LIB_VULN_VERSION | 아래 참조 | | EMAIL_FOUND | 96 | | NUMBER_FOUND | 98 |
다음과 같은 발견 사항이 있는 경우:
CMS_VERSION_VULN
PLUGIN_VERSION_VULN
JS_LIB_VULN_VERSION
전체 점수는 20으로 제한되고, 추가 취약점이 있을 때마다 전체 점수가 10씩 감소합니다. 즉, CMS_VERSION_VULN, PLUGIN_VERSION_VULN, JS_LIB_VULN_VERSION이 모두 반환되면 전체 점수는 0이 됩니다.
또한 WordPress 웹사이트에서 jQuery v1.12.4가 발견된 경우 일반적인 취약 라이브러리와 같은 방식으로 평가되지 않습니다. 이 발견은 점수 90을 받지만, 취약 라이브러리이므로 플레이스홀더는 여전히 JS_LIB_VULN_VERSION입니다.
POST 및 GET 요청을 통해 스캐너를 실행할 수 있습니다.
POST 요청으로 스캐너를 실행하려면 JSON 인코딩 형식으로 매개변수를 보내야 합니다:
{
"url": "string",
"dangerLevel": 0,
"callbackurls": [
"string"
],
"userAgent": "string"
}
url은 스캔할 URL을 정의합니다.
dangerLevel은 관련이 없습니다. 간단히 0으로 설정하세요.
callbackurls는 URL 배열입니다. 이 URL들은 스캐너의 결과를 받게 됩니다(POST로 전송됨).
userAgent는 스캔 시 전송할 사용자 정의 사용자 에이전트를 정의합니다.
GET 요청으로 스캐너를 실행하는 것은 훨씬 간단합니다. 주어진 URL로 애플리케이션을 실행하면 됩니다:
http://localhost/?url=<URL>
모든 스캔에서 발견 사항 없음:
{
"name": "InfoLeak-Scanner",
"version": "1.0.0",
"hasError": false,
"errorMessage": null,
"score": 100,
"tests": [
{
"name": "CMS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
},
{
"name": "CMS_PLUGINS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "warning",
"testDetails": null
},
{
"name": "JS_LIB",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "warning",
"testDetails": null
},
{
"name": "EMAIL_ADDRESS",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
},
{
"name": "PHONE_NUMBER",
"hasError": false,
"errorMessage": null,
"score": 100,
"scoreType": "info",
"testDetails": null
}
]
}
모든 스캔에서 하나 이상의 발견 사항:
{
"name": "InfoLeak-Scanner",
"version": "1.0.0",
"hasError": false,
"errorMessage": null,
"score": 20,
"tests": [
{
"name": "CMS",
"hasError": false,
"errorMessage": null,
"score": 96,
"scoreType": "info",
"testDetails": [
{
"placeholder": "CMS_VERSION",
"values": {
"cms": "wordpress",
"version": "4.9.6",
"node": "meta",
"node_content": "WordPress 4.9.6"
}
}
]
},
{
"name": "CMS_PLUGINS",
"hasError": false,
"errorMessage": null,
"score": 99,
"scoreType": "warning",
"testDetails": [
{
"placeholder": "PLUGIN_ONLY",
"values": {
"plugin": "contact-form-7",
"node": "href",
"node_content": "https://[...]/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.0.2"
}
}
]
},
{
"name": "JS_LIB",
"hasError": false,
"errorMessage": null,
"score": 0,
"scoreType": "warning",
"testDetails": [
{
"placeholder": "JS_LIB_VULN_VERSION",
"values": {
"js_lib_name": "jquery",
"js_lib_version": "1.12.4",
"node": "src",
"node_content": "https://[...]/wp-includes/js/jquery/jquery.js?ver=1.12.4"
}
}
]
},
{
"name": "EMAIL_ADDRESS",
"hasError": false,
"errorMessage": null,
"score": 96,
"scoreType": "info",
"testDetails": [
{
"placeholder": "EMAIL_FOUND",
"values": {
"email_adress": [
[
"[email protected]"
]
]
}
}
]
},
{
"name": "PHONE_NUMBER",
"hasError": false,
"errorMessage": null,
"score": 98,
"scoreType": "info",
"testDetails": [
{
"placeholder": "NUMBER_FOUND",
"values": {
"number": [
"1234-12 11 22-3",
"123-11 22 333-4"
]
}
}
]
}
]
}
특히 다음 환경에서 테스트됨:
Mozilla Firefox 45.7.0
PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Server version: Apache/2.4.10 (Debian)
Server built: Feb 24 2017 18:40:28
Server's Module Magic Number: 20120211:37
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
| 플레이스홀더 | 메시지 |
|---|
| SCAN CMS | |
| CMS_ONLY | 사용된 콘텐츠 관리 시스템 {cms} 감지됨. |
| CMS_VERSION | 사용된 콘텐츠 관리 시스템 {cms} 및 해당 버전 {version} 감지됨. |
| CMS_VERSION_VULN | 취약한 콘텐츠 관리 시스템 {cms} 버전 {version} 감지됨. |
| SCAN PLUGIN | |
| PLUGIN_ONLY | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 CMS 플러그인 {plugin} 감지됨. |
| PLUGIN_VERSION | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 CMS 플러그인 {plugin} 및 해당 버전 {plugin_version} 감지됨. |
| PLUGIN_VERSION_VULN | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 취약한 CMS 플러그인 {plugin} 및 해당 버전 {plugin_version} 감지됨. |
| SCAN JS | |
| JS_LIB_ONLY | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 사용된 자바스크립트 라이브러리 {js_lib_name} 감지됨. |
| JS_LIB_VERSION | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 사용된 자바스크립트 라이브러리 {js_lib_name} 및 해당 버전 {js_lib_version} 감지됨. |
| JS_LIB_VULN_VERSION | DOM 노드 {node}에서 노드 콘텐츠 {node_content}를 통해 취약한 자바스크립트 라이브러리 {js_lib_name} 및 해당 버전 {js_lib_version} 감지됨. |
| SCAN EMAIL | |
| EMAIL_FOUND | 이메일 주소 {email_address} 발견됨. |
| SCAN PHONE | |
| NUMBER_FOUND | 전화번호 {number} 발견됨. |
| ERRORS | |
| NO_SOURCE_CODE | 주어진 URL에 소스 코드가 없습니다. |
| INVALID_URL | 주어진 URL이 유효한 URL이 아닙니다. |
| INFOLEAK_LOCALHOST_SCAN_NOT_ALLOWED | localhost 스캔은 허용되지 않습니다. |
| NO_RESPONSE | 주어진 URL에 연결할 수 없습니다. |
| INFOLEAK_PORT_DISALLOWED | 주어진 URL에 허용되지 않은 포트가 포함되어 있습니다. |
| INFOLEAK_DONT_LEAK_USER_CREDS | 주어진 URL에 사용자 자격 증명이 포함되어 있습니다. |
| INFOLEAK_JSON_DECODE_ERROR | 주어진 POST 요청을 디코딩할 수 없습니다. |
| INFOLEAK_REDIRECT_ERROR | URL이 허용되지 않는 리디렉션을 수행합니다. |
| UNSUPPORTED_PROTOCOL | 웹사이트에서 지원되지 않는 프로토콜을 사용하고 있습니다. |
| FAILED_INIT | 스캐너가 연결 초기화에 실패했습니다. |
| URL_MALFORMAT | URL 형식이 올바르지 않습니다. |
| COULDNT_RESOLVE_HOST | 제공된 원격 호스트를 확인할 수 없습니다. |
| COULDNT_CONNECT | 호스트 또는 프록시에 연결하지 못했습니다. |
| REMOTE_ACCESS_DENIED | URL에 지정된 리소스에 대한 액세스가 거부되었습니다. |
| HTTP2_ERROR | HTTP2 프레이밍 계층에서 문제가 감지되었습니다. |
| TOO_MANY_REDIRECTS | 리디렉션이 너무 많습니다. |
| SEND_ERROR | 네트워크 데이터 전송 실패. |
| RECV_ERROR | 네트워크 데이터 수신 실패. |
| BAD_CONTENT_ENCODING | 인식할 수 없는 전송 인코딩입니다. |
| SSL_ENGINE_INITFAILED | SSL 엔진 초기화 실패. |
| TIMEOUT | 조건에 따라 지정된 제한 시간이 초과되었습니다. |
| CONV_FAILED | 문자 변환 실패. |
| REMOTE_FILE_NOT_FOUND | URL에 지정된 리소스가 존재하지 않습니다. |
| HTTP2_STREAM | HTTP/2 프레이밍 계층에서 스트림 오류 발생. |