├── .cargo
└── config
├── .github
└── workflows
│ └── build.yml
├── Cargo.toml
├── README.md
├── _img
├── Screenshot 2022-09-10 at 00.57.25.png
├── Screenshot 2022-09-10 at 01.34.25.png
├── bitrix.png
├── hackerone.png
└── test.png
├── config.toml
├── install.sh
├── src
├── args.rs
├── build.rs
├── main.rs
├── utils.rs
└── utils
│ └── decider.rs
└── wordlists
├── AEM.txt
├── Apache.txt
├── ApacheTomcat.txt
├── ColdFusion.txt
├── Confluence.txt
├── Django.txt
├── Drupal.txt
├── Flask.txt
├── Flyspray.txt
├── Frontpage.txt
├── GlassFish.txt
├── Golang.txt
├── IIS-ASP.txt
├── Java.txt
├── Jboss.txt
├── Jenkins.txt
├── Joomla.txt
├── Kentico.txt
├── Laravel.txt
├── Lotus.txt
├── MODX.txt
├── Magento.txt
├── Matomo.txt
├── OracleAppServer.txt
├── PHP-Nuke.txt
├── PHP.txt
├── RoundCube.txt
├── SAP.txt
├── Sharepoint.txt
├── Shopware.txt
├── SiteMinder.txt
├── Sitecore.txt
├── Sitefinity.txt
├── Spring.txt
├── Symfony.txt
├── Umbraco.txt
├── Vignette.txt
├── Wordpress.txt
├── flask-wordlist.txt
├── nginx.txt
├── oracle.txt
├── raft-medium-words.txt
├── raft-small-words.txt
└── ror.txt
/.cargo/config:
--------------------------------------------------------------------------------
1 | [target.armv7-unknown-linux-gnueabihf]
2 | linker = "arm-linux-gnueabihf-gcc"
3 |
4 | [target.aarch64-unknown-linux-gnu]
5 | linker = "aarch64-linux-gnu-gcc"
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build-nix:
7 | env:
8 | IN_PIPELINE: true
9 | runs-on: ${{ matrix.os }}
10 | strategy:
11 | matrix:
12 | type: [ubuntu-x64, aarch64]
13 | include:
14 | - type: ubuntu-x64
15 | os: ubuntu-latest
16 | target: x86_64-unknown-linux-musl
17 | name: x86_64-linux-chameleon
18 | path: target/x86_64-unknown-linux-musl/release/chameleon
19 | pkg_config_path: /usr/lib/x86_64-linux-gnu/pkgconfig
20 | - type: aarch64
21 | os: ubuntu-latest
22 | target: aarch64-unknown-linux-gnu
23 | name: aarch64-chameleon
24 | path: target/aarch64-unknown-linux-gnu/release/chameleon
25 | pkg_config_path: /usr/lib/x86_64-linux-gnu/pkgconfig
26 | steps:
27 | - uses: actions/checkout@v2
28 | - name: Install System Dependencies
29 | run: |
30 | env
31 | sudo apt-get update
32 | sudo apt-get install -y --no-install-recommends libssl-dev pkg-config gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu
33 | - uses: actions-rs/toolchain@v1
34 | with:
35 | toolchain: stable
36 | target: ${{ matrix.target }}
37 | override: true
38 | - uses: actions-rs/cargo@v1
39 | env:
40 | PKG_CONFIG_PATH: ${{ matrix.pkg_config_path }}
41 | OPENSSL_DIR: /usr/lib/ssl
42 | with:
43 | use-cross: true
44 | command: build
45 | args: --release --target=${{ matrix.target }}
46 | - name: Strip symbols from binary
47 | run: |
48 | strip -s ${{ matrix.path }} || arm-linux-gnueabihf-strip -s ${{ matrix.path }} || aarch64-linux-gnu-strip -s ${{ matrix.path }}
49 | - name: Build tar.gz for homebrew installs
50 | if: matrix.type == 'ubuntu-x64'
51 | run: |
52 | tar czf ${{ matrix.name }}.tar.gz -C target/x86_64-unknown-linux-musl/release chameleon
53 | - uses: actions/upload-artifact@v2
54 | with:
55 | name: ${{ matrix.name }}
56 | path: ${{ matrix.path }}
57 | - uses: actions/upload-artifact@v2
58 | if: matrix.type == 'ubuntu-x64'
59 | with:
60 | name: ${{ matrix.name }}.tar.gz
61 | path: ${{ matrix.name }}.tar.gz
62 |
63 | # build-deb:
64 | # needs: [build-nix]
65 | # runs-on: ubuntu-latest
66 | # steps:
67 | # - uses: actions/checkout@master
68 | # - name: Install cargo-deb
69 | # run: cargo install -f cargo-deb
70 | # - name: Install musl toolchain
71 | # run: rustup target add x86_64-unknown-linux-musl
72 | # - name: Deb Build
73 | # run: cargo deb --target=x86_64-unknown-linux-musl
74 | # - name: Upload Deb Artifact
75 | # uses: actions/upload-artifact@v2
76 | # with:
77 | # name: chameleon_amd64.deb
78 | # path: ./target/x86_64-unknown-linux-musl/debian/*
79 |
80 | build-macos:
81 | env:
82 | IN_PIPELINE: true
83 | runs-on: macos-latest
84 | steps:
85 | - uses: actions/checkout@v2
86 | - uses: actions-rs/toolchain@v1
87 | with:
88 | toolchain: stable
89 | target: x86_64-apple-darwin
90 | override: true
91 | - uses: actions-rs/cargo@v1
92 | with:
93 | use-cross: true
94 | command: build
95 | args: --release --target=x86_64-apple-darwin
96 | - name: Strip symbols from binary
97 | run: |
98 | strip -u -r target/x86_64-apple-darwin/release/chameleon
99 | - name: Build tar.gz for homebrew installs
100 | run: |
101 | tar czf x86_64-macos-chameleon.tar.gz -C target/x86_64-apple-darwin/release chameleon
102 | - uses: actions/upload-artifact@v2
103 | with:
104 | name: x86_64-macos-chameleon
105 | path: target/x86_64-apple-darwin/release/chameleon
106 | - uses: actions/upload-artifact@v2
107 | with:
108 | name: x86_64-macos-chameleon.tar.gz
109 | path: x86_64-macos-chameleon.tar.gz
110 |
111 | build-windows:
112 | env:
113 | IN_PIPELINE: true
114 | runs-on: ${{ matrix.os }}
115 | strategy:
116 | matrix:
117 | type: [windows-x64, windows-x86]
118 | include:
119 | - type: windows-x64
120 | os: windows-latest
121 | target: x86_64-pc-windows-msvc
122 | name: x86_64-windows-chameleon.exe
123 | path: target\x86_64-pc-windows-msvc\release\chameleon.exe
124 | - type: windows-x86
125 | os: windows-latest
126 | target: i686-pc-windows-msvc
127 | name: x86-windows-chameleon.exe
128 | path: target\i686-pc-windows-msvc\release\chameleon.exe
129 | steps:
130 | - uses: actions/checkout@v2
131 | - uses: actions-rs/toolchain@v1
132 | with:
133 | toolchain: stable
134 | target: ${{ matrix.target }}
135 | override: true
136 | - uses: actions-rs/cargo@v1
137 | with:
138 | use-cross: true
139 | command: build
140 | args: --release --target=${{ matrix.target }}
141 | - uses: actions/upload-artifact@v2
142 | with:
143 | name: ${{ matrix.name }}
144 | path: ${{ matrix.path }}
145 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "chameleon"
3 | version = "1.1.0"
4 | edition = "2021"
5 | build = "src/build.rs"
6 | resolver = "1"
7 | authors = ["youstin"]
8 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
9 |
10 | [dependencies]
11 |
12 | openssl = { version = "0.10.40", features = ["vendored"] }
13 | wappalyzer = { git = "https://github.com/iustin24/wappalyzer" }
14 | config = "0.13.1"
15 | reqwest = { version = "0.11.11" }
16 | tokio = { version = "1.21.0", features = ["macros", "rt-multi-thread"] }
17 | futures = "0.3.24"
18 | url = "2.2.2"
19 | rand = "0.8.4"
20 | indicatif = "0.16.2"
21 | colored = "2.0.0"
22 | clap = { version = "3", features = ["derive"]}
23 | anyhow = "1.0.57"
24 | dirs = "4.0.0"
25 | feroxfuzz = { git = "https://github.com/iustin24/feroxfuzz", branch = "master"}
26 | itertools = "0.10.3"
27 | serde = "1.0.144"
28 | typetag = { version = "0.2.3" }
29 | serde_json = "1.0.87"
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Chameleon
2 |
3 | Chameleon provides better content discovery by using wappalyzer's set of technology fingerprints alongside custom wordlists tailored to each detected technologies.
4 |
5 | The tool is highly customizable and allows users to add in their own custom wordlists, extensions or fingerprints.
6 |
7 | The full documentation is available on:
8 | https://youst.in/posts/context-aware-conent-discovery-with-chameleon/
9 |
10 | ## Installation
11 |
12 | ### Linux 64-bit and MacOS
13 | ```
14 | curl -sL https://raw.githubusercontent.com/iustin24/chameleon/master/install.sh | bash
15 | ```
16 | Running the script will create the directory `~/.config/chameleon/` and download the config file and custom wordlists.
17 |
18 |
19 | ## Example Usage:
20 |
21 | ### Tech Scan + Directory Bruteforce:
22 | ```
23 | > chameleon --url https://example.com -a
24 | ```
25 |
26 |
27 |
28 |
29 |
30 |
31 | ### Options
32 |
33 | ```
34 | OPTIONS:
35 | -a, --tech-detect
36 | Automatically detect technologies with wappalyzer and adapt wordlist
37 |
38 | -A, --auto-calibrate
39 | Automatically calibrate filtering options (default: false)
40 |
41 | -c, --mc ...
42 | Match HTTP status codes from response - Comma separated list [default:
43 | 200,204,301,302,307,401,403,405]
44 |
45 | -C, --fc ...
46 | Filter HTTP status codes from response - Comma separated list
47 |
48 | -h, --help
49 | Print help information
50 |
51 | -i, --include tech
52 | Technology to be included, even if its not detected by wappalyzer. ( -i PHP,IIS )
53 |
54 | -J, --json
55 | Save the output as json
56 |
57 | -k, --config
58 | Config file to use [default: ~/.config/chameleon/config.toml]
59 |
60 | -L, --hosts-file
61 | List of hosts to scan
62 |
63 | -o, --output