Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

SQL Injection attacks and defense pdf
PREMIUM
Số trang
494
Kích thước
6.5 MB
Định dạng
PDF
Lượt xem
1930

SQL Injection attacks and defense pdf

Nội dung xem thử

Mô tả chi tiết

Justin Clarke Lead Author and Technical Editor

Rodrigo Marcos Alvarez

Dave Hartley

Joseph Hemler

Alexander Kornbrust

Haroon Meer

Gary O’Leary-Steele

Alberto Revelli

Marco Slaviero

Dafydd Stuttard

Elsevier, Inc., the author(s), and any person or firm involved in the writing, editing, or production (collectively

“Makers”) of this book (“the Work”) do not guarantee or warrant the results to be obtained from the Work.

There is no guarantee of any kind, expressed or implied, regarding the Work or its contents. The Work is

sold AS IS and WITHOUT WARRANTY. You may have other legal rights, which vary from state to state.

In no event will Makers be liable to you for damages, including any loss of profits, lost savings, or other

incidental or consequential damages arising out from the Work or its contents. Because some states do not

allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation

may not apply to you.

You should always use reasonable care, including backup and other appropriate precautions, when working

with computers, networks, data, and files.

Syngress Media®, Syngress®, “Career Advancement Through Skill Enhancement®,” “Ask the Author

UPDATE®,” and “Hack Proofing®,” are registered trademarks of Elsevier, Inc. “Syngress: The Definition

of a Serious Security Library”™, “Mission Critical™,” and “The Only Way to Stop a Hacker is to Think

Like One™” are trademarks of Elsevier, Inc. Brands and product names mentioned in this book are

trademarks or service marks of their respective companies.

PUBLISHED BY

Syngress Publishing, Inc.

Elsevier, Inc.

30 Corporate Drive

Burlington, MA 01803

SQL Injection Attacks and Defense

Copyright © 2009 by Elsevier, Inc. All rights reserved. Printed in the United States of America. Except as

permitted under the Copyright Act of 1976, no part of this publication may be reproduced or distributed in

any form or by any means, or stored in a database or retrieval system, without the prior written permission

of the publisher, with the exception that the program listings may be entered, stored, and executed in

a computer system, but they may not be reproduced for publication.

Printed in the United States of America

1 2 3 4 5 6 7 8 9 0

ISBN 13: 978-1-59749-424-3

Publisher: Laura Colantoni Page Layout and Art: SPI

Acquisitions Editor: Rachel Roumeliotis Copy Editor: Audrey Doyle

Developmental Editor: Matthew Cater Indexer: SPI

Lead Author and Technical Editor: Justin Clarke Cover Designer: Michael Kavish

Project Manager: Heather Tighe

For information on rights, translations, and bulk sales, contact Matt Pedersen, Director of Corporate Sales,

Elsevier; email m.pedersen@elsevier.com.

Library of Congress Cataloging-in-Publication Data

Application Submitted

Justin Clarke is a co-founder and Director of Gotham Digital Science, an information

security consulting firm that works with clients to identify, prevent, and manage security

risks. He has over twelve years’ experience in testing the security of networks, web

applications, and wireless networks for large financial, retail, and technology clients in

the United States, United Kingdom and New Zealand.

Justin is a contributing author to a number of computer security books, as well as

a speaker at many conferences and events on security topics, including Black Hat USA,

EuSecWest, OSCON, ISACA, RSA, SANS, OWASP, and the British Computer Society.

He is the author of the Open Source SQLBrute blind SQL injection exploitation tool,

and is the Chapter Leader for the London chapter of OWASP.

Lead Author and Technical Editor

iii

iv

Rodrigo Marcos Alvarez (MSc, BSc, CREST, CISSP, CNNA, OPST,

MCP) is the founder and technical director of SECFORCE. SECFORCE

is a UK-based IT security consultancy that offers vendor-independent and

impartial IT security advice to companies across all industry fields.

Rodrigo is a contributor to the OWASP project and a security researcher.

He is particularly interested in network protocol analysis via fuzzing testing.

Among other projects, he has released TAOF, a protocol agnostic GUI fuzzer,

and proxyfuzz, a TCP/UDP proxy which fuzzes on the fly. Rodrigo has

also contributed to the web security field by releasing bsishell, a python

interacting blind SQL injection shell and developing TCP socket reusing

attacking techniques.

Dave Hartley has been working in the IT security industry since 1998.

He is currently a security consultant for Activity Information Management,

based in the United Kingdom, where he is responsible for the development

and delivery of Activity’s technical auditing services.

Dave has performed a wide range of security assessments and provided

a myriad of consultancy services for clients in a number of different sectors,

including financial institutions, entertainment, media, telecommunications,

and software development companies and government organizations

worldwide. Dave is a CREST certified consultant and part of Activity’s

CESG CHECK team. He is also the author of the Bobcat SQL injection

