constricting the web
play

Constricting the Web Offensive Python for Web Hackers Yes, We are - PowerPoint PPT Presentation

Constricting the Web Offensive Python for Web Hackers Yes, We are Weird Marcin Wielgoszewski Security Engineer Nathan Hamiel Principal Consultant Associate Professor at UAT This is Important Reliance on


  1. Constricting the Web Offensive Python for Web Hackers

  2. Yes, We are Weird Marcin ¡Wielgoszewski Security ¡Engineer Nathan ¡Hamiel Principal ¡Consultant Associate ¡Professor ¡at ¡UAT

  3. This is Important • Reliance ¡on ¡tools ¡can ¡= ¡Fail! – Many ¡more ¡people ¡tes4ng ¡web ¡apps – Vendors ¡play ¡catch-­‑up – Success ¡is ¡on ¡your ¡shoulders • Difficult ¡cases – APIs ¡and ¡specialized ¡data ¡formats – Sequenced ¡opera4ons ¡ – Randomized ¡data Black Hat USA 2010

  4. An AppSec Intervention Your ¡tools ¡are ¡ killing ¡you Black Hat USA 2010

  5. Gimme The Codes • Presenta4on ¡materials – hIp://hexsec.com/docs Black Hat USA 2010 5

  6. Modern Infrastructure Black Hat USA 2010

  7. Why Python? • Language ¡specific – Rapid ¡development – Easy ¡to ¡understand – Whitespace ¡is ¡significant ¡  • Wide ¡support – Plenty ¡of ¡security ¡tools ¡wriIen ¡in ¡Python – Vast ¡set ¡of ¡exis4ng ¡modules – Help ¡available ¡<here> Black Hat USA 2010

  8. A Few Tools sulley Scapy Pyscan w3af SpikeProxy MonkeyFist sqlmap PyEMU wapi4 DeBlaze Canvas Peach ProxyStrike Idapython Pcapy PyDbgEng MyNav Impacket uhooker Python-­‑ptrace Black Hat USA 2010

  9. Where Does Python Fit? Black Hat USA 2010

  10. Python Implementations • CPython – hIp://python.org • Jython – hIp://jython.org • IronPython – hIp://ironpython.net Black Hat USA 2010

  11. First Things First • Walk ¡like ¡a ¡duck ¡and ¡quack ¡like ¡a ¡duck Black Hat USA 2010

  12. Helpful Modules 3 rd ¡Party Standard ¡Lib • hIplib • hIplib2 • urllib ¡/ ¡urllib2 • urllib3 ¡/ ¡restkit • urlparse • lxml • HTMLParser • suds • struct • PyAMF • xml • PyQT • json ¡(Python ¡2.6) • difflib Black Hat USA 2010

  13. Basic HTTP Clients • Examples Black Hat USA 2010

  14. Trust But Verify • ReflectRequest.py – Uses ¡reimplementa4on ¡of ¡BaseHTTPRequestHandler – GET, ¡POST, ¡PUT, ¡and ¡DELETE class ¡RequestHandler(BaseHTTPRequestHandler): ¡ ¡ ¡ ¡def ¡do_GET(self): ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡request_path ¡= ¡self.path ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡print("\r\n-­‑-­‑-­‑-­‑-­‑ ¡Request ¡Start ¡-­‑-­‑-­‑-­‑-­‑>\r\n") ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡print(request_path) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡print(self.headers) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡print("<-­‑-­‑-­‑-­‑-­‑ ¡Request ¡End ¡-­‑-­‑-­‑-­‑-­‑\r\n") ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡self.send_response(200) Black Hat USA 2010

  15. Data Representation • Perform ¡transi4on ¡magic – URL ¡encoding ¡and ¡Escaping – String ¡methods ¡(base64 ¡/ ¡hex ¡/ ¡rot13, ¡etc) – Data ¡representa4ons ¡(decimals ¡/ ¡en44es ¡/ ¡etc) • DharmaEncoder – Provides ¡methods ¡to ¡encode ¡and ¡wrap ¡values – Magic ¡is ¡in ¡the ¡encoderlib – hIp://code.google.com/p/dharmaencoder/ ¡ Black Hat USA 2010

  16. DharmaEncoder Black Hat USA 2010

  17. Parsing Content • Content ¡parsing ¡with ¡Python – Determine ¡content ¡type, ¡use ¡appropriate ¡parser – Don’t ¡use ¡HTMLParser ¡ if ¡html: ¡ ¡ ¡ use ¡lxml.html ¡ elif ¡xhtml: ¡ ¡ use ¡lxml.etree ¡ elif ¡xml: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡use ¡lxml.etree ¡ elif ¡json: ¡ ¡ use ¡json Black Hat USA 2010

  18. Parsing HTML responses content ¡= ¡html.parse(fileobj) ¡ ¡ ¡ ¡ ¡# ¡OR content ¡= ¡html.fromstring(string) # ¡let's ¡get ¡all ¡the ¡href's ¡out ¡of ¡the ¡html: for ¡a ¡in ¡content.iter(tag="a"): ¡ ¡print ¡a.get("href") Black Hat USA 2010

  19. Parsing XML configs with XPath NS ¡= ¡{"j2ee": ¡"http://java.sun.com/xml/ns/j2ee"} servlet ¡= ¡etree.XPath("//j2ee:servlet", ¡namespaces=NS) mapping ¡= ¡'//j2ee:servlet-­‑mapping/j2ee:servlet-­‑name[text() ¡= ¡"%s"]' for ¡node ¡in ¡servlet(webxml): ¡ ¡name ¡ ¡= ¡node.xpath("j2ee:servlet-­‑name", ¡ ¡namespaces=NS)[0].text ¡ ¡klass ¡= ¡node.xpath("j2ee:servlet-­‑class", ¡namespaces=NS)[0].text ¡ ¡_mapping ¡= ¡webxml.xpath(mapping ¡% ¡name, ¡namespaces=NS) ¡ ¡ ¡ ¡for ¡m ¡in ¡_mapping: ¡ ¡ ¡ ¡url ¡= ¡m.getparent().xpath("j2ee:url-­‑pattern", ¡namespaces=NS)[0].text Black Hat USA 2010

  20. Top Twitter Trends import ¡json import ¡urllib2 location ¡= ¡http://search.twitter.com/trends.json req ¡= ¡urllib2.Request(location) response ¡= ¡urllib2.urlopen(req) parsed ¡= ¡json.loads(response.read()) for ¡item ¡in ¡parsed.get("trends"): ¡ ¡ ¡ ¡print(item) Black Hat USA 2010

  21. Fuzz Cases • Do ¡the ¡legwork – Know ¡your ¡app – Know ¡your ¡parameters – Know ¡your ¡data • Work ¡smarter – Create ¡accurate ¡ranges – itertools ¡methods – Don’t ¡empty ¡your ¡clip ¡all ¡at ¡once Black Hat USA 2010

  22. Generating Fuzz Cases qs ¡= ¡dict(cgi.parse_qsl("foo=bar&up=down&left=right")) attacks ¡= ¡["'", ¡";", ¡"' ¡or ¡1=1-­‑-­‑"] for ¡case ¡in ¡ product (qs, ¡attacks): ¡ ¡ ¡ ¡d ¡= ¡dict(qs) ¡ ¡ ¡ ¡d.update(dict([case])) ¡ ¡ ¡ ¡print(urlencode(d)) ... foo=%27&up=down&left=right foo=%3B&up=down&left=right foo=%27+or+1%3D1-­‑-­‑&up=down&left=right foo=bar&up=%27&left=right foo=bar&up=%3B&left=right ... Black Hat USA 2010

  23. pywebfuzz • Web ¡fuzzing ¡lib ¡for ¡Python – hIp://code.google.com/p/pywebfuzz/ – Usable ¡in ¡Python ¡2.x – Easy ¡to ¡distributable ¡and ¡repeat ¡tests • Convenience – Fuzzdb ¡values ¡accessible ¡through ¡classes – Request ¡Logic – Range ¡genera4on ¡and ¡encoding ¡/decoding Black Hat USA 2010

  24. pywebfuzz Examples • Implemen4ng ¡fuzzdb ¡vals • Custom ¡range ¡genera4on • Encoding ¡opera4ons Black Hat USA 2010

  25. Sequence Difficulties • State ¡Issues – Account ¡login ¡/ ¡logout – Randomized ¡values – Maintaining ¡proper ¡state ¡while ¡tes4ng • Request – Process ¡headers ¡(referer ¡and ¡cookies) – Unable ¡to ¡parse ¡content ¡properly – Resort ¡to ¡regular ¡expressions Black Hat USA 2010

  26. Test Driving the Browser • Browser ¡Automa4on – Helpful ¡for ¡difficult ¡cases – When ¡you ¡need ¡a ¡real ¡browser • Selenium ¡/ ¡Webdriver – hIp://seleniumhq.org/ • Windmill – hIp://www.getwindmill.com/ Black Hat USA 2010

  27. Selenium • Selenium ¡components – Selenium ¡server – Selenium ¡Remote ¡Control – Selenium ¡IDE ¡(Browser ¡plugin) Black Hat USA 2010

  28. Selenium Demo Black Hat USA 2010

  29. Selenium Visuals Black Hat USA 2010

  30. Parsing Burp Logs • Spidering ¡technology ¡in ¡web ¡scanners ¡sucks – Seriously. ¡ ¡And ¡it’s ¡not ¡gelng ¡any ¡beIer – Your ¡tes4ng ¡4me ¡best ¡spent ¡elsewhere • Gelng ¡a ¡good ¡crawl ¡log ¡is ¡essen4al – It’s ¡something ¡you ¡probably ¡have ¡anyway – So ¡let’s ¡work ¡with ¡that Black Hat USA 2010

  31. Introducing GDS Burp API • Parse ¡a ¡Burp ¡Proxy ¡log ¡into ¡a ¡list – gds.pub.burp.parse(filename) • All ¡data ¡pertaining ¡to ¡a ¡request/response ¡is ¡ packaged ¡up ¡into ¡a ¡single ¡object • hIp://mwielgoszewski.github.com/burpee/ ¡ Black Hat USA 2010

More recommend