
bbot v3.0.2
ํด์ปค๋ฅผ ์ํ ์ฌ๊ท์ ์ธํฐ๋ท ์ค์บ๋. ๐งก
BEEยทbot์ Spiderfoot์์ ์๊ฐ์ ๋ฐ์ ๋ค๋ชฉ์ ์ค์บ๋๋ก, Recon(๋ฆฌ์ฝ), Bug Bounties(๋ฒ๊ทธ ๋ฐ์ดํฐ), ASM์ ์๋ํํ๋๋ก ์ ์๋์์ต๋๋ค!
https://github.com/blacklanternsecurity/bbot/assets/20261699/e539e89b-92ea-46fa-b893-9cde94eebf81
VivaGraphJS๋ก ์๊ฐํํ ์ค์๊ฐ BBOT ์ค์บ
์ค์น
# stable version
pipx install bbot
# bleeding edge (dev branch)
pipx install --pip-args '\--pre' bbot
Docker๋ฅผ ํฌํจํ ๋ ๋ง์ ์ค์น ๋ฐฉ๋ฒ์ Getting Started๋ฅผ ์ฐธ์กฐํ์ธ์
2.x์์ ์ ๊ทธ๋ ์ด๋ํ์๋์? BBOT 3.0์๋ CLI, ํ๋ฆฌ์ , ๋ชจ๋, ์ด๋ฒคํธ ๋ฐ Python API์ ๋ํ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ ๊ทธ๋ ์ด๋ ์ ์ 2.x โ 3.0 ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋(์์ค)๋ฅผ ํ์ธํ์ธ์.
์๋ ํ: BBOT์ DNS ๋ฆฌ์กธ๋ฒ(blastdns)๋
/etc/resolv.conf์ ๋ฆฌ์กธ๋ฒ๋ง๋ค ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์์ฑํฉ๋๋ค. ํํฐ๋ง๋์ง ์์ ๋ฆฌ์กธ๋ฒ๋ฅผ ๋ ์ถ๊ฐํ๋ฉด ์ค์บ ์๋๊ฐ ํฌ๊ฒ ๋นจ๋ผ์ง๋๋ค. ์์ธํ ๋ด์ฉ์ ์ํ resolv.conf์ ํ๊ณผ ์๋ น์ ์ฐธ์กฐํ์ธ์.
์์ ๋ช ๋ น์ด
1) ์๋ธ๋๋ฉ์ธ ํ์ธ๋
ํจ์๋ธ API ์์ค์ ํ๊ฒ๋ณ ์๋ธ๋๋ฉ์ธ ๋ณํ์ ์ด์ฉํ ์ฌ๊ท์ DNS ๋ฌด์ฐจ๋ณ ๋์ (brute-force).
# find subdomains of evilcorp.com
bbot -t evilcorp.com -p subdomain-enum
# passive sources only
bbot -t evilcorp.com -p subdomain-enum -rf passive
subdomain-enum.yml
description: Enumerate subdomains via APIs, brute-force
flags:
# enable every module with the subdomain-enum flag
- subdomain-enum
output_modules:
# output unique subdomains to TXT file
- subdomains
config:
dns:
threads: 25
brute_threads: 1000
# put your API keys here
# modules:
# github:
# api_key: ""
# chaos:
# api_key: ""
# securitytrails:
# api_key: ""
BBOT์ ๋ค๋ฅธ ๋๊ตฌ๋ณด๋ค ์ง์์ ์ผ๋ก 20-50% ๋ ๋ง์ ์๋ธ๋๋ฉ์ธ์ ์ฐพ์๋ ๋๋ค. ๋๋ฉ์ธ์ด ํด์๋ก ๊ทธ ์ฐจ์ด๋ ๋ ์ปค์ง๋๋ค. ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ฐ๋ฅํ์ง ์์๋ณด๋ ค๋ฉด ์๋ ๋ฐฉ์์ ์ฐธ์กฐํ์ธ์.