exploitation tool.

Dave would like to express heartfelt thanks to his extremely beautiful

and understanding wife Nicole for her patience and support.

Joseph Hemler (CISSP) is a co-founder and Director of Gotham Digital

Science, an information security consulting firm that works with clients to

identify, prevent, and manage security risks. He has worked in the realm of

application security for over 9 years, and has deep experience identifying,

Contributing Authors

v

exploiting, and correcting software security flaws. Prior to founding GDS,

Mr. Hemler was a senior security engineer at Ernst & Young’s Advanced

Security Center.

Mr. Hemler has authored source code analysis tools and written

multiple scripts for identifying and exploiting network and web

application vulnerabilities. He is a contributing author to books in

the area of application security, frequently blogs on the GDS Security

Blog, and often speaks at various information security conferences and

training seminars. Mr. Hemler graduated with a Bachelors of Business

Administration from the University of Notre Dame.

Alexander Kornbrust is the founder of Red-Database-Security.

He provides Oracle security audits, security training and consulting

to customers worldwide.

Alexander has worked since 1992 with Oracle and his specialties are

the security of Oracle databases and secure architectures. Alexander has

reported more than 300 security bugs to Oracle.

Alexander holds a masters degree (Diplom-Informatiker) in computer

science from the University of Passau.

Haroon Meer is the Technical Director of SensePost. He joined SensePost

in 2001 and has not slept since his early childhood. He has played in most

aspects of IT Security from development to deployment and currently gets

most of his kicks from reverse engineering, application assessments, and

similar forms of pain. Haroon has spoken and trained at Black Hat, Defcon,

Microsoft Tech-Ed, and other conferences. He loves “Deels,” building new

things, breaking new things, reading, deep find-outering, and making up

new words. He dislikes sleep, pointless red-tape, dishonest people, and

watching cricket.

Gary O’Leary-Steele (CREST Consultant) is the Technical Director of

Sec-1 Ltd, based in the UK. He currently provides senior-level penetration

testing and security consultancy for a variety of clients, including a number

of large online retailers and financial sector organizations. His specialties

vi

include web application security assessment, network penetration testing

and vulnerability research. Gary is also the lead author and trainer for the

Sec-1 Certified Network Security Professional (CNSP) training program

that has seen more than 3,000 attendees since its launch.

Gary is credited by Microsoft, RSA, GFI and Marshal Software for the

discovery of security flaws within their commercial applications.

Alberto Revelli is a security researcher and the author of sqlninja, an open

source toolkit that has become a “weapon of choice” when exploiting

a SQL Injection vulnerability on a web application based on Microsoft

SQL Server. As for his day job, he works as a senior security consultant for

Portcullis Computer Security, mostly breaking into web applications and

into any other thing that happens to tickle his curiosity.

During his career he has assisted a multitude of clients including

major financial institutions, telecom operators, media and manufacturing

companies. He has been invited as a speaker to several security conferences,

including EuSecWest, CONFidence, Shakacon, and SOURCE. He is the

Technical Director of the Italian Chapter of OWASP and he is one of the

authors of the OWASP Testing Guide. Prior to joining Portcullis, Alberto

worked for Spike Reply and McKinsey&Company.

He currently resides in London, enjoying its awful weather and its

crazy nightlife together with his girlfriend.

Marco Slaviero (MSc) is an associate at SensePost, a South African

information security company focused on providing penetration

testing services to global clients in the financial services, mining and

telecommunications sectors. Marco specializes in web application

assessments with a side interest in thick applications and network

assessments.

Marco has spoken on SQL Injection at Black Hat USA, and he

developed the proof-of-concept Squeeza tool.

Marco lives with Juliette, his wonderful wife, who gave him the

space to contribute to this book.

vii

Dafydd Stuttard is the author of the best-selling Web Application Hacker’s

Handbook. Under the alias “PortSwigger” he created the popular Burp Suite

of web application hacking tools. Dafydd has developed and presented

training courses at the Black Hat security conferences around the world.

Dafydd is a Principal Security Consultant at Next Generation Security

Software, where he leads the web application security competency. He has

ten years’ experience in security consulting and specializes in the penetration

testing of web applications and compiled software. Dafydd holds Masters

and Doctorate degrees in philosophy from the University of Oxford.

This page intentionally left blank

Contents

Chapter 1 What Is SQL Injection? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Understanding How Web Applications Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

A Simple Application Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

A More Complex Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Understanding SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

High-Profile Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Understanding How It Happens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Dynamic String Building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Incorrectly Handled Escape Characters . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Incorrectly Handled Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Incorrectly Handled Query Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Incorrectly Handled Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Incorrectly Handled Multiple Submissions . . . . . . . . . . . . . . . . . . . . . . . 19

Insecure Database Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Chapter 2 Testing for SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Finding SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Testing by Inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Identifying Data Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

