BlogWonderHowTo

Cómo: extraer direcciones y saldos de billeteras de Bitcoin de sitios web con la CLI de SpiderFoot

Si bien existen razones completamente legítimas para usar Bitcoin, también lo usan terroristas, traficantes de drogas y otras personas sospechosas que deben ser investigadas. Ahí es donde entra SpiderFoot, que tiene una interfaz de línea de comandos para buscar direcciones de billetera Bitcoin en un sitio web y consultar los saldos asociados con ellas.

SpiderFoot es una gran herramienta en general para automatizar OSINT (inteligencia de código abierto), y hay dos versiones diferentes: el proyecto de código abierto gratuito y SpiderFoot HX, un servicio pago que cuesta casi $ 800 al año. Para nuestro uso, la versión gratuita es adecuada para investigar carteras y saldos de Bitcoin, y no tendremos que ejecutar un servidor web para hacerlo, lo cual es necesario si usamos SpiderFoot fuera de la CLI.

Digamos que una organización está recaudando fondos usando Bitcoin. Ya sea que se trate de una organización legítima o ilegítima que solicita donaciones, puede monitorear su desempeño localizando primero cualquier dirección de billetera Bitcoin asociada con el dominio de la organización raspando el sitio web. Luego, podemos pasar esos datos a una consulta para averiguar el saldo exacto en cada billetera pública.

Requisitos

Para usar la CLI de SpiderFoot, deberá tener instalado Python 3, que viene preinstalado en los sistemas Linux, macOS y Windows más nuevos. Si no es así, o si tiene una versión anterior de Python, Python 3 es bastante fácil de Descargar e instalar.

Paso 1: Instale SpiderFoot

No vamos a ir a Sitio web de SpiderFoot para conseguir la herramienta. En cambio, lo obtendremos de su repositorio de GitHub. Hay muchos buenos usos para SpiderFoot más allá de lo que estamos haciendo aquí hoy, así que asegúrese de revisar su GitHub para ver todo lo demás que puede hacer. También tiene una lista de módulos que SpiderFoot puede usar, que se pueden combinar y encadenar para realizar consultas de búsqueda muy específicas.

Usaremos dos módulos más adelante: uno para buscar en el sitio web las direcciones de Bitcoin y el otro para pasar esas direcciones a la consulta de saldo. Pero primero, para descargar SpiderFoot a través de git, emita el siguiente comando de clonación en una terminal.

~$ git clone https://github.com/smicallef/spiderfoot.git

Cloning into 'spiderfoot'...
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 20781 (delta 17), reused 18 (delta 7), pack-reused 20738
Receiving objects: 100% (20781/20781), 13.89 MiB | 9.34 MiB/s, done.
Resolving deltas: 100% (16727/16727), done.

Luego, cambie a su directorio y realice un listado (ls).

~$ cd spiderfoot
~/spiderfoot$ ls

dicts                 modules                sfcli.py    static
Dockerfile            passwd                 sflib.py    test
dyn                   README.md              sf.py       THANKYOU
generate-certificate  requirements_test.txt  sfscan.py   VERSION
LICENSE               requirements.txt       sfwebui.py
log                   setup.cfg              spiderfoot

Puede ver un archivo requirements.txt, así que asegúrese de instalarlo con pip3 antes de continuar. Si no lo hace, es probable que SpiderFoot falle porque no tiene todas las dependencias que necesita para funcionar correctamente.

