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 ¡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
An AppSec Intervention Your ¡tools ¡are ¡ killing ¡you Black Hat USA 2010
Gimme The Codes • Presenta4on ¡materials – hIp://hexsec.com/docs Black Hat USA 2010 5
Modern Infrastructure Black Hat USA 2010
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
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
Where Does Python Fit? Black Hat USA 2010
Python Implementations • CPython – hIp://python.org • Jython – hIp://jython.org • IronPython – hIp://ironpython.net Black Hat USA 2010
First Things First • Walk ¡like ¡a ¡duck ¡and ¡quack ¡like ¡a ¡duck Black Hat USA 2010
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
Basic HTTP Clients • Examples Black Hat USA 2010
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
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
DharmaEncoder Black Hat USA 2010
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
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
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
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
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
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
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
pywebfuzz Examples • Implemen4ng ¡fuzzdb ¡vals • Custom ¡range ¡genera4on • Encoding ¡opera4ons Black Hat USA 2010
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
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
Selenium • Selenium ¡components – Selenium ¡server – Selenium ¡Remote ¡Control – Selenium ¡IDE ¡(Browser ¡plugin) Black Hat USA 2010
Selenium Demo Black Hat USA 2010
Selenium Visuals Black Hat USA 2010
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
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