├── .gitignore
├── requirements.txt
├── GAP
└── images
│ ├── run.png
│ ├── tab.png
│ ├── banner.png
│ └── title.png
├── README.md
├── CHANGELOG.md
└── GAP Help.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | __pycache__
3 | *.class
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | beautifulsoup4
2 | html5lib
3 | urllib3
--------------------------------------------------------------------------------
/GAP/images/run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/e1abrador/GAP-Burp-Extension/main/GAP/images/run.png
--------------------------------------------------------------------------------
/GAP/images/tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/e1abrador/GAP-Burp-Extension/main/GAP/images/tab.png
--------------------------------------------------------------------------------
/GAP/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/e1abrador/GAP-Burp-Extension/main/GAP/images/banner.png
--------------------------------------------------------------------------------
/GAP/images/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/e1abrador/GAP-Burp-Extension/main/GAP/images/title.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## About - v4.7
4 |
5 | This is an evolution of the original getAllParams extension for Burp. Not only does it find more potential parameters for you to investigate, but it also finds potential links to try these parameters on, and produces a target specific wordlist to use for fuzzing.
6 | The full Help documentation can be found [here](https://github.com/xnl-h4ck3r/burp-extensions/blob/main/GAP%20Help.md) or from the Help icon on the GAP tab.
7 |
8 | ## TL;DR
9 |
10 | ### Installation
11 |
12 | 1. Visit [Jython Offical Site](https://www.jython.org/download), and download the latest stand alone JAR file, e.g. `jython-standalone-2.7.3.jar`.
13 | 2. Open Burp, go to **Extensions** -> **Extension Settings** -> **Python Environment**, set the **Location of Jython standalone JAR file** and **Folder for loading modules** to the directory where the Jython JAR file was saved.
14 | 3. On a command line, go to the directory where the jar file is and run `java -jar jython-standalone-2.7.3.jar -m ensurepip`.
15 | 4. Download the `GAP.py` and `requirements.txt` from this project and place in the same directory.
16 | 5. Install Jython modules by running `java -jar jython-standalone-2.7.3.jar -m pip install -r requirements.txt`.
17 | 6. Go to the **Extensions** -> **Installed** and click **Add** under **Burp Extensions**.
18 | 7. Select **Extension type** of **Python** and select the **GAP.py** file.
19 |
20 | ### Using
21 |
22 | 1. Just select a target in your Burp scope (or multiple targets), or even just one subfolder or endpoint, and choose extension **GAP**:
23 |
24 |
25 |
26 | Or you can right click a request or response in any other context and select **GAP** from the **Extensions** menu.
27 |
28 | 2. Then go to the **GAP** tab to see the results:
29 |
30 |
31 |
32 | ## IMPORTANT Notes
33 |
34 | If you don't need one of the modes, then un-check it as results will be quicker.
35 |
36 | If you run GAP for one or more targets from the Site Map view, don't have them expanded when you run GAP... unfortunately this can make it a lot slower. It will be more efficient if you run for one or two target in the Site Map view at a time, as huge projects can have consume a lot of resources.
37 |
38 | If you want to run GAP on one of more specific requests, do not select them from the Site Map tree view. It will be a lot quicker to run it from the Site Map Contents view if possible, or from proxy history.
39 |
40 | It is hard to design GAP to display all controls for all screen resolutions and font sizes. I have tried to deal with the most common setups, but if you find you cannot see all the controls, you can hold down the `Ctrl` button and click the GAP logo header image to remove it to make more space.
41 |
42 | The Words mode uses the `beautifulsoup4` library and this can be quite slow, so be patient!
43 |
44 | ## In Depth Instructions
45 |
46 | Below is an in-depth look at the GAP Burp extension, from installing it successfully, to explaining all of the features.
47 |
48 | **NOTE: This video is from 16th July 2023 and explores v3.X, so any features added after this may not be featured.**
49 |
50 | [](https://www.youtube.com/watch?v=Os3bN0zUROA)
51 |
52 | ## TODO
53 |
54 | - Get potential parameters from the Request that Burp doesn't identify itself, e.g. XML, graphql, etc.
55 | - Add an option to not add the `Tentaive` Issues, e.g. Parameters that were found in the Response (but not as query parameters in links found).
56 | - Improve performance of the link finding regular expressions.
57 | - Include the Request/Response markers in the raised Sus parameter Issues if I can find a way to not make performance really bad!
58 | - Deal with other size displays and font sizes better to make sure all controls are viewable.
59 | - If multiple Site Map tree targets are selected, write the files more efficiently. This can take forever in some cases.
60 | - Use an alternative to `beautifulsoup4` that is faster to parse responses for Words.
61 |
62 | Good luck and good hunting!
63 | If you really love the tool (or any others), or they helped you find an awesome bounty, consider [BUYING ME A COFFEE!](https://ko-fi.com/xnlh4ck3r) ☕ (I could use the caffeine!)
64 |
65 | 🤘 /XNL-h4ck3r
66 |
67 |
68 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## Changelog
2 |
3 | - v4.7
4 |
5 | - Changed
6 |
7 | - When more that one target is selected and the `Auto save` option is selected, GAP attempts to get the Burp project name from the root window to write the accumulated files. If it failed to get the project name, it raised an error and failed to create the files. This bug has been fixed. If GAP is unable to get the project name, it will just write the accumulated file names with `UnknownProject_`.
8 |
9 | - v4.6
10 |
11 | - New
12 |
13 | - Added `video/x-ms-wmv,image/x-png,video/quicktime,image/x-ms-bmp,font/opentype,application/x-font-opentype,application/x-woff,audio/aiff` to the list of MIME types to ignore.
14 | - If a parameter value has a backslash, forward slash, `quot;`,`apos;` or `amp;` in it, they will be removed.
15 |
16 | - Changed
17 |
18 | - After the new footer has been added in the recent version of Burp, some of the GAP controls are covered on a standard display. I have moved things around a bit to ensure they are all visible.
19 | - The functionality to remove the logo header with Ctrl-Click has been removed as is no longer relevant.
20 |
21 | - v4.5
22 |
23 | - New
24 |
25 | - Added `application/x-msdownload` and `application/x-ms-application` to the list of MIME types to ignore.
26 |
27 | - v4.4
28 |
29 | - Changed
30 |
31 | - Added `application/font-otf` to the list of MIME types to ignore.
32 |
33 | - v4.3
34 |
35 | - New
36 |
37 | - Add new Sus parameter group for Mass Assignment as requested in https://twitter.com/nullenc0de/status/1700496197570453700?s=20
38 |
39 | - v4.2
40 |
41 | - Changed
42 |
43 | - Change the test displayed in the Words mode text box if the `beautifulsoup4` module could not be loaded. This will include the installation instructions.
44 |
45 | - v4.1
46 |
47 | - New
48 |
49 | - Add `application/x-font-truetype`, `font/opentype`, `application/x-troff-man` and `image/pjpeg` to `CONTENTTYPE_EXCLUSIONS`.
50 | - Add file extensions `.jfi`,`.jfif`,`.jfif-tbnl`,`.jif`,`.jpe` and `.pjpg` to `DEFAULT_EXCLUSIONS` and `FILEEXT_EXCLUSIONS`. These relate to `image/pjpeg`.
51 | - If debug view is shown then also output the content types that are being processed. This is helpful for myself to add new content-types that should be excluded.
52 | - Only get words from a response if it is a content-type/file that we want to process. This check is done for links and parameters bit wasn't being checked for words.
53 |
54 | - Changed
55 |
56 | - When calling the Burp API callbacks `isInScope` method, don't call if the host without scheme isn't valid, e.g. doesn't match regex `^([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]{2,}$`. This prevents errors that an occur in the Burp API that crashes GAP.
57 | - The `FILEEXT_EXCLUSIONS` list is only checked if the Content-Type of a response isn't found. But there are sometimes cases where the Content-Type of a response is incorrect. Both will be checked to determine whether to get links from a response.
58 | - Change the call `soup.findAll(text=lambda` to `soup.find_all(string=lambda` because `find_all` should be used instead of `findAll` and `text` has now been deprecated and raises a warning.
59 | - When checking tag properties for values, the default was set to Null if it can't get the value, so may cause an error. The default changed to an empty string.
60 | - If a link is found and the last character is `=` or `:`, then remove it.
61 |
62 | - v4.0
63 |
64 | - New
65 |
66 | - Added `Report "Sus" parameters?` option for Parameters mode.
67 | - Added `Show "sus"` option for Parameters mode.
68 | - Raise a Burp custom Issue (not available in Community Edition) if a "Sus" parameter is identified.
69 | - For Community Edition, write details of "Sus" parameters found to the extension output.
70 | - Added `Create lowercase words?` Word option to determine whether to add a lowercase version of a word if it contains any uppercase letters. In previous versions this was done by default.
71 | - Added context help in the form of tool tips on most features and controls of GAP.
72 | - Added `Show context help` option to turn off tool tips the next time GAP is loaded.
73 | - Added `Include relative links?` Parameter option to determine whether to include links in the results if they start with `/./` or `/../`
74 | - Added functionality to get Parameters from the Request that Burp doesn't successfully detect. Initially this will just get parameters within JSON strings.
75 | - Do not get words from a `*.js.map` file. Sometimes these are JSON rather than javascript and end up adding a lot of pointless words like mapping names.
76 | - Ignore certain words if found in `robots.txt`
77 | - Do not include words that are in paths. A lot of these were previously being included even if the `Include URL path words?` option wasn't selected because of the regex to get words was not good enough.
78 | - If you hold down the Ctrl key when clicking the GAP logo header image, it will be removed. This can be used in cases where some controls are not visible on the screen.
79 | - Added the regex part `(\"|\')([A-Za-z0-9_-]+\/)+[A-Za-z0-9_-]+(\.[A-Za-z0-9]{2,}|\/?(\?|\#)[A-Za-z0-9_\-&=\[\]]*)(\"|\')` to the main Link finder regex to get more potential links. Also, ignore any links that then start with `application/`, `image/`, `model/`, `video/`, `audio/` or `text/` because these are content-types that can be confused with links.
80 | - Add `wasnt` to Stop Words list.
81 | - Add `.pdf` to `FILEEXT_EXCLUSIONS` constant.
82 | - Ignore links if they start with `/=` (some false positives).
83 | - When running GAP from the Site Map tree context, the progress bar will say `Getting reqs...` when it is getting the number of requests for the current target.
84 | - When encoding links to display, set `:` and `/` as `safe`. Also replace the value `%C3%83%C2%82%C3%82%C2%A0` which can sometimes occur when the character `Â` occurs instead of ` `.
85 |
86 | - Changed
87 |
88 | - Rewrote the `doeverything` function to deal with the Site Map tree context differently to the other contexts, to improve performance.
89 | - If you start GAP from the Site Map tree, only in scope requests will be checked.
90 | - Removed the `Include common parameters?` check box. This functionality has been removed, partially because of it's limited use, and also to allow for space to add sus parameter options.
91 | - Remove the trailing `&` off the end of the parameter query string.
92 | - If the `Include site map endpoints?` option is selected, then also include URLs of requests in the site map that haven't been requested yet (i.e. found by Burp in crawling), if they are in scope.
93 | - Fix a bug that was including a potential link that had no scheme (e.g. a file name) with AND without a prefixed `/`
94 | - Suppress errors in `addLink` when doing `urlparse`. If an error occurs then the URL will be ignored.
95 | - Only display parameters that contain at least one letter, number or \_
96 | - Improve regex to get more parameters from the response that could be parameters in encoded links
97 | - Display the progress bar as soon as GAP is started so it is clearer it is running if it takes time to get all roots and messages
98 | - Improve the regex for finding links in the responses
99 | - Don't display potential links if they contain any unprintable ASCII characters (0-31)
100 | - Remove the check for `X-SourceMap` because it is already covered by the existing regex
101 | - Improve performance initially when getting the number of messages selected to display in the progress bar
102 | - Improve `sanitizeWord` function to use regex and also remove spaces and %20. Also correct error not replacing %29
103 | - If the Parameter or Word mode `Include URL path words?` option is selected, only get if there is a response. This is because Burp will put links in the sitemap that haven't been requested, but can incorrectly get links with wrong paths that then end up with words that make no sense.
104 | - Get potential words from more `meta` tags, and also get from some relevant `link`-`rel` tags.
105 | - Remove the `Name attribute of meta tags` Parameter option because this has little to no value at all.
106 | - Show relative links without being prefixed with `/`
107 | - Pull request from [bebiksior](https://github.com/bebiksior) to improve word list by splitting words with dash, and also by comma.
108 | - Replace regex `findall`and `search` with pre-compiled statements for better performance.
109 | - Fix logic in `includeContentType` where unnecessary calls were being made. Also just call `includeContentType` once at the start and use the result later instead of calling 3 times.
110 | - Remove `robots.txt` in `DEFAULT_EXCLUSIONS` (not sure why I put it in there in the first place!)
111 | - Change `polyfill.io` to `polyfill` in `DEFAULT_EXCLUSIONS`
112 | - Resolve an issue that can cause CPU to max out if the `Prefix with selected Target(s)` option is selected, and there are a lot of targets selected with many links.
113 | - Remove the test `(?<=\=)\s*\/[0-9a-zA-Z]+[^>\n]*` from the response link Regex because it gives too many false positives and can also end up selected a huge part of JS files and cause performance issues.
114 | - Make a change to the Link regex to make sure that potential links that start with `//` are not followed by any spaces.
115 |
116 | - v3.5
117 |
118 | - Changed
119 |
120 | - Fix a bug that fails to process a root in the site map if it contains a port number.
121 |
122 | - v3.4
123 |
124 | - Changed
125 |
126 | - Fix a bug that was causing the `Show params as query string` option to not display anything if the `Include common parameters` option is not ticked.
127 | - Ensure there is a newline character at the end of the final line on output files.
128 |
129 | - v3.3
130 |
131 | - New
132 |
133 | - Allow GAP to be called from any context, not just the site map.
134 | - Add a `Link exclusion` check box. If this is unselected then ALL links wil be returned without checking the exclusion list.
135 |
136 | - Changed
137 |
138 | - Fix a bug where links that are out of scope are still shown when the `In scope only` option is selected.
139 | - Fix a bug where unicode characters weren't always being converted correctly so some links may not have been successfully extracted.
140 | - Fix a bug where if a link of `*.example.com` was found then it would be reported as `http://.example.com`
141 | - Fix a bug where links with something between parenthesis or curly brackets in part of the subdomain stops the link being identified as being in or out of scope.
142 | - FIx a bug where if a field isn't in the saved config, and exception occurs that prevents the remaining fields being set. Now if an error occurs getting any field from the saved config, it will set a default and continue.
143 |
144 | - v3.2
145 |
146 | - Changed
147 |
148 | - Amend the main link finding regex string to avoid catastrophic backtracking errors that freeze the search and break GAP.
149 | - Fix a bug where the links `Show origin endpoint` and `In scope only` options aren't enabled in some circumstances.
150 | - Ensure output files are closed properly after writing.
151 | - Fix a bug where the `Show origin` of the wrong type was checked when writing output files.
152 |
153 | - v3.1
154 |
155 | - Changed
156 |
157 | - A small fix to ensure that if the `Prefix with selected Target(s)` option is checked that output links do not have `//` after the host
158 |
159 | - v3.0
160 |
161 | - New
162 |
163 | - Add `Show origin endpoint` filter to Parameters and save as part of config when the **Save options** button is pressed.
164 | - If the `Auto save output to directory` option is checked, then files are written as follows:
165 | - Create a sub folder for each root in the target site that was selected in Site Map
166 | - Create a file in the main folder with the name of the Burp project and timestamp, e.g. if the project is called `target`, the files might be `target_20230416_133700_links.txt`, `target_20230416_133700_parans.txt` and `target_20230416_133700_words.txt` where `20230416` is the current date in `YYYYMMDD` format and `133700` is the current time in `HHMMSS` format. These files will contain what was found for ALL roots selected.
167 | - Within each sub folder, the files will only contain findings for that particular root. If there are no findings for a mode, then a file will not be created for that mode.
168 | - If the `Include common parameters` option is checked and the Parameter `Show origin endpoint` is checked, the common parameters are displayed and written to file with `[GAP]` instead of a Link where the parameter was found.
169 |
170 | - Changed
171 | - You can now select sub folders, or specific requests, from the Site Map to process with GAP.
172 | - The `Show origin endpoint` option for Parameters and Links, and the `In scope only` option are applied to what is displayed AND what is written to file.
173 | - If a link is found that has a different scheme than http or https, the `URL(link).getHost()` method returns blank. This previously resulted in the link not being checked if it was in scope and incorrectly included. This has been fixed.
174 | - Make changes to the functions that display links, parameters and words to improve speed and use less memory.
175 | - Parameters and words from path words were not correctly checked whether they are in scope or not. This has been fixed.
176 | - If a link has `\s` or `\S` in it, don't include as it's most likely a regex string, not a link.
177 | - If one mode finishes before others are, allow any filters to be used on the finished panels, even if the others aren't complete.
178 | - If Origin is written to the Links or Params file, only separate the URL and \[ORIGIN\] with one space. Two spaces are used in the UI to make it easier to view.
179 | - Suppress warnings from the beautifulsoup4 library.
180 |
181 | - v2.9
182 |
183 | - New
184 |
185 | - Add new checkbox "Prefix with selected Target(s)". If selected, any links found that don't have a domain will be prefixed with each target root that was selected in the Site Map when running GAP.
186 | - Added some tool tips
187 |
188 | - Changed
189 |
190 | - The "Prefix with links(s)" (was previously called "Link Prefix") can now have multiple links separated by a semicolon. If a schema is left off a link then it will be added on. If the field has invalid values, the text will be displayed in red, indicating it needs to be fixed. Links will be output with each prefix
191 |
192 | - v2.8
193 |
194 | - New
195 |
196 | - When GAP is searching, the tab caption will say **GAP\*** instead of **GAP**. Also, when complete, and the user is not on the GAP tab, the title will show **GAP** in Burp Orange. The text is reset to default colour when another target is searched of if any options are changed.
197 |
198 | - v2.7
199 |
200 | - New
201 |
202 | - Sanitize words before adding them to the list, e.g. remove `"`,`%22`, `<`, `%3c`, etc.
203 | - If a potential parameter has a `?` in it, then just get the value after the `?` as the parameter
204 |
205 | - Changed
206 |
207 | - Add more parameter names to the `COMMON_PARAMS` constant.
208 |
209 | - v2.6
210 |
211 | - Changed
212 |
213 | - For Parameters, Links and Words, check if the string being added contains any unicode characters. If it does, then URL encode the characters before adding them to the lists to display and output. This change prevents a number of errors output and also prevents Burp from freezing with certain conditions.
214 |
215 | - v2.5
216 |
217 | - New
218 |
219 | - Get more potential parameters from responses based on patterns like `?param=` and `¶m=`
220 |
221 | - Changed
222 |
223 | - Only get parameters from responses that don't have content types of file types in the given exclusions.
224 |
225 | - v2.4
226 |
227 | - New
228 |
229 | - Add `FILEEXT_EXCLUSIONS` constant that are file extensions we do not want to check for links. If a content type cannot be found then the extension in a URL (if there is one) will be used to check against this list and exluded if necessary.
230 |
231 | - Changed
232 | - Add these content types to the `DEFAULT_CONTENTTYPE_EXCLUSIONS` constant, and the `contentExclude` section of `config.yml`: `application/zip,application/x-zip-compressed,application/x-msdownload,application/x-apple-diskimage,application/x-rpm,application/vnd.debian.binary-package`
233 |
234 | - v2.3
235 |
236 | - New
237 | - Re-introduce the option of viewing parameters in a concatenated query string. There is now a check box below the parameter list that can be used to switch views.
238 |
239 | - v2.2
240 |
241 | - Changed
242 | - Encode parameters, links and words to ASCII before adding them to lists so that no unicode errors occur when displaying them.
243 | - Change error message for bs4 not installed to include a link to the installation instructions on github.
244 |
245 | - v2.1
246 |
247 | - Changed
248 | - Minor bug fix and improvement
249 |
250 | - v2.0
251 |
252 | - New
253 |
254 | - Add **Words** mode that will produce a target specific wordlist.
255 | - Add options for **Words** mode.
256 | - Add an option to provide a prefix for links that are found that don't have a domain.
257 | - Add `requirements.txt` file for external modules that are needed for GAP.
258 | - Add a progress bar to show how many requests per root are being processed.
259 | - Add a **Buy Me a Coffee** button.
260 | - Add `banner.png` to use on extension tab.
261 |
262 | - Changed
263 | - Sooooo many minor bug fixes to mention :)
264 | - Allow user to select a sub folder of a site mop root, or even just one endpoint to process.
265 | - Get links from the response headers too. It should have been doing this already, but wasn't.
266 | - When **Include site map endpoints in link list** option is selected, return the full URL, not just the path.
267 | - Fixed bug when saving files on Linux.
268 |
--------------------------------------------------------------------------------
/GAP Help.md:
--------------------------------------------------------------------------------
1 | GAP by @xnl_h4ck3r
2 |
3 | This is an evolution of the original getAllParams extension for Burp. Not only does it find more potential parameters for you to investigate, but it also finds potential links to try these parameters on, and produces a target specific wordlist to use for fuzzing.
4 | This code is far from perfect, but any constructive criticism is very much welcome! I hope this tool helps you.
5 |
6 |
7 | Acknowledgments:
8 | Respect and thanks go to @HolyBugx for help with ideas, testing and patience!
9 | A shout out to Gerben Javado and his amazing tool Link Finder who's regular expression (regex) provided the starting point for the Link mode in GAP.
10 |
11 | How to Install
12 |
13 | - Visit Jython Offical Site, and download the latest stand alone JAR file, e.g.
jython-standalone-2.7.3.jar.
14 | - Open Burp, go to Extensions -> Extension Settings -> Python Environment, set the Location of Jython standalone JAR file and Folder for loading modules to the directory where the Jython JAR file was saved.
15 | - On a command line, go to the directory where the jar file is and run
java -jar jython-standalone-2.7.3.jar -m ensurepip.
16 | - Download the
GAP.py and requirements.txt from this project and place in the same directory.
17 | - Install Jython modules by running
java -jar jython-standalone-2.7.3.jar -m pip install -r requirements.txt.
18 | - Go to the Extensions -> Installed and click Add under Burp Extensions.
19 |
- Set Extension type to Python and select the
GAP.py file
20 | - Click Next and you're good to go 🤘
21 |
22 | How to Run
23 | You can run GAP from a single request/response, or multiple, from any context in Burp. For example, you can run for a single request in Repeater, a group of requests in Proxy History, request in the Site Map contents, etc. However, the most common option will probably be from the Site Map tree view. IMPORTANT: Make sure you have scope set before running from this context.
24 | On the Target -> Site map tab of Burp you can select a specific host, a selection of hosts (holding down Ctrl or Shift), or all hosts (using Ctrl-A), or even select a specific sub folder or specific endpoints.
25 | Once the required endpoints are selected, right click and select Extensions -> GAP to run the tool.
26 | Go to the GAP tab and see the results. What gets returned will depend on the options selected, and these will all be described below.
27 | For very large projects (and depending on what options were selected), it can sometimes take GAP a little while to run. If for some reason it hasn't completed and you want to cancel the current run to change options for example, you can do this by pressing the CANCEL GAP button.
28 | If you try running GAP again while it is still running, it will CANCEL the current run before starting the new one.
29 |
30 |
GAP Mode
31 | There are 3 different modes for GAP, Parameters,Links and Words. They can either be run separately, or together, depending on what you select.
32 | What each mode does will be explained below, but if you don't need all enabled then unselecting them can use less memory and get results back quicker.
33 |
34 | Parameters Mode
35 |
36 | When the GAP Mode of Parameters is selected then GAP will try to find as many potential parameters based the following options:
37 |
38 |
39 | - Include URL path words? - The words in the response URL path are included as potential parameters if the URL is in scope.
40 | - Report "sus" parameters? - If a "sus" parameter is identified, a Burp custom Issue will be raised (unavailable in Burp Community Edition). There will be no markers in the Request/Response of the Issue showing where the named parameter can be found because including this functionality seriously increases the time GAP can take to run, so this is not a feature at the moment. For Burp Community Edition, the details of the parameter will be written to the extension output.
41 |
42 |
43 | Request Parameters
44 | These are mainly parameters that Burp itself identifies from HTTP requests and are part of the Burp Extender API IParameter interface
45 |
46 | - Query string params - PARAM_URL; a parameter within the URL query string
47 | - Message body params - PARAM_BODY; a parameter within the message body
48 | - Param attribute in multi-part message body - PARAM_MULTIPART_ATTR; the value of a parameter attribute within a multi-part message body (such as the name of an uploaded file)
49 | - JSON params - PARAM_JSON; an item of data within a JSON structure
50 | - Cookie names - PARAM_COOKIE; an HTTP cookie name
51 | - Items of data in XML structure - PARAM_XML
52 | - Value of tag attribute in XML structure - PARAM_XML_ATTR
53 |
54 | Additionally, GAP will also report any parameters in the Request where the Burp API doesn't always successfully detect them:
55 |
56 | - JSON format
57 | - GraphQL request (COMING SOON)
58 | - XML request (COMING SOON)
59 |
60 |
61 | Response Parameters
62 |
63 | These are potential parameters that can be found in the HTTP responses. These are identified by GAP itself rather than through the Burp Extender API.
64 |
65 |
66 | - JSON params - if the response has a MIME type of JSON then the Key names will be retrieved
67 | - Value of tag attributes in XML structure - if the response has a MIME type of XML then the XML attributes are retrieved
68 | - Name and Id attributes of HTML input fields - if the response has a MIME type of HTML then the value of the NAME and ID attributes of any INPUT tags are retrieved
69 | - Javascript variables and constants - javascript variables set with
var, let or const are retrieved. NOTE: Improvements are needed to retrieve more variables as there are many ways that these can be declared and difficult to retrieve all from regex.
70 | - Params from links found - THIS OPTION IS ONLY ENABLED IF LINKS MODE IS ALSO USED. Any URL query string parameters in potential Links found will be retrieved, only if they are clearly in scope, or there is just a path and no way of determining if it is in scope.
71 |
72 |
73 | Links Mode
74 |
75 | When the GAP Mode of Links is selected then GAP will try to find possible links based on the following. Also, only requests of a certain Content-Type are checked for potential links. This is determined by the constant CONTENTTYPE_EXCLUSIONS in the code (these are types such as images, video, audio, fonts, etc.)
76 |
77 |
78 | - Prefix with selected target(s) - If checked, the root of each target selected in the Site Map will be prefixed to any links found that do not have a domain, e.g.
/api/user/1
79 | - Prefix with link(s) - If checked, the value(s) in the text field will be prefixed to any links found that do not have a domain, e.g.
/api/user/1. Multiple domains can be provided, separated by a semicolon, e.g. http://example.com;https://sub.example.com
80 | - Also include un-prefixed links - If the Prefix with selected target(s) or Prefix with link(s) option is checked then this option can be checked to include the original un-prefixed link in addition to the prefixed link.
81 | - Include site map endpoints? - This will include endpoints from the Burp Site map (what was selected) in the potential Link list, if they are in scope.
82 | - Include relative links? - If checked, links found that start with `./` or `../` will be included in the results.
83 | - Link exclusions - If the option is selected it will be applied when run. The text field contains a comma separated list of values. If any of these values exists in a potential link found, then it will be excluded from the final list. There is a initial default list determined by the
DEFAULT_EXCLUSIONS constant, but you can change this and save your settings. If the option is not selected, all links will be returned.
84 |
85 |
86 | Words Mode
87 |
88 | When the GAP Mode of Words is selected then GAP will produce a target specific wordlist from the responses searched.
89 |
90 |
91 | - Create lowercase words? - Any word found that contains an uppercase letter will also be added as an all lowercase word.
92 | - Create singular/plural word? - If checked, then for each word found, a suitable singular or plural version will also be added to the output.
93 | - Include HTML comments? - If checked, all words within HTML comments will be considered.
94 | - Include IMG ALT attribute? -If checked, all words with the
ALT attribute of IMG tags will be considered.
95 | - Include words with digits? - If un-checked, then any words with numeric digits will be excluded from output.
96 | - Include URL path words? - Any path words in selected links will be added as words.
97 | - Include potential params - This option is only shown if the Parameters Mode is enabled. If selected, all potential params will also be added to the word list.
98 | - Maximum length of words - The maximum length of words that will be output (this excludes plurals of minimum length words). This can be a minimum of 3.
99 | - Stop words - The term stop words comes from Natural Language Processing where they are common words that will be excluded from content. If a word exists in this list before running, then it will be excluded from output.
100 |
101 |
102 | In addition to the options above, words will be taken from all responses with certain conditions:
103 |
104 |
105 | - Only responses with content types are searched. The defaults are
text/html,application/xml,application/json,text/plain,application/xhtml+xml,application/ld+json,text/xml
106 | - Words from
<meta> tag content where:
107 |
108 | - Property is
og:title, og:description, title, og:site_name or fb:admins
109 | - Name is
description, keywords, twitter:title, twitter:descriptionapplication-name, author, subject, copyright, abstract, topic, summary, owner, directory, category, og:title, og:type, og:site_name, og:description, csrf-param, apple-mobile-web-app-title, twitter:label1, twitter:data1, twitter:label2, twitter:data2 or twitter:title
110 |
111 | - Words from
<link> tag title where:
112 |
113 | - Rel is
alternate, index, start, prev, next or search
114 |
115 | - Words from the rest of the inner HTML of the page, excluding tags
<style>, <script> and <link>
116 |
117 |
118 | GAP Output
119 | Below is an explanation of the output given when GAP has completed running.
120 |
121 | Potential Parameters
122 |
123 | - Potential parameters found - This text are will show all unique potential parameters, one per line.
124 | - Show origin - If this feature is ticked, the potential parameter will be followed by the HTTP request endpoint (in square brackets) that the parameter was found in. A parameter could have been found in more than one request, so this view can show duplicate links, one per origin endpoint.
125 | - Show "sus" - If this feature is ticked, only potential parameters that are "sus" are shown followed by the associated vulnerability type(s) (in square brackets).
126 | - Show query string with value - This checkbox can be used to switch between the list of parameters and a concatenated query string with all parameters with a value given in the following text box.
127 | - Param Value - This defaults to XNLV and is a value that is used to create the concatenated query string, with each parameter given this value followed by a unique number of the parameter. This query string can be used to manually append to a URL and check for reflections.
128 |
129 | Potential Links
130 |
131 | - Potential links found - This text area will show potential links found. Without any of the other options described below selected, all unique endpoints found are displayed, one per line.
132 | - Show origin endpoint - If this feature is ticked, the potential link will be followed by the HTTP request endpoint (in square brackets) that the link was found in. A link could have been found in more than one request, so this view can show duplicate links, one per origin endpoint.
133 | - In scope only - If this feature is ticked, and the potential links contain a host, then this link will be checked against the Burp Target Scope. If it is not in scope then the link will be removed from the output. NOTE: If it is not possible to determine the scope (e.g. it may just be a path without a host) then it will be included as in scope to avoid omitting anything potentially useful.
134 | - Link filter - any value entered in the Filter input field followed by ENTER or pressing Apply filter will determine which links will be displayed. This can depend on the values of the following two options:
135 | - Negative match - If selected, any link containing the Filter text will NOT be displayed. If unselected, then only links containing the filter will be displayed.
136 | - Case sensitive - If selected, the value is the Filter input field will be case sensitive when determining which Links to display.
137 |
138 | The filter is something that is applied after GAP has run. It allows you to look for specific things when there are many results. For example, enter .js to only show the links to javascript files. As soon as you clear the filter, the original results are redisplayed.
139 |
140 | An additional feature of GAP is to automatically include links of valid .js.map (javascript source map) files. These are identified by responses that contain the //# sourceMappingURL line, or have a HTTP header of SourceMap or X-SourceMap.
141 |
142 | To find links, a complex regex is used to look for different formats and contexts for potential links and files. This regex was initially based on the one used in Link Finder by Gerben Javado, but has been evolved to try and identify more with minimal false positives.
143 | Words
144 |
145 | - Words found - This text are will show all unique words, one per line.
146 | - Show origin - If this feature is ticked, the words will be followed by the HTTP request endpoint (in square brackets) that the word was found in. A word could have been found in more than one request, so this view can show duplicate links, one per origin endpoint. If the word was generated by GAP (e.g. a plural or singular version) then it will be followed by
[GAP] instead of an origin endpoint.
147 |
148 |
149 | Other options
150 |
151 | - Show contextual help - If selected, hovering over any features of GAP will give contextual help for that feature.
152 | - Auto save output to directory - If this option is checked then when GAP completes a run, a file will be created with the potential parameters, with potential links, and target specific wordlist. These files will be created in the specified directory. If the directory is invalid then the users home directory will be used.
153 |
- Choose... - the button can be used to select the required directory to store output files.
154 |
155 | If the Auto save output to directory option is checked, then files are written as follows:
156 |
157 | - Create a sub folder for each root in the target site that was selected in Site Map
158 | - Create a file in the main folder with the name of the Burp project and timestamp, e.g. if the project is called
target, the files might be target_20230416_133700_links.txt, target_20230416_133700_parans.txt and target_20230416_133700_words.txt where 20230416 is the current date in YYYYMMDD format and 133700 is the current time in HHMMSS format. These files will contain what was found for ALL roots selected.
159 | - Within each sub folder, the files will only contain findings for that particular root. If there are no findings for a mode, then a file will not be created for that mode.
160 |
161 | NOTE: The project name is taken from the Burp title. If you use the Sharpener Burp Extension then changing the Title will affect the naming of the files.
162 |
163 |
164 |
GAP Settings
165 | When GAP is first started, it will start with default settings.
166 | Any changes made to the configuration settings of GAP can be saved for future use by clicking the Save options button.
167 | If for any reason you want to revert to the default configuration options, you can click the Restore defaults button.
168 |
169 |
Troubleshooting and Feedback
170 | It is hard to design GAP to display all controls for all screen resolutions and font sizes. I have tried to deal with the most common setups, but if you find you cannot see all the controls, you can hold down the Ctrl button and click the GAP logo header image to remove it to make more space.
171 | If you have any problems with GAP, you can report an issue on Github. Before you report an issue, please look at the Extender -> Extensions tab in Burp, click on the GAP extension in the list and include details of any output displayed on the Errors tab with your issue. If you know of a parameter or link that you believe GAP should/shouldn't have identified then please provide as much info as possible, e.g. the options you had selected, the relevant endpoint, etc.
172 |
173 |
174 |
Important Notes
175 | If you don't need one of the modes, then un-check it as results will be quicker.
176 |
177 | If you run GAP for one or more targets from the Site Map view, don't have them expanded when you run GAP... unfortunately this can make it a lot slower. It will be more efficient if you run for one or two target in the Site Map view at a time, as huge projects can have consume a lot of resources.
178 |
179 | If you want to run GAP on one of more specific requests, do not select them from the Site Map tree view. It will be a lot quicker to run it from the Site Map Contents view if possible, or from proxy history.
180 |
181 | It is hard to design GAP to display all controls for all screen resolutions and font sizes. I have tried to deal with the most common setups, but if you find you cannot see all the controls, you can hold down the `Ctrl` button and click the GAP logo header image to remove it to make more space.
182 |
183 |
184 |
185 | Thank you for trying out GAP!
186 | Good luck and good hunting!
187 | If you really love the tool (or any others), or they helped you find an awesome bounty, consider BUYING ME A COFFEE! ☕ (I could use the caffeine!)
188 | @xnl-h4ck3r
189 | 🤘
190 |
191 |
--------------------------------------------------------------------------------