4 ms·
Author(s) here - happy to answer any questions and take feedback! :)
by mhils 10y ago
Author(s) here - happy to answer any questions and take feedback! :)
- echelon 10y agoWhy the sudden bump to a 1.0 version number? And why the planned jump to 2.0 in February? (I'd really like to see that blog post you're alluding to. :) Congrats on the release!
- cortesi 10y agoIt probably has to do with psychology more than anything. My mental model of this sort of development (if you'll permit me to be a bit florid) is of an eternal pilgrimage of small incremental improvements, without any fixed destination or many real landmarks along the way. The TODO list for mitmproxy has never grown shorter (and never will), so I just never reached a point where declaring a 1.0 was obviously right. I realise this is eccentric, doesn't reflect the maturity of the project, and is probably not the way my co-maintainers think about this, hence the change. For much the same reason, I'd like to de-emphasise major version increments as flag-fall events. Incrementing the major version inline with our development cadence makes sense from that perspective.
- echelon 10y agoExcellent answer! Makes a lot of sense. Thanks!
- capt8bit 10y agoMany thanks to you, cortesi, and the rest of the team. I hope this doesn't mean that the command-line interface is going to become a second-class interface? The CLI is what originally attracted me to mitmproxy. Having CLI keyboard shortcuts helped me immediately speed up my workflow faster than I was ever able to customize ZAP or Burp. I love mitmproxy and use it for all my web application pentests. The flexibility is amazing, and allows me to quickly adapt, or write a rewrite rule or plugin, in any situation. Regex rules for limits and intercepts are amazing too. Keep up the good work.
- cortesi 10y agoThe console interface will always remain a first-class interface. We plan to bring mitmweb up to feature parity with the console, after which we'll make sure that neither tool has capabilities the other doesn't. I'm super excited about the new possibilities the web interface opens up for the project (watch this space), but the command-line tool is wired into my fingers. :)
- mhils 10y ago> I hope this doesn't mean that the command-line interface is going to become a second-class interface? No worries - the command line interface is definitely staying a first-class interface. We're also planning to mirror the CLI keyboard shortcuts in the web interface (to the extent possible). Some are already in, others are coming. :)
- tptacek 10y agoThat's interesting to me. Can you describe your Burp workflow, and how you accomplish the same things in mitmproxy? One of the things we're doing this year for our clients is selling them on the idea of doing basic security integration testing as part of their normal dev process, which might involve these companies buying copies of Burp for their team. But I could probably be convinced that mitmproxy would work just as well. (I am, for what it's worth, extremely familiar with Burp, but only casually acquainted with mitmproxy).
- capt8bit 10y ago> (I am, for what it's worth, extremely familiar with Burp, but only casually acquainted with mitmproxy). You may be disappointed, since I am the opposite. I use burp in rare cases now, since I've been using mitmproxy for so long. >That's interesting to me. Can you describe your Burp workflow, and how you accomplish the same things in mitmproxy? You may also be disappointed on how my methodology might differ. I work for a shop that performs grey-box (authenticated) web application tests that focus on manual comprehensive coverage. So my work flow goes something like this: - Manually walk the entire authenticated application, or designated portion. Populating all areas and using all application functionality. - Analyze mitmproxy logs to identify all application entry points, and other OWASP areas of interest. (mitmproxy's "Limit" feature makes this fast and easy) - Manually Test every endpoint, or other item, by duplicating the request, editing, and resending. This is pretty basic, so I'm sure you see how this could be done with burp's repeater and intruder, which were the main areas I used. In mitmproxy you can easily duplicate a flow, edit it, and resend it. Then, based on the response, resend it again. That's what I do for API testing, for web application testing it is usually closer to: - Stage requests in Hackbar on Firefox and send the request, which goes through mitmproxy. - Use Mitmproxy for fine-tuning anything, watching the details, and scripting the tedious. > One of the things we're doing this year for our clients is selling them on the idea of doing basic security integration testing as part of their normal dev process, which might involve these companies buying copies of Burp for their team. But I could probably be convinced that mitmproxy would work just as well. My basic common work flow is probably not very helpful in this case, but I think mitmproxy could still be very helpful to you. You probably know that mitmproxy can replay a series of requests, and has a great scripting API. I think these two features could be used together to meet a lot of your needs. Let me tell you about some of my experiences: In some cases a customer just can't get their fix quite right, so I will need to repeatedly perform a series of tedious steps to retest an issue. So, I automate the process by using mitmproxy to save a file of the steps involved in testing the vulnerability. This may be something like: Log in -> Create widget -> edit widget -> destroy widget -> submit note Then, I can pass this to mitmdump to be replayed, with sticky-cookies enabled, and I just watch the output to make sure the output is correct. As far as scripting goes, you may be interested in cases where I wanted to quickly test every input parameter for input validation of a list of characters. The script I wrote would be run on every request I made to the site I was testing, if it was a post request it would do the following: - Duplicate the request for every POST parameter in the request - Inject the list of characters in to the post parameter - Run/Replay the new request Hopefully you can make sense of my examples. I think by replaying request, or writing simple testing scripts, you could automate a lot of the basic security integration testing. The beautiful thing about mitmproxy is that it has a simple, powerful, scriptable, core. By using the powerful building-blocks it's provided I can make it do whatever I want it to do. But, it may require a little python scripting. Let me know if want additional attempts at clarification. edited for formatting
- Eridrus 10y agoI tried to use mitmproxy to fiddle around with ad requests a while back and found it really hard to get good performance from it. All I wanted to do was find all responses that looked like XML (regardless of headers) and do some simple replacements. Even after fiddling with settings to make it not buffer large responses it was still slow enough that it really affected my general web browsing through it. I ended up using Fiddler instead, and found the performance much better right out of the gate. Which is unfortunate since I can't really share Fiddler scripts with people on osx/linux.
- jaimex2 10y agoIts written in Python so performance will never be its strong point. Your regex might have been too greedy or you were throwing an entire network at it?
- Eridrus 10y agoI was running it on my laptop, MITMing only my own browsing. I was using something like "<?xml" in body to check for xml, then do a few additional checks, so unless the string in operator sucks perf wise I don't think there was much to do. I'm not expecting miracles, just reporting what I experienced. Maybe some form of multiprocess architecture would help alleviate these issues, maybe running it via Jython would have been better, I don't really know much about Python performance.
- rahrahrah 10y agoCan you mitm HTTPS? I'm guessing that the client would get some sort of certificate warning?
- 8ig8 10y agoYes... http://docs.mitmproxy.org/en/latest/certinstall.html http://docs.mitmproxy.org/en/latest/certinstall.html
- chrisweekly 10y agoYes. You simply need to install a mitmproxy cert. https://mitmproxy.org/doc/certinstall.html https://mitmproxy.org/doc/certinstall.html