~/spiderfoot$ pip3 install -r requirements.txt

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: adblockparser>=0.7 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 1)) (0.7)
Requirement already satisfied: dnspython>=1.16.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 2)) (2.0.0)
Requirement already satisfied: exifread>=2.1.2 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 3)) (2.3.2)
Requirement already satisfied: CherryPy>=18.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 4)) (18.6.0)
Requirement already satisfied: cherrypy-cors>=1.6 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 5)) (1.6)
Requirement already satisfied: Mako>=1.0.4 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 6)) (1.1.3)
Requirement already satisfied: beautifulsoup4>=4.4.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 7)) (4.9.3)
Requirement already satisfied: lxml>=4.6.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 8)) (4.6.1)
Requirement already satisfied: netaddr>=0.7.18 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 9)) (0.7.19)
Requirement already satisfied: pysocks>=1.7.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 10)) (1.7.1)
Requirement already satisfied: requests>=2.20.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 11)) (2.24.0)
Requirement already satisfied: ipwhois==1.0.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 12)) (1.0.0)
Requirement already satisfied: ipaddr>=2.2.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 13)) (2.2.0)
Requirement already satisfied: phonenumbers>=8.12.9 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 14)) (8.12.13)
Requirement already satisfied: pygexf>=0.2.2 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 15)) (0.2.2)
Requirement already satisfied: PyPDF2>=1.26.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 16)) (1.26.0)
Requirement already satisfied: stem>=1.7.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 17)) (1.8.0)
Requirement already satisfied: python-whois>=0.7.1 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 18)) (0.7.3)
Requirement already satisfied: secure>=0.2.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 19)) (0.2.1)
Requirement already satisfied: pyOpenSSL>=17.5.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 20)) (19.1.0)
Requirement already satisfied: python-docx>=0.8.10 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 21)) (0.8.10)
Requirement already satisfied: python-pptx>=0.6.18 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 22)) (0.6.18)
Requirement already satisfied: networkx>=2.5 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 23)) (2.5)
Requirement already satisfied: cryptography>=3.2.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 24)) (3.2.1)
Requirement already satisfied: publicsuffixlist>=0.7.3 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 25)) (0.7.5)
Requirement already satisfied: portend>=2.1.1 in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (2.7.0)
Requirement already satisfied: more-itertools in /usr/lib/python3/dist-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (4.2.0)
Requirement already satisfied: zc.lockfile in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (2.0)
Requirement already satisfied: cheroot>=8.2.1 in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (8.4.7)
Requirement already satisfied: jaraco.collections in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (3.0.0)
Requirement already satisfied: httpagentparser>=1.5 in /home/kali/.local/lib/python3.8/site-packages (from cherrypy-cors>=1.6->-r requirements.txt (line 5)) (1.9.0)
Requirement already satisfied: soupsieve>1.2 in /usr/lib/python3/dist-packages (from beautifulsoup4>=4.4.1->-r requirements.txt (line 7)) (2.0.1)
Requirement already satisfied: future in /usr/lib/python3/dist-packages (from python-whois>=0.7.1->-r requirements.txt (line 18)) (0.18.2)
Requirement already satisfied: tempora>=1.8 in /home/kali/.local/lib/python3.8/site-packages (from portend>=2.1.1->CherryPy>=18.0->-r requirements.txt (line 4)) (4.0.1)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zc.lockfile->CherryPy>=18.0->-r requirements.txt (line 4)) (50.3.0)
Requirement already satisfied: jaraco.functools in /home/kali/.local/lib/python3.8/site-packages (from cheroot>=8.2.1->CherryPy>=18.0->-r requirements.txt (line 4)) (3.0.1)
Requirement already satisfied: six>=1.11.0 in /usr/lib/python3/dist-packages (from cheroot>=8.2.1->CherryPy>=18.0->-r requirements.txt (line 4)) (1.15.0)
Requirement already satisfied: jaraco.text in /home/kali/.local/lib/python3.8/site-packages (from jaraco.collections->CherryPy>=18.0->-r requirements.txt (line 4)) (3.2.0)
Requirement already satisfied: jaraco.classes in /home/kali/.local/lib/python3.8/site-packages (from jaraco.collections->CherryPy>=18.0->-r requirements.txt (line 4)) (3.1.0)
Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (from tempora>=1.8->portend>=2.1.1->CherryPy>=18.0->-r requirements.txt (line 4)) (2020.4)

Si tiene problemas para instalarlo a través del comando anterior, intente usar actualización apta primero, luego intente nuevamente. Si aún tiene problemas, ejecute el comando con sudo en frente de eso.

