Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Authentication

matthewD-AVI edited this page Sep 6, 2018 · 4 revisions

Greybox Authentication

Currently ADAPT is setup only for a particular type of authentication, namely to push the login responsibility to the user. The reason for doing this is that websites are too disparate to make an effective generic login script. In order to get graybox testing for ADAPT, the user must provide a python script that gives back the relevant header and cookie information that ADAPT uses.

Creating Authentication Script

Many websites require authentication for ADAPT to use its complete functionality. For this, it is required to write a python authentication script. To use an authentication file, the setting in adapt.config under [AUTH_OPTIONS] named “authmodule” needs to be set to the relative path to the script.

The easiest way to create a script is to modify the existing example named login_format.py. The requirements for the authentication script file is that it must contain a function named “service_auth,” with the username as the first parameter, and the passwords as the second. The script must also return a python dictionary type with several different keys present. This is described in more detail at the header of login_format.py.

Before the script can be properly written, the authentication values and names must first be found. The process to finding these values is described in detail at doc/login_cookie_information.md for the most popular browsers. The cookie information should also be noted, as it will be used as well. Once these values have been obtained, they may now be put into the script. Inside login_format.py (note that the login module can be renamed), the payload variable should be modified so that it matches the format:

payload = {“name_of_parameter”:value, “name_of_parameter2”:value2}

The payload may contain as many parameters as necessary for authentication. Also, the username and password parameter of the function is defined in adapt.config, under [AUTH_OPTIONS].

Then, the variable “login_url” must be changed to the location of the post method, not the page of the authentication. This URL will be shown as the Request URL at the same location the parameters were found.

Next, the session needs to be maintained, which is most often done by cookies. To do this, the variable session_id may need to be modified. The most important part about this is ensure that the correct cookie type is defined. This may take the form of PHPID, JSESSIONID, and several other formats. Whichever type the website uses, session_id needs to be modified such that the first parameter of re.match(…) is “<cookie_type>=(.*?);”, where <cookie_type> is the cookie type, and the quotes are included. This needs to be matched in a later variable named cookie, where the name of the first parameter must also be changed to the correct cookie type.

The last if statement before the return statement is to check if the authentication was successful. This if statement should be changed to check for a specific website if authentication was successful, or if it instead returned an error message.

Not all websites have a csrf token, so please follow the according steps below depending on the website you are trying to access:

No CSRF token:

Place a number sign (#) directly before the variables user_token and payload[“user_token”], as they are not required and will cause the script to crash

Has CSRF token:

For the variable user_token, the value that currently contains {“name”:”user_token”} must be changed so it follows the format {“name”:””}, where is the name of the cookie, not the value of it. Similarly, for the variable payload[“user_token”], the name must be changed to payload[“”] as defined in the previous sentence.

Once these steps have been completed, simply run adapt.py, and if successful a message (“Authentication is available!”) should appear during the authentication process, otherwise an error message will appear, indicating something went wrong.

Clone this wiki locally