Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sucof/pipedream
pipedream socket fuzzer with capture and replay
https://github.com/sucof/pipedream
Last synced: 5 days ago
JSON representation
pipedream socket fuzzer with capture and replay
- Host: GitHub
- URL: https://github.com/sucof/pipedream
- Owner: sucof
- Created: 2015-06-07T02:56:24.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-06-06T10:31:52.000Z (over 9 years ago)
- Last Synced: 2024-06-11T05:33:32.928Z (5 months ago)
- Language: Python
- Homepage: https://www.facebook.com/pages/Arisun-Restaurant/137838556265499
- Size: 142 KB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# "pipedream" fuzzer
The pipedream proxy is a pure-python single-threaded proxy server, designed to
capture traffic and replay it with modifications, to identify vulnerabilities
in both networked and desktop software.In it's 'capture' mode, this captures a socket conversation as a .cnv file,
which can then be used in the 'replay' mode to simulate a client, as well as
a 'fuzz' mode to inject random faults. A 'data editor' is also included
which can be used to edit captured conversations before use.*Note: it is strongly recommended that a fuzz file be edited before trying to
emulate a server*## basic use (no fuzzing)
The first step of using the fuzzer is to capture a socket conversation. This
is done with the "capture" mode, which sets up a socket proxy, as follows. The
example below captures traffic to the google web server, withoutpipedream.py -m capture -i localhost:8082 -o www.google.com:80 -f google
Then, the saved format spec file can be used to emulate either the client or
the server, as follows:pipedream.py -m replay -o www.google.com:80 -f google-12345.cnv
pipedream.py -m replayserver -o localhost:8081 -f google-12345.cnvTo introduce mutations, use the -c flag, to specify the percent chance that
a given node will mutate.## basic use (editor)
This fuzzer also includes a editor, which can modify conversation files. This
can be accessed via:pipedream.py -m edit -f google-12345.cnv
## practical example (fuzzing a browser)
The first step is to capture a browser's request / response pair, as follows:python pipedream.py -m capture -i localhost:4040 -o www.blah.com:80 -f creche
For the purposes of this demo, a socket conversation has already been prepared,
simulating a conversation between a user's browser and reddit (sample.cn_). Make
a copy of this, and open it up in the editor:python pipedream.py -m edit -f herpaderp-10348.cnv
Use the "p" command to inspect the socket conversation: note that it includes two
requests, and both responses are split into two recv calls:[####] : p
[ 0 -> len:0x0162 ] [ 47 45 54 20 2f 63 64 6e GET /cdn ]
[ 1 <- len:0x0550 ] [ 48 54 54 50 2f 31 2e 31 HTTP/1.1 ]
[ 2 <- len:0x1018 ] [ 95 1c 5c 5b 3b ff ad b5 ..\[;... ]
[ 3 -> len:0x0179 ] [ 47 45 54 20 2f 63 64 6e GET /cdn ]
[ 4 <- len:0x0550 ] [ 48 54 54 50 2f 31 2e 31 HTTP/1.1 ]
[ 5 <- len:0x2800 ] [ c5 8d 22 22 62 44 44 44 ..""bDDD ]
[ 6 <- len:0x12bb ] [ cd 15 22 38 1f fe 3b 17 .."8..;. ]
[####] : qNote that this describes two HTTP requests, and the responses for both of these
have been split into two pieces (i.e. two recv calls). We can delete the last 3
and merge the first two responses, as follows:d 6
d 5
d 4
d 3
s 1
swallow 2
save
p allThe end result should look like this:
[####] : p
[ 0 -> len:0x0162 ] [ 47 45 54 20 2f 63 64 6e GET /cdn ]
[ 1 <- len:0x1568 ] [ 48 54 54 50 2f 31 2e 31 HTTP/1.1 ]
[####] :Now, select the second node, and bind it to the GET keyword:
s 1
bind .*GET.*
p all
saveNow, emulate the server with the following:
python pipedream.py -m replayserver -f herpaderp-10348.cnv -c 100 -i localhost:4040
This will open up a server on localhost:4040. Use your browser, and access
this port: in response to a standard GET request, you will get a malformed
response. Note that this may not render correctly, due to the HTTP response
headers being broken.