Paso 2: asegúrese de que SpiderFoot esté funcionando

Ahora que SpiderFoot está listo para funcionar, es hora de comenzar a usarlo con un argumento de línea de comandos para pasar la información que nos gustaría haber devuelto. De la lista realizada arriba, verá el archivo sf.py, y ese es el programa principal que usaremos aquí. Intentemos ejecutarlo para ver si funciona:

~/spiderfoot$ python3 ./sf.py

You must specify a target when running in scan mode. Try --help for guidance.

Si ve algo más, o si se encuentra con errores ahora o en un paso posterior, regrese y reinstale el archivo requirements.txt con pip3. Si eso no funciona, instálelo con sudo, que debería arreglar los módulos faltantes.

Ahora, revisemos rápidamente la página de ayuda para ver las instrucciones de uso.

~/spiderfoot$ python3 ./sfcli.py --help

usage: sf.py [-h] [-d] [-l IP:port] [-m mod1,mod2,...] [-M] [-s TARGET]
             [-t type1,type2,...] [-T] [-o tab|csv|json] [-n] [-r] [-S LENGTH]
             [-D DELIMITER] [-f] [-F FILTER] [-x] [-q]

SpiderFoot 3.0: Open Source Intelligence Automation.

optional arguments:
  -h, --help          show this help message and exit
  -d, --debug         Enable debug output.
  -l IP:port          IP and port to listen on.
  -m mod1,mod2,...    Modules to enable.
  -M, --modules       List available modules.
  -s TARGET           Target for the scan.
  -t type1,type2,...  Event types to collect.
  -T, --types         List available event types.
  -o tab|csv|json     Output format. Tab is default.
  -n                  Strip newlines from data.
  -r                  Include the source data field in tab/csv output.
  -S LENGTH           Maximum data length to display. By default, all data is
                      shown.
  -D DELIMITER        Delimiter to use for CSV output. Default is ,.
  -f                  Filter out other event types that weren't requested with
                      -t.
  -F FILTER           Filter out a set of event types.
  -x                  STRICT MODE. Will only enable modules that can directly
                      consume your target, and if -t was specified only those
                      events will be consumed by modules. This overrides -t
                      and -m options.
  -q                  Disable logging.

Paso 3: Busque direcciones y saldos de Bitcoin

Ahora, veamos la dirección de Bitcoin y el saldo de la billetera que eliminamos de un sitio web. Tendremos que encadenar un par de cosas para lograrlo. Y aquí es donde entran en juego los módulos.

~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_bitcoin,sfp_blockchain -s websiteurl.com -F -q BITCOIN_ADDRESS,BITCOIN_BALANCE -q

Arriba, puede ver el comando que estamos usando para hacer lo que necesitamos. La primera parte del comando es iniciar la herramienta SpiderFoot con Python 3. La -metro indica que está usando un módulo o módulos, y justo después, ahí es donde van los módulos, separados por comas.

El módulo sfp_spider arañará las páginas web del sitio web que estamos escaneando para encontrar toda la información que contiene. El sfp_bitcoin El módulo aislará todas las direcciones de billetera de Bitcoin que encuentre a través del spidering. Y el sfp_blockchain El módulo tomará la dirección o direcciones de Bitcoin y las pasará a una API que determinará la cantidad exacta almacenada en la billetera.

Siguiente en el comando, tenemos -s, seguido de la URL del sitio web, que nos permitirá elegir el sitio web de destino. Entonces tenemos -F para filtrar un conjunto de tipos de eventos, específicamente, DIRECCIÓN DE BITCOIN y BITCOIN_BALANCE. Esa es la información que queremos encontrar. Por fin, -q se usa para ocultar todo en la salida excepto solo lo que queremos.

Ahora, ejecutémoslo en un sitio web real, usando bitcoinforcharity.com como ejemplo.

~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_bitcoin,sfp_blockchain -s bitcoinforcharity.com -F BITCOIN_ADDRESS,BITCOIN_BALANCE -q