2) ์น ์คํ์ด๋
# crawl evilcorp.com, extracting emails and other goodies
bbot -t evilcorp.com -p spider
spider.yml
description: Recursive web spider
modules:
- http
blacklist:
# Prevent spider from invalidating sessions by logging out
- "RE:/.*(sign|log)[_-]?out"
config:
web:
# how many links to follow in a row
spider_distance: 2
# don't follow links whose directory depth is higher than 4
spider_depth: 4
# maximum number of links to follow per page
spider_links_per_page: 25
3) ์ด๋ฉ์ผ ์์ง๊ธฐ
# quick email enum with free APIs + scraping
bbot -t evilcorp.com -p email-enum
# pair with subdomain enum + web spider for maximum yield
bbot -t evilcorp.com -p email-enum subdomain-enum spider
email-enum.yml
description: Enumerate email addresses from APIs, web crawling, etc.
flags:
- email-enum
output_modules:
- emails
4) ์น ์ค์บ๋
# run a light web scan against www.evilcorp.com
bbot -t www.evilcorp.com -p web
# run a heavy web scan against www.evilcorp.com
bbot -t www.evilcorp.com -p web-heavy
web.yml
description: Quick web scan
include:
- iis-shortnames
flags:
- web
web-heavy.yml
description: Aggressive web scan
include:
# include the web preset
- web
flags:
- web-heavy
5) ๋ชจ๋ ๊ฒ์ ํ๊บผ๋ฒ์
# everything everywhere all at once
bbot -t evilcorp.com -p kitchen-sink
# roughly equivalent to:
bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web paramminer webbrute web-screenshots
kitchen-sink.yml
description: Everything everywhere all at once
include:
- subdomain-enum
- cloud-enum
- code-enum
- email-enum
- spider
- web
- paramminer
- webbrute
- web-screenshots
- baddns-heavy
config:
modules:
dnsbrute:
recursive_mutations: true
dnscommonsrv:
recursive_mutations: true
webbrute:
avoid_wafs: False
wayback:
urls: True
parameters: True
archive: True
์๋ ๋ฐฉ์
์๋ ๊ทธ๋ํ๋ฅผ ํด๋ฆญํ์ฌ BBOT์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ดํด๋ณด์ธ์.
์ถ๋ ฅ ๋ชจ๋
...๊ทธ๋ฆฌ๊ณ ๋ ๋ณด๊ธฐ!
Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์์ BBOT
๋๊ธฐ(Synchronous)
from bbot.scanner import Scanner
if __name__ == "__main__":
scan = Scanner("evilcorp.com", presets=["subdomain-enum"])
for event in scan.start():
print(event)
๋น๋๊ธฐ(Asynchronous)
from bbot.scanner import Scanner
async def main():
scan = Scanner("evilcorp.com", presets=["subdomain-enum"])
async for event in scan.async_start():
print(event.json())
if __name__ == "__main__":
import asyncio
asyncio.run(main())
๋ณด๊ธฐ: ์ด ์ฌ์ ํ ๋์ค์ฝ๋ ๋ด
/scan ๋ช
๋ น์ ์๋ตํ๋ BBOT ๋์ค์ฝ๋ ๋ด์
๋๋ค. ๋์ค์ฝ๋ ์๋ฒ์์ ํธ์ํ๊ฒ ์ธํฐ๋ท์ ์ค์บํ์ธ์!

