Mitmproxy tampering GET and POST request / response in one script
A POST request to a specific URL ( http://test.com ) looks like this:
{
"messageType": "OK",
"city": {
"Name": "Paris",
"Views": {
"1231": {
"id": 4234,
"enableView": false
},
},
"Views": [5447, 8457],
"messages": [{
"id": "message_6443",
"eTag": 756754338
}]
},
"client": {
"Id": 53,
"email": "test@test.us",
"firstName": "test",
"lastName": "test",
"id": 52352352,
"uuid": "5631f-grdeh4",
"isAdmin": false,
I need to intercept this and change "isAdmin" to true.
And a GET request to a specific url ( https://test.com/profiles/ {Random_Numbers} / id}) has a "response" [gzip decoded] JSON
{
"id": 0,
"Code": "Admin",
"display": "RRRR"
}
I need to change the "id" value to 5.
So basically I need to write one script that will do those two.
So far, I've tried using the code examples on Github, but I didn't get the expected result. (I'm a complete noob: \) and hope someone here can help me get started. Thanks in advance!
Edit: As per the code examples on Github, modify_response_body.py:
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 3:
raise ValueError('Usage: -s "modify-response-body.py old new"')
context.old, context.new = argv[1], argv[2]
def response(context, flow):
with decoded(flow.response): # automatically decode gzipped responses.
flow.response.content = flow.response.content.replace(context.old, context.new)`
How do I implement this for my senario?
Perhaps using libmproxy to receive http request and response would be a better idea, perhaps.
source to share
You sent your script and the Python JSON module should get you pretty far:
def response(context, flow):
if flow.request.url == "...": # optionally filter based on some criteria...
with decoded(flow.response): # automatically decode gzipped responses.
data = json.loads(flow.response.content)
data["foo"] = "bar"
flow.response.content = json.dumps(data)
source to share