Source                          Type                                            Data
sfp_bitcoin                     Bitcoin Address                                 1HesYJSP1QqcyPEjnQ9vzBL1wujruNGe7R
sfp_blockchain                  Bitcoin Balance                                 0.00021 BTC
sfp_bitcoin                     Bitcoin Address                                 16Sy8mvjyNgCRYS14m1Rtca3UfrFPzz9eJ
sfp_blockchain                  Bitcoin Balance                                 0.24481116 BTC
sfp_bitcoin                     Bitcoin Address                                 1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd
sfp_blockchain                  Bitcoin Balance                                 1.62908644 BTC
sfp_bitcoin                     Bitcoin Address                                 1946W6LDsEYF9B5sPYDKfwLw6YBZuHns4L
sfp_blockchain                  Bitcoin Balance                                 0.02344126 BTC
sfp_bitcoin                     Bitcoin Address                                 1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN
sfp_blockchain                  Bitcoin Balance                                 1.89378293 BTC
sfp_bitcoin                     Bitcoin Address                                 1PAt5oKQGBRigFDY6fB2WgQTtQJNzFyTDr
sfp_blockchain                  Bitcoin Balance                                 0.0 BTC
sfp_bitcoin                     Bitcoin Address                                 1NgiUwkhYVYMy3eoMC9dHcvdHejGxcuaWm
sfp_blockchain                  Bitcoin Balance                                 0.06070947 BTC
sfp_bitcoin                     Bitcoin Address                                 1M87hiTAa49enJKVeT9gzLjYmJoYh9V98
sfp_blockchain                  Bitcoin Balance                                 0.0 BTC
sfp_bitcoin                     Bitcoin Address                                 1CU5YgjquupDw6UeXEyA9VEBH34R7fZ19b
sfp_blockchain                  Bitcoin Balance                                 0.16549195 BTC
sfp_bitcoin                     Bitcoin Address                                 16DEzKc9fX4XfgGzEvQUJmoYeUrbRNXqxe
sfp_blockchain                  Bitcoin Balance                                 0.18967667 BTC
sfp_bitcoin                     Bitcoin Address                                 1AS3TiTqgJZK6CfNfqcbPXSx4PTFvfghvF
sfp_blockchain                  Bitcoin Balance                                 0.0 BTC
sfp_bitcoin                     Bitcoin Address                                 1Archive1n2C579dMsAu3iC6tWzuQJz8dN
sfp_blockchain                  Bitcoin Balance                                 3.17865301 BTC

A partir del resultado enumerado anteriormente, podemos ver que la organización benéfica tiene más de unas pocas direcciones de Bitcoin listadas públicamente que conducen a carteras donde vemos la cantidad exacta de bitcoins. La organización benéfica anterior realmente no está recaudando ningún bitcoin real, siendo 3.17865301 BTC la billetera con más. Eso no es particularmente interesante si estuviéramos buscando un sitio que mueva mucho dinero a través de criptomonedas.

Paso 4: buscar direcciones de Ethereum

Para Ethereum, puede usar una estructura de comando diferente para obtener todas las direcciones de billetera que se encuentran en un sitio web, pero no podrá obtener ningún saldo como podría con Bitcoin. Para demostrarlo rápidamente, analizaremos etherdonation.com.

~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_ethereum -s etherdonation.com -F ETHEREUM_ADDRESS -q

Source                          Type                                            Data
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum                    Ethereum Address                                0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b

Todo lo que hicimos fue un uso sfp_spider, el módulo spidering, y sfp_ethereum, el módulo de búsqueda de Ethereum. Y eliminamos el filtro para el saldo ya que no podemos encontrar saldos de Ethereum.

Simple pero poderoso

Si desea ver algunas de las organizaciones con las mayores transacciones de bitcoins, puede buscar en Google algo como “las 100 mejores direcciones de bitcoins” y elegir un resultado que controle las principales. Luego, puede usar la URL de ese sitio en el comando para ver qué direcciones de Bitcoin están moviendo más BTC.

Foto de portada de Retia / Null Byte

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar