This book is about how web applications are tested with an emphasis on security. This book is aimed at web applications developers and testers, not security specialists. Developers who are responsible for writing unit tests for their components will appreciate the way that these tools can be focused on an individual page, feature, or form. Quality assurance professionals who must test whole web applications will be especially interested in the automation and development of test cases that can easily become parts of regression suites. The recipes in this book mainly use free tools, making them easy to try out and hopefully adopt.
The unfortunate problem with free tools in so many cases is lack documentation. This book fills that gap by showing you how to make good use of tools that you might have heard of that don't have good documentation on their application. Another barrier to effectively testing web applications with free tools is a general lack of knowledge about how the tools can be put together to perform good security tests. It's one thing to know that TamperData lets you bypass client-side checks. It's another thing to develop a good cross-site scripting test using TamperData. This book takes you beyond making good web application tests and helps you produce good security test cases.
The book divides material into three sections. The first section covers setting up tools and some of the basics concepts used to develop tests. The second section is about the different methods of bypassing client-side input validation via SQL injection, cross-site scripting, and manipulating hidden form fields. The third section is about the session, locating session identifiers, determining their predictability, and how to manipulate them. Each major section begins with relatively simple tasks and gradually builds to more complex tasks. Thus the first recipes are simple exercises that show what happens behind the scenes in web applications. The final recipes put many building blocks together into complex tasks that can form the basis of major web application security tests. The following is a listing and synopsis of each chapter:
Chapter 1, A little terminology and some important testing concepts that are referred to throughout the book.
Chapter 2, Installing Some Free Tools, includes an entire toolbox of free tools you can make use of. Information on each tool includes some basic instructions on where to find it, install it, and get it running.
Chapter 3, Basic Observation, teaches you the basics of observing your web application and testing the functionality of the system.
Chapter 4, Web-Oriented Data Encoding, shows how to encode and decode data in the various ways that web applications use it. In addition to encoding and decoding, you need to be able to eyeball encoded data and have some idea how it has been encoded.
Chapter 5, Tampering with Input, discusses the most important basic technique: malicious input. Discusses how you get it into your application and how you look at what's happening in the browser and what it's sending to the web application.
Chapter 6, Automated Bulk Scanning, shows you how to spider your application to find input points and pages, as well as ways to conduct batch tests on some specialized applications.
Chapter 7, Automating Specific Tasks with Curl, shows you a very good tool for building automated tests: Curl. First a a few simple ways of submitting batches of tests are examined. Complexity gradually builds to more difficult tasks such as retaining state when you log in and manipulating cookies, and culminates in the task of logging in on eBay.
Chapter 8, Automating with LibPerl, is focused on Perl and its LWP library. This chapter contains a set of specific techniques that you can use with Perl and the LWP library to perform security tests. These include uploading viruses to your application, using very long filenames, and parsing the responses from your application. It ends with a script that can edit a Wikipedia page.
Chapter 9, Seeking Design Flaws, discusses the unintentional interactions in your web application and how you can reveal them with good security tests. The recipes in this chapter focus on ways you can enable tests with testing programs. Topics includes predictable identifiers, weak randomness, and repeatable transactions.
Chapter 10, Attacking AJAX, shows you a lot of the top web attacks and how you can execute them building on earlier techniques discussed in the book. This book doesn't have much on AJAX itself, so you may need an additional text on the subject.
Chapter 11, Manipulating Sessions, discusses how to get behind the scenes of AJAX and test it both manually and automatically. The recipes intercept client-side requests to test server-side logic and vice versa, testing the client-side code by manipulating the server's responses.
Chapter 12, Multifaceted Tests, the final chapter, focuses on sessions, session management, and how security tests can attack it. It gives you several recipes that show you how to find, analyze, and ultimately test the strength of session management.