
자동화된 NoSQL 데이터베이스 열거 및 웹 애플리케이션 익스플로잇 도구.
NoSQLMap는 NoSQL 데이터베이스와 NoSQL을 사용하는 웹 애플리케이션의 기본 설정 취약점을 감사하고, 주입 공격을 자동화하며, 데이터베이스에서 데이터를 유출하거나 복제하기 위한 오픈 소스 Python 도구입니다.
원래 @tcsstool이 제작했으며 현재는 @codingo_가 유지 관리하고 있습니다. NoSQLMap이라는 이름은 Bernardo Damele과 Miroslav Stampar의 인기 있는 SQL 인젝션 도구 sqlmap에 대한 경의로 지어졌습니다. 이 도구의 개념은 Defcon 21에서 Ming Chow의 훌륭한 발표 "Abusing NoSQL Databases"를 기반으로 확장되었습니다.

NoSQL(원래 "non SQL", "non relational" 또는 "not only SQL"을 의미) 데이터베이스는 관계형 데이터베이스에서 사용되는 테이블 관계 이외의 방식으로 데이터를 저장하고 검색하는 메커니즘을 제공합니다. 이러한 데이터베이스는 1960년대 후반부터 존재했지만, Facebook, Google, Amazon.com 같은 Web 2.0 기업들의 요구에 의해 21세기 초반에 인기가 급증하면서 "NoSQL"이라는 명칭을 얻었습니다. NoSQL 데이터베이스는 빅 데이터 및 실시간 웹 애플리케이션에서 점점 더 많이 사용되고 있습니다. NoSQL 시스템은 SQL 유사 질의 언어를 지원할 수 있음을 강조하기 위해 "Not only SQL"이라고도 불립니다.
현재 이 도구의 공격은 MongoDB와 CouchDB에 초점을 맞추고 있지만, 향후 릴리스에서는 Redis 및 Cassandra와 같은 다른 NoSQL 기반 플랫폼에 대한 추가 지원이 계획되어 있습니다.
Debian 또는 Red Hat 기반 시스템에서는 setup.sh 스크립트를 root로 실행하여 NoSQLMap의 종속성을 자동으로 설치할 수 있습니다.
사용 기능에 따라 다릅니다:
일반적인 Python 설치 시 기본적으로 사용할 수 있어야 하는 다양한 기타 라이브러리가 필요합니다. 상황에 따라 다를 수 있으니 스크립트를 확인하세요.
python setup.py install
또는 다음 명령어로 Docker 이미지를 빌드할 수 있습니다:
docker build -t nosqlmap .
또는 Docker-compose를 사용하여 Nosqlmap을 실행할 수 있습니다:
docker-compose build
docker-compose run nosqlmap
다음으로 시작:
python NoSQLMap
NoSQLMap은 공격 구축을 위해 메뉴 기반 시스템을 사용합니다. NoSQLMap을 시작하면 다음 메인 메뉴가 표시됩니다:
1-Set options (do this first)
2-NoSQL DB Access Attacks
3-NoSQL Web App attacks
4-Scan for Anonymous MongoDB Access
x-Exit
옵션 설명:
1. Set target host/IP-The target web server (i.e. www.google.com) or MongoDB server you want to attack.
2. Set web app port-TCP port for the web application if a web application is the target.
3. Set URI Path-The portion of the URI containing the page name and any parameters but NOT the host name (e.g. /app/acct.php?acctid=102).
4. Set HTTP Request Method (GET/POST)-Set the request method to a GET or POST; Presently only GET is implemented but working on implementing POST requests exported from Burp.
5. Set my local Mongo/Shell IP-Set this option if attacking a MongoDB instance directly to the IP of a target Mongo installation to clone victim databases to or open Meterpreter shells to.
6. Set shell listener port-If opening Meterpreter shells, specify the port.
7. Load options file-Load a previously saved set of settings for 1-6.
8. Load options from saved Burp request-Parse a request saved from Burp Suite and populate the web application options.
9. Save options file-Save settings 1-6 for future use.
x. Back to main menu-Use this once the options are set to start your attacks.
옵션을 설정한 후 메인 메뉴로 돌아가 NoSQL 관리 포트나 웹 애플리케이션 중 어떤 것을 공격하는지에 따라 DB 접근 공격 또는 웹 애플리케이션 공격을 선택하세요. 나머지 도구는 "마법사" 방식으로 상당히 직관적이지만, 질문이나 제안 사항이 있으면 [email protected]으로 이메일을 보내거나 Twitter @codingo_에서 저를 찾아주세요.
이 리포지토리에는 NoSQLMap을 테스트하기 위한 의도적으로 취약한 웹 애플리케이션도 포함되어 있습니다. 이 애플리케이션을 실행하려면 Docker가 설치되어 있어야 합니다. 그런 다음 /vuln_apps 디렉토리에서 다음 명령어를 실행할 수 있습니다.
docker-compose build && docker-compose up
완료되면 https://127.0.0.1:8080/index.html을 방문하여 취약한 애플리케이션에 접근할 수 있습니다.
CLI는 스크립팅도 가능합니다. 다음은 NoSQLMap을 사용하여 vuln_apps의 취약점을 탐지하는 예제 스크립트입니다:
$ echo "1. Account Lookup (acct.php)"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/acct.php?acctid=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n
$ echo "2. User Data Lookup (userdata.php) - JavaScript Injection"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/userdata.php?usersearch=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n
$ echo "3. Order Data Lookup (orderdata.php) - JavaScript Injection"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/orderdata.php?ordersearch=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n