{"id":14638114,"url":"https://github.com/ivan-sincek/chad","last_synced_at":"2026-03-10T20:09:34.571Z","repository":{"id":62594239,"uuid":"532073041","full_name":"ivan-sincek/chad","owner":"ivan-sincek","description":"Search Google Dorks like Chad. / Broken link hijacking tool.","archived":false,"fork":false,"pushed_at":"2025-09-21T16:22:17.000Z","size":1063,"stargazers_count":30,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-21T18:25:37.495Z","etag":null,"topics":["broken-link-takeover","bug-bounty","crawler","ethical-hacking","google","google-dorking","google-dorks","offensive-security","penetration-testing","playwright","python","red-team-engagement","scraper","search-engine","security","social-media","social-media-takeover","threat-hunting","threat-intelligence","web-penetration-testing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivan-sincek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-02T20:41:22.000Z","updated_at":"2025-09-21T16:21:40.000Z","dependencies_parsed_at":"2023-11-26T00:21:06.832Z","dependency_job_id":"6853963a-8a3e-442b-a48e-9f272ae1b8f2","html_url":"https://github.com/ivan-sincek/chad","commit_stats":{"total_commits":15,"total_committers":1,"mean_commits":15.0,"dds":0.0,"last_synced_commit":"69f6d59138846b445a4be241c92c8e49233ed5cb"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/ivan-sincek/chad","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivan-sincek","download_url":"https://codeload.github.com/ivan-sincek/chad/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-sincek%2Fchad/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30352157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T15:55:29.454Z","status":"ssl_error","status_checked_at":"2026-03-10T15:54:58.440Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["broken-link-takeover","bug-bounty","crawler","ethical-hacking","google","google-dorking","google-dorks","offensive-security","penetration-testing","playwright","python","red-team-engagement","scraper","search-engine","security","social-media","social-media-takeover","threat-hunting","threat-intelligence","web-penetration-testing"],"created_at":"2024-09-10T02:01:43.274Z","updated_at":"2026-03-10T20:09:34.563Z","avatar_url":"https://github.com/ivan-sincek.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Chad\n\nSearch Google Dorks like Chad. Based on [ivan-sincek/nagooglesearch](https://github.com/ivan-sincek/nagooglesearch).\n\nGoogle frequently changes cookies, so you will need to specify your own using the `-b` option if the default ones stop working and you keep getting no results. Example cookies can be found [here](https://github.com/ivan-sincek/nagooglesearch/blob/main/src/nagooglesearch/nagooglesearch.py#L169). Note that Google frequently changes cookie names, adds new ones, and removes old ones.\n\nTested on Kali Linux v2024.2 (64-bit).\n\nMade for educational purposes. I hope it will help!\n\nFuture plans:\n\n* Chad Extractor:\n    * check if Playwright's Chromium headless browser is installed or not,\n    * add option to stop on rate limiting,\n    * find a way to bypass the auth. wall for `linkedin-user`.\n\n## Table of Contents\n\n* [How to Install](#how-to-install)\n\t* [Install Playwright and Chromium](#install-playwright-and-chromium)\n\t* [Standard Install](#standard-install)\n\t* [Build and Install From the Source](#build-and-install-from-the-source)\n* [Shortest Possible](#shortest-possible)\n* [File Download](#file-download)\n* [Chad Extractor](#chad-extractor)\n* [Broken Link Hijacking](#broken-link-hijacking)\n    * [Single Site](#single-site)\n    * [Multiple Sites](#multiple-sites)\n    * [Analyzing the Report](#analyzing-the-report)\n    * [Rate Limiting](#rate-limiting)\n* [Usage](#usage)\n* [Images](#images)\n\n## How to Install\n\n### Install Playwright and Chromium\n\n```bash\npip3 install --upgrade playwright\n\nplaywright install chromium\n```\n\nMake sure each time you upgrade your Playwright dependency to re-install Chromium; otherwise, you might get an error using the headless browser in Chad Extractor.\n\n### Standard Install\n\n```bash\npip3 install --upgrade google-chad\n```\n\n### Build and Install From the Source\n\n```bash\ngit clone https://github.com/ivan-sincek/chad \u0026\u0026 cd chad\n\npython3 -m pip install --upgrade build\n\npython3 -m build\n\npython3 -m pip install dist/google_chad-7.5-py3-none-any.whl\n```\n\n## Shortest Possible\n\n```bash\nchad -q 'intitle:\"index of /\" intext:\"parent directory\"'\n```\n\nGoogle frequently changes cookies, so you may need to specify your own using the `-b` option if the default ones no longer work - if you keep getting no results.\n\nDefault cookies can be found at [here](https://github.com/ivan-sincek/nagooglesearch/blob/main/src/nagooglesearch/nagooglesearch.py#L169).\n\n## File Download\n\nDid you say Metagoofil?!\n\n```bash\nmkdir downloads\n\nchad -q \"ext:pdf OR ext:docx OR ext:xlsx OR ext:pptx\" -s *.example.com -tr 200 -dir downloads\n```\n\nChad's file download feature is based on Python Requests dependency.\n\n## Chad Extractor\n\nChad Extractor is a powerful tool based on [Scrapy's](https://scrapy.org) web crawler and [Playwright's](https://playwright.dev/python) Chromium headless browser, designed to efficiently scrape web content; unlike Python Requests dependency, which cannot render JavaScript encoded HTML and is easily blocked by anti-bot solutions.\n\nPrimarily, Chad Extractor is designed to extract and validate data from Chad results files. However, it can also be used to extract and validate data from plaintext files by using the `-pt` option.\n\nIf the `-pt` option is used, plaintext files will be treated like server responses, and the extraction logic will be applied, followed by validation. This is also useful if you want to re-test previous Chad Extractor's reports, e.g., by using `-res report.json -pt -o retest.json`.\n\n## Broken Link Hijacking\n\nPrepare the Google Dorks as [social_media_dorks.txt](https://github.com/ivan-sincek/chad/blob/main/src/dorks/social_media_dorks.txt) file:\n\n```fundamental\nintext:\"t.me/\"\nintext:\"discord.com/invite/\" OR intext:\"discord.gg/invite/\"\nintext:\"youtube.com/c/\" OR intext:\"youtube.com/channel/\"\nintext:\"twitter.com/\" OR intext:\"x.com/\"\nintext:\"facebook.com/\"\nintext:\"instagram.com/\"\nintext:\"tiktok.com/\"\nintext:\"linkedin.com/in/\" OR intext:\"linkedin.com/company/\"\n```\n\nPrepare the template as [social_media_template.json](https://github.com/ivan-sincek/chad/blob/main/src/templates/social_media_template.json) file:\n\n```json\n{\n    \"telegram\": {\n        \"extract\": \"t\\\\.me\\\\/(?:(?!(?:share)(?:(?:\\\\/|\\\\?|\\\\\\\\|\\\"|\\\\\u003c)*$|(?:\\\\/|\\\\?|\\\\\\\\|\\\\\\\"|\\\\\u003c)[\\\\s\\\\S]))[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+)(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://\",\n        \"validate\": \"\u003cmeta property=\\\"og:title\\\" content=\\\"Telegram: Contact .+?\\\"\u003e\"\n    },\n    \"discord\": {\n        \"extract\": \"discord\\\\.(?:com|gg)\\\\/invite\\\\/[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://\",\n        \"validate\": \"Invite Invalid\",\n        \"validate_browser\": true,\n        \"validate_browser_wait\": 6\n    },\n    \"youtube\": {\n        \"extract\": \"youtube\\\\.com\\\\/(?:c|channel)\\\\/[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"validate\": \"\u003ciframe.+?src=\\\"\\\\/error\\\\?src=404.+?\\\"\u003e\",\n        \"validate_cookies\": {\n            \"SOCS\": \"CAESEwgDEgk2OTk3ODk2MzcaAmVuIAEaBgiAn5S6Bg\"\n        }\n    },\n    \"twitter\": {\n        \"extract\": \"(?\u003c=(?\u003c!pic\\\\.)twitter|(?\u003c!pic\\\\.)x)\\\\.com\\\\/(?:(?!(?:[\\\\w]{2}\\\\/)*(?:explore|hashtag|home|i|intent|library|media|personalization|privacy|search|share|tos|widgets\\\\.js)(?:(?:\\\\/|\\\\?|\\\\\\\\|\\\"|\\\\\u003c)*$|(?:\\\\/|\\\\?|\\\\\\\\|\\\\\\\"|\\\\\u003c)[\\\\s\\\\S]))[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+)(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://x\",\n        \"validate\": \"This account doesn.?t exist\",\n        \"validate_browser\": true,\n        \"validate_cookies\": {\n            \"night_mode\": \"2\"\n        }\n    },\n    \"facebook\": {\n        \"extract\": \"facebook\\\\.com\\\\/(?:(?!(?:about|dialog|gaming|groups|public|sharer|share\\\\.php|terms\\\\.php)(?:(?:\\\\/|\\\\?|\\\\\\\\|\\\"|\\\\\u003c)*$|(?:\\\\/|\\\\?|\\\\\\\\|\\\\\\\"|\\\\\u003c)[\\\\s\\\\S]))[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+)(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"validate\": \"This (?:content|page) isn't available\",\n        \"validate_browser\": true\n    },\n    \"instagram\": {\n        \"extract\": \"instagram\\\\.com\\\\/(?:(?!(?:about|accounts|ar|explore|p)(?:(?:\\\\/|\\\\?|\\\\\\\\|\\\"|\\\\\u003c)*$|(?:\\\\/|\\\\?|\\\\\\\\|\\\\\\\"|\\\\\u003c)[\\\\s\\\\S]))[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+)(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"extract_append\": \"/\",\n        \"validate\": \"Sorry, this page isn't available\\\\.\",\n        \"validate_browser\": true\n    },\n    \"tiktok\": {\n        \"extract\": \"(?\u003c!vt\\\\.)tiktok\\\\.com\\\\/\\\\@[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@]+(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"validate\": \"Couldn't find this account\"\n    },\n    \"linkedin-company\": {\n        \"extract\": \"linkedin\\\\.com\\\\/company\\\\/[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@\\\\\u0026]+(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"validate\": \"Page not found\",\n        \"validate_cookies\": {\n            \"bcookie\": \"v=2\",\n            \"lang\": \"v=2\u0026lang=en-us\"\n        }\n    },\n    \"linkedin-user\": {\n        \"extract\": \"linkedin\\\\.com\\\\/in\\\\/[\\\\w\\\\d\\\\.\\\\_\\\\-\\\\+\\\\@\\\\\u0026]+(?\u003c!\\\\.)\",\n        \"extract_prepend\": \"https://www.\",\n        \"validate\": \"An exact match for .+ could not be found\\\\.\"\n    }\n}\n```\n\n**Make sure your regular expressions return only one capturing group, e.g., `[1, 2, 3, 4]`; and not a touple, e.g., `[(1, 2), (3, 4)]`.**\n\nMake sure to properly escape regular expression specific symbols in your template file, e.g., make sure to escape dot `.` as `\\\\.`, and forward slash `/` as `\\\\/`, etc.\n\nAll regular expression searches are case-insensitive.\n\nWeb content fetched from the URLs in Chad results files will be matched against all the regular expressions (defined by the `extract` attributes) in the template file to find as much relevant data as possible.\n\nTo extract data without validation, simply omit the `validate` attributes from the template file as necessary.\n\n| Scope | Name | Type | Required | Description |\n| --- | --- | --- | --- | --- |\n| extraction | extract | str | yes | Regular expression query. |\n| extraction | extract_prepend | str | no | String to prepend to all extracted data. |\n| extraction | extract_append | str | no | String to append to extracted data. |\n| validation | validate | str | no | Regular expression query. |\n| validation | validate_browser | bool | no | Whether to use the headless browser or not. |\n| validation | validate_browser_wait | float | no | Wait time in seconds before fetching the content from the headless browser's page. |\n| validation | validate_headers | dict[str,str] | no | HTTP request headers in key-value format. The `Cookie` header is ignored. |\n| validation | validate_cookies | dict[str,str] | no | HTTP request cookies in key-value format. |\n\n\u003cp align=\"center\"\u003eTable 1 - Template Attributes\u003c/p\u003e\n\n### Single Site\n\n```bash\nchad -q social_media_dorks.txt -s *.example.com -tr 200 -pr 100 -o results.json\n\nchad-extractor -t social_media_template.json -res results.json -o report.json\n```\n\n### Multiple Sites\n\nPrepare the domains / subdomains as `sites.txt` file, the same way you would use them with the `site:` option in Google:\n\n```fundamental\n*.example.com\n*.example.com -www\n```\n\nRun:\n\n```bash\nmkdir chad_results\n\nIFS=$'\\n'; count=0; for site in $(cat sites.txt); do count=$((count+1)); echo \"#${count} | ${site}\"; chad -q social_media_dorks.txt -s \"${site}\" -tr 200 -pr 100 -o \"chad_results/results_${count}.json\"; done\n\nchad-extractor -t social_media_template.json -res chad_results -o report.json -v\n```\n\n### Analyzing the Report\n\nManually verify if the broken social media URLs in `results[summary][validated]` are vulnerable to takeover:\n\n```json\n{\n   \"started_at\":\"2023-12-23 03:30:10\",\n   \"ended_at\":\"2023-12-23 04:20:00\",\n   \"summary\":{\n      \"validated\":[\n         \"https://t.me/does_not_exist\" // might be vulnerable to takeover\n      ],\n      \"extracted\":[\n         \"https://discord.com/invite/exists\",\n         \"https://t.me/does_not_exist\",\n         \"https://t.me/exists\"\n      ]\n   },\n   \"failed\":{\n      \"validation\":[],\n      \"extraction\":[]\n   },\n   \"full\":[\n      {\n         \"url\":\"https://example.com/about\",\n         \"results\":{\n            \"telegram\":[\n               \"https://t.me/does_not_exist\",\n               \"https://t.me/exists\"\n            ],\n            \"discord\":[\n               \"https://discord.com/invite/exists\"\n            ]\n         }\n      }\n   ]\n}\n```\n\n### Rate Limiting\n\nGoogle's cooling-off period can range from a few hours to a whole day.\n\nTo avoid hitting Google's rate limits with Chad, increase the minimum and maximum sleep between Google queries and/or pages; or use free or paid proxies. However, free proxies are often blocked and unstable.\n\nTo download a list of free proxies, run:\n\n```bash\ncurl -s 'https://proxylist.geonode.com/api/proxy-list?limit=50\u0026page=1\u0026sort_by=lastChecked\u0026sort_type=desc' -H 'Referer: https://proxylist.geonode.com/' | jq -r '.data[] | \"\\(.protocols[])://\\(.ip):\\(.port)\"' \u003e proxies.txt\n```\n\n**If you are using proxies, you might want to increase the request timeout, as responses will need longer time to arrive.**\n\nAdditionally, to avoid hitting rate limits on platforms like [Instagram's](https://www.instagram.com) while using Chad Extractor, consider decreasing the number of concurrent requests per domain and increasing the sleep and wait times.\n\n## Usage\n\n```fundamental\nChad v7.5 ( github.com/ivan-sincek/chad )\n\nUsage:   chad -q queries     [-s site         ] [-x proxies    ] [-o out         ]\nExample: chad -q queries.txt [-s *.example.com] [-x proxies.txt] [-o results.json]\n\nDESCRIPTION\n    Search Google Dorks like Chad\nQUERIES\n    File containing Google Dorks or a single query to use\n    -q, --queries = queries.txt | intext:password | \"ext:tar OR ext:zip\" | etc.\nSITE\n    Domain[s] to search\n    -s, --site = example.com | sub.example.com | *.example.com | \"*.example.com -www\" | etc.\nTIME\n    Get results not older than the specified time in months\n    -t, --time =  6 | 12 | 24 | etc.\nTOTAL RESULTS\n    Total number of unique results\n    Default: 100\n    -tr, --total-results = 200 | etc.\nPAGE RESULTS\n    Number of results per page - capped at 100 by Google\n    Default: randint(70, 100)\n    -pr, --page-results = 50 | etc.\nMINIMUM QUERIES\n    Minimum sleep time in seconds between Google queries\n    Default: 75\n    -min-q, --minimum-queries = 120 | etc.\nMAXIMUM QUERIES\n    Maximum sleep time between Google queries\n    Default: minimum + 50\n    -max-q, --maximum-queries = 180 | etc.\nMINIMUM PAGES\n    Minimum sleep time between Google pages\n    Default: 15\n    -min-p, --minimum-pages = 30 | etc.\nMAXIMUM PAGES\n    Maximum sleep time between Google pages\n    Default: minimum + 10\n    -max-p, --maximum-pages = 60 | etc.\nCOOKIE\n    Specify any number of extra HTTP cookies\n    Google frequently changes cookies, so you may need to specify your own if the default ones no longer work\n    -b, --cookie = SOCS=3301 | etc.\nUSER AGENTS\n    User agents to use\n    Default: random-all\n    -a, --user-agents = user_agents.txt | random[-all] | curl/3.30.1 | etc.\nPROXIES\n    File containing web proxies or a single web proxy to use\n    -x, --proxies = proxies.txt | http://127.0.0.1:8080 | etc.\nDIRECTORY\n    Downloads directory\n    All downloaded files will be saved in this directory\n    -dir, --directory = downloads | etc.\nTHREADS\n    Number of files to download in parallel\n    Default: 5\n    -th, --threads = 20 | etc.\nOUT\n    Output file\n    -o, --out = results.json | etc.\nNO SLEEP ON START\n    Disable the safety feature to prevent triggering rate limits by accident\n    -nsos, --no-sleep-on-start\nDEBUG\n    Enable debug output\n    -dbg, --debug\n```\n\n```fundamental\nChad Extractor v7.5 ( github.com/ivan-sincek/chad )\n\nUsage:   chad-extractor -t template      -res results      -o out         [-s sleep] [-rs random-sleep]\nExample: chad-extractor -t template.json -res chad_results -o report.json [-s 1.5  ] [-rs             ]\n\nDESCRIPTION\n    Extract and validate data from Chad results or plaintext files\nTEMPLATE\n    File containing extraction and validation details\n    -t, --template = template.json | etc.\nRESULTS\n    Directory containing Chad results or plaintext files, or a single file\n    If a directory is specified, files ending with '.report.json' will be ignored\n    -res, --results = chad_results | results.json | urls.txt | etc.\nPLAINTEXT\n    Treat all the results as plaintext files / server responses\n    -pt, --plaintext\nEXCLUDES\n    File containing regular expressions or a single regular expression to exclude content from the page\n    Applies only for extraction\n    -e, --excludes = regexes.txt | \"\u003cdiv id=\\\"seo\\\"\u003e.+?\u003c\\/div\u003e\" | etc.\nPLAYWRIGHT\n    Use Playwright's headless browser\n    Applies only for extraction\n    -p, --playwright\nPLAYWRIGHT WAIT\n    Wait time in seconds before fetching the page content\n    Applies only for extraction\n    -pw, --playwright-wait = 0.5 | 2 | 4 | etc.\nCONCURRENT REQUESTS\n    Number of concurrent requests\n    Default: 15\n    -cr, --concurrent-requests = 30 | 45 | etc.\nCONCURRENT REQUESTS PER DOMAIN\n    Number of concurrent requests per domain\n    Default: 5\n    -crd, --concurrent-requests-domain = 10 | 15 | etc.\nSLEEP\n    Sleep time in seconds between two consecutive requests to the same domain\n    -s, --sleep = 1.5 | 3 | etc.\nRANDOM SLEEP\n    Randomize the sleep time between requests to vary between '0.5 * sleep' and '1.5 * sleep'\n    -rs, --random-sleep\nAUTO THROTTLE\n    Auto throttle concurrent requests based on the load and latency\n    Sleep time is still respected\n    -at, --auto-throttle = 0.5 | 10 | 15 | 45 | etc.\nRETRIES\n    Number of retries per URL\n    Default: 2\n    -r, --retries = 0 | 4 | etc.\nREQUEST TIMEOUT\n    Request timeout in seconds\n    Default: 60\n    -rt, --request-timeout = 30 | 90 | etc.\nUSER AGENTS\n    User agents to use\n    Default: random-all\n    -a, --user-agents = user_agents.txt | random[-all] | curl/3.30.1 | etc.\nPROXY\n    Web proxy to use\n    -x, --proxy = http://127.0.0.1:8080 | etc.\nOUT\n    Output file\n    -o, --out = report.json | etc.\nVERBOSE\n    Create additional supporting output files that end with '.report.json'\n    -v, --verbose\nDEBUG\n    Enable debug output\n    -dbg, --debug\n```\n\n## Images\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ivan-sincek/chad/refs/heads/main/img/single_google_dork.png\" alt=\"(Chad) File Download - Single Google Dork\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 1 - (Chad) File Download - Single Google Dork\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ivan-sincek/chad/refs/heads/main/img/multiple_google_dorks.png\" alt=\"(Chad) Broken Link Hijacking - Multiple Google Dorks\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 2 - (Chad) Broken Link Hijacking - Multiple Google Dorks\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ivan-sincek/chad/refs/heads/main/img/extraction.png\" alt=\"Extraction\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 3 - (Chad Extractor) Extraction\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ivan-sincek/chad/refs/heads/main/img/validation.png\" alt=\"Validation\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eFigure 4 - (Chad Extractor) Validation\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-sincek%2Fchad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivan-sincek%2Fchad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-sincek%2Fchad/lists"}