from web vulnerability to exploit in 15 minutes

33
From Web Vulnerability to Exploit in 15 minutes Pichaya Morimoto a.k.a. longcat Code Mania 10 June 27, 2015

Upload: pichaya-morimoto

Post on 07-Aug-2015

935 views

Category:

Technology


2 download

TRANSCRIPT

From Web Vulnerability to Exploit in 15 minutes

Pichaya Morimoto a.k.a. longcat

Code Mania 10

June 27, 2015

★ Impact of a Hacking Incident ★ PHP Object Serialization ★ PHP Magic Method★ DEMO: Teleport Portal ★ CodeIgniter’s Session Cookie★ Secure Code Review: POP Gadgets★ Inspect Requests by BurpSuite★ Write Exploit Code

○ Python○ Metasploit

Overview

2 นาที

5 นาที

3 นาที

5 นาที

รวม: 15 นาที

เว็บโดนแฮกแลว?

จะทํายังไงดี ทุกวันนี้ยังเห็นมีคนใช AppServ อยู

★ A1 Injection

★ A2 Broken Authentication and Session Management★ A3 Cross-Site Scripting (XSS)★ A4 Insecure Direct Object References...★ A10 Unvalidated Redirects and Forwards

OWASP Top 10 - 2013

SQL queries, LDAP queries, XPath queries, OS commands, program arguments, etc.

unserialize([User Input Data ]

);+

Classes: POP Gadgets

POI: PHP Object Injection

PHP Object Serialization

Serialization:serialize()

Deserialization:unserialize()

★ $number = 1234;★ $text = 'codemania';

★ $fruits = array('apple','banana','orange');

class FooController {public $foo='bar';function doX() { ... } }

★ $a = new FooController;

PHP Object Serialization

serialize([<คา]);

unserialize([คา>]);

★ $fruits = array('apple','banana','orange');

PHP Object Serialization

a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";}

O:13:"FooController":1:{s:3:"foo";s:3:"bar";}

class FooController {public $foo = 'bar';

}★ $a = new FooController;

serialize([<คา]);

PHP Object DeSerialization

User Input $_POST$_GET$_COOKIE$_SERVER...

class FooController {public $foo = 'bar';

}

$a = unserialize($_GET['a']);

unserialize([คา>]);

***?

__construct() __destruct()__sleep() __wakeup()__toString()__call(), __callStatic()__get(), __set()...

PHP Magic Method

POP Gadget

PHP Magic Method

__sleep: เวลา serialize แลวเอา ตัวแปรบางตัวออก

__wakeup: เวลา unserialize แลวเอา ตัวแปรอื่นมาใสแทน

__destruct: ถามีขอความเออเรอเก็บไวใหแสดงกอนจบการทํางาน

unserialize([User Input Data ]

);+

Classes: POP Gadgets

POI: PHP Object Injection

DEMO: Teleport Portal

Fingerprint WebApp

ci_session

CodeIgniter

ci_session ?

Session Data (serialized format)

unserialize([User Input Data ]

);+

Classes: POP Gadgets

POI: PHP Object Injection

***?

ci_session ?

Session Data (serialized format)

MAC / Signature (MD5)

Create a new session

system/libraries/Session.php1

2

3

Write the session cookie

4

5

6

system/libraries/Session.php

encryption_key

Encryption Key

★ บางแอพพัฒนาจาก CI แลวคนเอาไปใชไมเปลี่ยน★ Offline Bruteforce★ รีวิวโคด / ขโมยโคด★ ชองโหวอื่นๆ

ไมรู Encryption Key ทําไง

Fetch the current session data

system/libraries/Session.php1

2

3

4

5

unserialize([User Input Data ]

);+

Classes: POP Gadgets

POI: PHP Object Injection

POP Gadgets

__destruct

unserialize([User Input Data ]

);+

Classes: POP Gadgets

POI: PHP Object Injection

PoC

สราง Object

serializeแลวก็ตอ key มา md5 หาคา MAC

URL Encoding

MAC

PoC

Write an Exploit

1

2

3

4

Write an Exploit

สราง ci_session

สราง HTTP Request

ยิง Req

1

2

3

Exploit

Backdoor

WebShell

Beyond: POP Chain

http://syssec.rub.de/media/emma/veroeffentlichungen/2014/09/10/POPChainGeneration-CCS14.pdf

★ อยารับ User Input เขา unserilize() โดยตรงใช json_encode(), json_decode() แทน

★ ใช Web Framework ก็ตองอัพเดทเวอรชั่นใหม★ Encryption Key สําคัญมาก สุมกอนใช★ คอยอัพเดทเทคนิคการแฮกใหม ๆ

สรุป

เพจ: สอนแฮกเว็บแบบแมวๆhttps://www.facebook.com/longhackz