在最小化的alpine Docker容器中,使用Tor、proxychains和dnsmasq通过nmap扫描.onion隐藏服务。
使用 nmap 扫描 Tor 网络上的隐藏“onion”服务。基于 alpine 的最小化镜像,通过 proxychains 包装 nmap。Tor 和 dnsmasq 通过 s6 作为守护进程运行,proxychains 包装 nmap 以使用端口 9050 上的 Tor SOCKS 代理。Tor 还通过 DNSPort 配置,以匿名方式将 DNS 请求解析到端口 9053。dnsmasq 配置为将 localhost:9053 作为权威 DNS 服务器。Proxychains 配置为通过本地解析器代理 DNS,因此所有 DNS 请求都将通过 Tor,应用程序可以解析 .onion 地址。
$ docker run --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
[tor_wait] Wait for Tor to boot... (might take a while)
[tor_wait] Done. Tor booted.
[nmap onion] nmap -p 80,443 facebookcorewwwi.onion
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-23 16:17 UTC
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:443 ... OK
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:80 ... OK
Nmap scan report for facebookcorewwwi.onion (224.0.0.1)
Host is up (2.7s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 3.58 seconds
容器启动时,它会启动 Tor 和 dnsmasq 作为守护进程。tor_wait 脚本随后等待 Tor SOCKS 代理启动,然后执行你的命令。
默认情况下,docker run 的参数会传递给 /bin/nmap,后者以 -sT -PN -n "$@" 参数调用 nmap,这些参数是使其通过 Tor 工作所必需的(via explainshell.com)。
例如,命令:
docker run --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
将被执行为:
proxychains4 -f /etc/proxychains.conf /usr/bin/nmap -sT -PN -n -p 80,443 facebookcorewwwi.onion
除了 nmap 的自定义脚本外,还有用于 curl 和 nc 的自定义包装脚本,将它们包装在 proxychains 中,位于 /bin/curl 和 /bin/nc。要调用它们,只需将 curl 或 nc 指定为 docker run 的第一个参数。例如:
docker run --rm -it milesrichardson/onion-nmap nc -z 80 facebookcorewwwi.onion
将被执行为:
proxychains4 -f /etc/proxychains.conf /usr/bin/nc -z 80 facebookcorewwwi.onion
以及
docker run --rm -it milesrichardson/onion-nmap curl -I https://facebookcorewwwi.onion
将被执行为:
proxychains4 -f /etc/proxychains.conf /usr/bin/curl -I https://facebookcorewwwi.onion
如果你想调用任何其他命令,包括原始的 /usr/bin/nmap、/usr/bin/nc 或 /usr/bin/curl,你可以将其指定为 docker run 的第一个参数,例如:
docker run --rm -it milesrichardson/onion-nmap /usr/bin/curl -x socks4h://localhost:9050 https://facebookcorewwwi.onion
只有一个环境变量:DEBUG_LEVEL。如果你将其设置为 0 以外的任何值,将打印更多调试信息(具体来说,在等待 Tor 启动时尝试连接到 Tor 的详细信息)。示例:
$ docker run -e DEBUG_LEVEL=1 --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
[tor_wait] Wait for Tor to boot... (might take a while)
[tor_wait retry 0] Check socket is open on localhost:9050...
[tor_wait retry 0] Socket OPEN on localhost:9050
[tor_wait retry 0] Check SOCKS proxy is up on localhost:9050 (timeout 2 )...
[tor_wait retry 0] SOCKS proxy DOWN on localhost:9050, try again...
[tor_wait retry 1] Check socket is open on localhost:9050...
[tor_wait retry 1] Socket OPEN on localhost:9050
[tor_wait retry 1] Check SOCKS proxy is up on localhost:9050 (timeout 4 )...
[tor_wait retry 1] SOCKS proxy DOWN on localhost:9050, try again...
[tor_wait retry 2] Check socket is open on localhost:9050...
[tor_wait retry 2] Socket OPEN on localhost:9050
[tor_wait retry 2] Check SOCKS proxy is up on localhost:9050 (timeout 6 )...
[tor_wait retry 2] SOCKS proxy UP on localhost:9050
[tor_wait] Done. Tor booted.
[nmap onion] nmap -p 80,443 facebookcorewwwi.onion
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-23 16:34 UTC
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:443 ... OK
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:80 ... OK
Nmap scan report for facebookcorewwwi.onion (224.0.0.1)
Host is up (2.8s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 4.05 seconds