๊ธฐ๋ฅ ๊ฐ์
- ๋ค์ค ํ๊ฒ ์ง์
- ์น ์คํฌ๋ฆฐ์ท
- ๊ณต๊ฒฉ์ ์น ๋ชจ๋ ๋ชจ์
- NLP ๊ธฐ๋ฐ ์๋ธ๋๋ฉ์ธ ๋ณํ
- Neo4j(๋ฐ ๊ธฐํ) ๊ธฐ๋ณธ ์ถ๋ ฅ
- Ansible์ ํตํ ์๋ ์์กด์ฑ ์ค์น
- ์ฌ์ฉ์ ์ ์ YARA ๊ท์น์ผ๋ก ์ ์ฒด ๊ณต๊ฒฉ ํ๋ฉด ๊ฒ์
- Python API + ๊ฐ๋ฐ์ ๋ฌธ์
ํ๊ฒ
BBOT์ -t๋ฅผ ํตํด ๋ฌด์ ํ์ ํ๊ฒ์ ํ์ฉํฉ๋๋ค. ํ๊ฒ์ ๋ช
๋ น์ค์์ ์ง์ ์ง์ ํ๊ฑฐ๋ ํ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค(๋ ๋ค ๊ฐ๋ฅ!):
bbot -t evilcorp.com evilcorp.org 1.2.3.0/24 -p subdomain-enum
ํ๊ฒ์ ๋ค์ ์ค ํ๋๊ฐ ๋ ์ ์์ต๋๋ค:
- DNS ์ด๋ฆ (
evilcorp.com) - IP ์ฃผ์ (
1.2.3.4) - IP ๋ฒ์ (
1.2.3.0/24) - ์ด๋ฆฐ TCP ํฌํธ (
192.168.0.1:80) - URL (
https://www.evilcorp.com) - ์ด๋ฉ์ผ ์ฃผ์ (
[email protected]) - ์กฐ์ง (
ORG:evilcorp) - ์ฌ์ฉ์ ์ด๋ฆ (
USER:bobsmith) - ํ์ผ์์คํ
(
FILESYSTEM:/tmp/asdf) - ๋ชจ๋ฐ์ผ ์ฑ (
MOBILE_APP:https://play.google.com/store/apps/details?id=com.evilcorp.app)
์์ธํ ๋ด์ฉ์ ํ๊ฒ์ ์ฐธ์กฐํ์ธ์. BBOT์ด ๋ฒ์(scope)๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ๋ฒ์๋ฅผ ์ฐธ์กฐํ์ธ์.
API ํค
Amass๋ Subfinder์ ์ ์ฌํ๊ฒ, BBOT์ SecurityTrails ๋ฑ ๋ค์ํ ์๋ํํฐ ์๋น์ค์ API ํค๋ฅผ ์ง์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ~/.config/bbot/secrets.yml ์ API ํค๋ฅผ ์
๋ ฅํ๋ ๊ฒ์
๋๋ค. ์ฌ๋ฌ API ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
modules:
shodan_dns:
api_key: 4f41243847da693a4f356c0486114bc6
c99:
# multiple API keys
api_key:
- 21a270d5f59c9b05813a72bb41707266
- ea8f243d9885cf8ce9876a580224fd3c
- 5bc6ed268ab6488270e496d3183a1a27
virustotal:
api_key: dd5f0eee2e4a99b71a939bded450b246
securitytrails:
api_key: d9a05c3fd9a514497713c54b4455d0b0
์ํ๋ค๋ฉด ๋ช ๋ น์ค์์๋ ์ง์ ํ ์ ์์ต๋๋ค:
bbot -c modules.virustotal.api_key=dd5f0eee2e4a99b71a939bded450b246
์์ธํ ๋ด์ฉ์ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋, ํ๋๊ทธ ๋ฑ์ ์ ์ฒด ๋ชฉ๋ก
- ๋ชจ๋ ์ ์ฒด ๋ชฉ๋ก.
- ํ๋๊ทธ ์ ์ฒด ๋ชฉ๋ก.
- ํ๋ฆฌ์
์ ์ฒด ๋ชฉ๋ก.
- ์ ์ญ ๊ตฌ์ฑ ์ต์ ์ ์ฒด ๋ชฉ๋ก.
- ๋ชจ๋ ๊ตฌ์ฑ ์ต์ ์ ์ฒด ๋ชฉ๋ก.
๋ฌธ์
- ์ฌ์ฉ์ ๋งค๋ด์ผ
- ๊ธฐ๋ณธ
- ์ค์บ๋
- ๋ชจ๋
- ๋ง์ด๊ทธ๋ ์ด์
- ๊ธฐํ
- ๊ฐ๋ฐ์ ๋งค๋ด์ผ
๊ธฐ์ฌ
์ต๊ณ ์ BBOT ๋ชจ๋ ์ค ์๋น์๋ ์ปค๋ฎค๋ํฐ์์ ์์ฑ๋์์ต๋๋ค. BBOT์ ์ง์์ ์ผ๋ก ๊ฐ์ ๋๊ณ ์์ผ๋ฉฐ, ๋๋ ์ด ๋ ๊ฐ๋ ฅํด์ง๊ณ ์์ต๋๋ค!
์ฝ๋๋ฟ๋ง ์๋๋ผ ์์ด๋์ด๋ ํ์ํฉ๋๋ค! ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์์ด๋์ด๊ฐ ์๋ค๋ฉด Discussions์์ ์๋ ค์ฃผ์ธ์. ์ง์ ์ฐธ์ฌํ๊ณ ์ถ๋ค๋ฉด ๊ธฐ์ฌ๋ฅผ ์ฐธ์กฐํ์ธ์. ์ฌ๊ธฐ์์ BBOT ๋ชจ๋ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์ค์ ์ง์นจ๊ณผ ๊ฐ๋จํ ํํ ๋ฆฌ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ํ ๋ฐฉ๋ํ ๊ฐ๋ฐ์ ๋ฌธ์๋ ์ ๊ณต๋ฉ๋๋ค.
BBOT์ ๊ธฐ์ฌํด ์ฃผ์ ๋๋ผ์ด ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค! โค๏ธ
ํน๋ณํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค:
- BBOT์ ๋ง๋ @TheTechromancer
- badsecrets์ baddns๋ฅผ ํฌํจํ BBOT์ ์น ํดํน ๊ธฐ๋ฅ์ ๋ง์ ์์ ์ ๊ธฐ์ฌํ @liquidsec
- Spiderfoot์ ๋ง๋ Steve Micallef (@smicallef)
- Neo4j์ Ansible ์ ๋ฌธ ์ง์์ ์ ๊ณตํ @kerrymilan
- ๋ฉ์ง ์ฝ๋ ์์ง ๊ณ์ด ๋ชจ๋์ ๋ง๋ @domwhewell-sage
- ์ฒ ์ ํ ํ ์คํธ๋ฅผ ์ํํ @aconite33์ @amiremami
- bbot Pypi ์ ์ฅ์์ ์์ ๊ถ์ ์๋ํด ์ฃผ์ Aleksei Kornev (@alekseiko) <3