GET Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

POST Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Other Injectable Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Manipulating Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Information Workf low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Database Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Commonly Displayed SQL Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Microsoft SQL Server Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

MySQL Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Oracle Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

ix

x Contents

Application Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Generic Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

HTTP Code Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Different Response Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Blind Injection Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Confirming SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Differentiating Numbers and Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Inline SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Injecting Strings Inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Injecting Numeric Values Inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Terminating SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Database Comment Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Using Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Executing Multiple Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Time Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Automating SQL Injection Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Tools for Automatically Finding SQL Injection . . . . . . . . . . . . . . . . . . . . . . 81

HP WebInspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

IBM Rational AppScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

HP Scrawlr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

SQLiX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Paros Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Chapter 3 Reviewing Code for SQL Injection . . . . . . . . . . . . . . . . . . . . . . . 95

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Reviewing Source Code for SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Dangerous Coding Behaviors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Dangerous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Following the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Following Data in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Following Data in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

Following Data in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Reviewing PL/SQL and T-SQL Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Automated Source Code Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Yet Another Source Code Analyzer (YASCA) . . . . . . . . . . . . . . . . . . . . . . 125

Pixy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

AppCodeScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Contents xi

LAPSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Security Compass Web Application Analysis Tool (SWAAT) . . . . . . . . . . . . 128

Microsoft Source Code Analyzer for SQL Injection . . . . . . . . . . . . . . . . . . 128

Microsoft Code Analysis Tool .NET (CAT.NET) . . . . . . . . . . . . . . . . . . . . 129

Commercial Source Code Review Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Ounce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Source Code Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

CodeSecure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Chapter 4 Exploiting SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Understanding Common Exploit Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Using Stacked Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Identifying the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Non-Blind Fingerprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Banner Grabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Blind Fingerprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Extracting Data through UNION Statements . . . . . . . . . . . . . . . . . . . . . . . . . 148

Matching Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Matching Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Using Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Approach 1: Time-based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Approach 2: Error-based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Approach 3: Content-based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Extending the Attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Using Errors for SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Error Messages in Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Enumerating the Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Escalating Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

Privilege Escalation on Unpatched Servers . . . . . . . . . . . . . . . . . . . . . . 189

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

xii Contents

Stealing the Password Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Oracle Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

APEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Oracle Internet Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Out-of-Band Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

E-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

Microsoft SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

HTTP/DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Automating SQL Injection Exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Sqlmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Sqlmap Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Bobcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

BSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Other Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Chapter 5 Blind SQL Injection Exploitation . . . . . . . . . . . . . . . . . . . . . . . . 219

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

Finding and Confirming Blind SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . 221

Forcing Generic Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Injecting Queries with Side Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Spitting and Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Common Blind SQL Injection Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . 225

Blind SQL Injection Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Inference Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Increasing the Complexity of Inference Techniques . . . . . . . . . . . . . . 230

Alternative Channel Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Using Time-Based Techniques..................................... 235

Delaying Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

MySQL Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Contents xiii

Generic MySQL Binary Search Inference Exploits . . . . . . . . . . . . . . 237

Generic MySQL Bit-by-Bit Inference Exploits . . . . . . . . . . . . . . . . . 237

SQL Server Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

Generic SQL Server Binary Search Inference Exploits . . . . . . . . . . . . 240

Generic SQL Server Bit-by-Bit Inference Exploits . . . . . . . . . . . . . . 240

Oracle Delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Time-Based Inference Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Using Response-Based Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

MySQL Response Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

SQL Server Response Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Oracle Response Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Returning More Than One Bit of Information . . . . . . . . . . . . . . . . . . . . . 247

Using Alternative Channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Database Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

DNS Exfiltration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

E-mail Exfiltration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

HTTP Exfiltration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Automating Blind SQL Injection Exploitation . . . . . . . . . . . . . . . . . . . . . . . . . 258

Absinthe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

BSQL Hacker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

SQLBrute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Sqlninja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Squeeza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

Chapter 6 Exploiting the Operating System . . . . . . . . . . . . . . . . . . . . . . . 271

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Accessing the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Reading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Microsoft SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Microsoft SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

Executing Operating System Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

Direct Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

xiv Contents

Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

DBMS_SCHEDULER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

PL/SQL Native . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Other Possibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Alter System Set Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

PL/SQL Native 9i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Buffer Overflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Custom Application Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Microsoft SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Consolidating Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

Endnotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

Chapter 7 Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Evading Input Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Using Case Variation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Using SQL Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Using URL Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

Using Dynamic Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Using Null Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Nesting Stripped Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

Exploiting Truncation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

Bypassing Custom Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

Using Non-Standard Entry Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

Exploiting Second-Order SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Finding Second-Order Vulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Using Hybrid Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Leveraging Captured Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Creating Cross-Site Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Running Operating System Commands on Oracle . . . . . . . . . . . . . . . . . . 336

Exploiting Authenticated Vulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Solutions Fast Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Tải ngay đi em, còn do dự, trời tối mất!