Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers (2 page)

Introduction

Python is a hacker’s language. With its decreased complexity, increased efficiency, limitless third-party libraries, and low bar to entry, Python provides an excellent development platform to build your own offensive tools. If you are running Mac OS X or Linux, odds are it is already installed on your system. While a wealth of offensive tools already exist, learning Python can help you with the difficult cases where those tools fail.

TARGET AUDIENCE

Everyone learns differently. However, whether you are a beginner who wants to learn how to write Python, or an advanced programmer who wants to learn how to apply your skills in penetration testing, this book is for you.

ORGANIZATION OF THE BOOK

In writing this book, we really set out to write an evil cookbook of examples for the darker side of Python. The following pages provide Python recipes for penetration testing, web analysis, network analysis, forensic analysis, and exploiting wireless devices. Hopefully, the examples will inspire the reader to create his or her own Python scripts.

Chapter 1: Introduction

If you have not programmed in Python before,
Chapter 1
provides background information about the language, variables, data types, functions, iteration, selection, and working with modules, and methodically walks through writing a few simple programs. Feel free to skip it if you are already comfortable with the Python programming language. After the first chapter, the following six chapters are fairly independent from one another; feel free to read them in whichever order you please, according to what strikes your curiosity.

Chapter 2: Penetration Testing with Python

Chapter 2
introduces the idea of using the Python programming language to script attacks for penetration testing. The examples in the chapter include building a port scanner, constructing an SSH botnet, mass-compromising via FTP, replicating Conficker, and writing an exploit.

Chapter 3: Forensic Investigations with Python

Chapter 3
utilizes Python for digital forensic investigations. This chapter provides examples for geo-locating individuals, recovering deleted items, extracting artifacts from the Windows registry, examining metadata in documents and images, and investigating application and mobile device artifacts.

Chapter 4: Network Traffic Analysis with Python

Chapter 4
uses Python to analyze network traffic. The scripts in this chapter geo-locate IP addresses from packet captures, investigate popular DDoS toolkits, discover decoy scans, analyze botnet traffic, and foil intrusion detection systems.

Chapter 5: Wireless Mayhem with Python

Chapter 5
creates mayhem for wireless and Bluetooth devices. The examples in this chapter show how to sniff and parse wireless traffic, build a wireless keylogger, identify hidden wireless networks, remotely command UAVs, identify malicious wireless toolkits in use, stalk Bluetooth radios, and exploit Bluetooth vulnerabilities.

Chapter 6: Web Recon With Python

Chapter 6
examines using Python to scrape the web for information. The examples in this chapter include anonymously browsing the web via Python, working with developer APIs, scraping popular social media sites, and creating a spear-phishing email.

Chapter 7: Antivirus Evasion with Python

In the Final chapter,
Chapter 7
, we build a piece of malware that evades antivirus systems. Additionally, we build a script for uploading our malware against an online antivirus scanner.

COMPANION WEB SITE

The companion website contains all the code included in this book. Visit
http://www.elsevierdirect.com/companion.jsp?ISBN=9781597499576
to download the examples, artifacts, and network captures to download them as you work through the book.

Chapter 1
Introduction
Information in this chapter:

 
Setting up a Development Environment for Python

 
Introduction to the Python Programming Language

 
An Explanation of Variables, Data types, Strings, Lists, Dictionaries, Functions

 
Work with Networking, Iteration, Selection, Exception Handling and Modules

 
Write Your First Python Program, a Dictionary Password Cracker

 
Write Your Second Python Program, a Zipfile Brute-Force Cracker

To me, the extraordinary aspect of martial arts lies in its simplicity. The easy way is also the right way, and martial arts is nothing at all special; the closer to the true way of martial arts, the less wastage of expression there is.

– Master Bruce Lee, Founder, Jeet Kune Do

Introduction: A Penetration Test with Python

Recently, a friend of mine penetration tested a Fortune 500 company’s computer security system. While the company had established and maintained an excellent security scheme, he eventually found a vulnerability in an unpatched server. Within a few minutes, he used open source tools to compromise the system and gained administrative access to it. He then scanned the remaining servers as well as the clients and did not discover any additional vulnerabilities. At this point his assessment ended and the true penetration test began.

Opening the text editor of his choice, my friend wrote a Python script to test the credentials found on the vulnerable server against the remainder of the machines on the network. Literally, minutes later, he gained administrative access to over one thousand machines on the network. However, in doing so, he was subsequently presented with an unmanageable problem. He knew the system administrators would notice his attack and deny him access so he quickly used some triage with the exploited machines in order to find out where to install a persistent backdoor.

After examining his pentest engagement document, my friend realized that his client placed a high level of importance on securing the domain controller. Knowing the administrator logged onto the domain controller with a completely separate administrator account, my friend wrote a small script to check a thousand machines for logged on users. A little while later, my friend was notified when the domain administrator logged onto one of the machines. His triage essentially complete, my friend now knew where to continue his assault.

My friend’s ability to quickly react and think creatively under pressure made him a penetration tester. He forged his own tools out of short scripts in order to successfully compromise the Fortune 500 Company. A small Python script granted him access to over one thousand workstations. Another small script allowed him to triage the one thousand workstations before an adept administrator disconnected his access. Forging your own weapons to solve your own problems makes you a true penetration tester.

Let us begin our journey of learning how to build our own tools, by installing our development environment.

Setting Up Your Development Environment

The Python download site (
http://www.python.org/download/
) provides a repository of Python installers for Windows, Mac OS X, and Linux Operating Systems. If you are running Mac OS X or Linux, odds are the Python interpreter is already installed on your system. Downloading an installer provides a programmer with the Python interpreter, the standard library, and several built-in modules. The Python standard library and built-in modules provide an extensive range of capabilities, including built-in data types, exception handling, numeric, and math modules, file-handling capabilities, cryptographic services, interoperability with the operating system, Internet data handling, and interaction with IP protocols, among many other useful modules. However, a programmer can easily install any third-party packages. A comprehensive list of third-party packages is available at
http://pypi.python.org/pypi/
.

Installing Third Party Libraries

In Chapter two, we will utilize the python-nmap package to handle parsing of nmap results. The following example depicts how to download and install the python-nmap package (or any package, really). Once we have saved the package to a local file, we uncompress the contents and change into the uncompressed directory. From that working directory, we issue the command
python setup.py install,
which installs the python-nmap package. Installing most third-party packages will follow the same steps of downloading, uncompressing, and then issuing the command
python setup.py install.

programmer:∼#
wget
http://xael.org/norman/python/python-nmap/python-nmap-0.2.4.tar.gz-Onmap.tar.gz

--2012-04-24 15:51:51--
http://xael.org/norman/python/python-nmap/python-nmap-0.2.4.tar.gz

 Resolving xael.org... 194.36.166.10

 Connecting to xael.org|194.36.166.10|:80... connected.

 HTTP request sent, awaiting response... 200 OK

 Length: 29620 (29K) [application/x-gzip]

 Saving to: ‘nmap.tar.gz’

 100%[==================================================================================================================>] 29,620 60.8K/s in 0.5s

 2012-04-24 15:51:52 (60.8 KB/s) - ‘nmap.tar.gz’ saved [29620/29620]

 programmer:∼#
tar -xzf nmap.tar.gz

 programmer:∼#
cd python-nmap-0.2.4/

 programmer:∼/python-nmap-0.2.4#
python setup.py install

 
running
install

 running build

 running build_py

 creating build

 creating build/lib.linux-x86_64-2.6

 creating build/lib.linux-x86_64-2.6/nmap

 copying nmap/__init__.py -> build/lib.linux-x86_64-2.6/nmap

 copying nmap/example.py -> build/lib.linux-x86_64-2.6/nmap

 copying nmap/nmap.py -> build/lib.linux-x86_64-2.6/nmap

 running install_lib

 creating /usr/local/lib/python2.6/dist-packages/nmap

 copying build/lib.linux-x86_64-2.6/nmap/__init__.py -> /usr/local/lib/python2.6/dist-packages/nmap

 copying build/lib.linux-x86_64-2.6/nmap/example.py -> /usr/local/lib/python2.6/dist-packages/nmap

 copying build/lib.linux-x86_64-2.6/nmap/nmap.py -> /usr/local/lib/python2.6/dist-packages/nmap

 byte-compiling /usr/local/lib/python2.6/dist-packages/nmap/__init__.py to __init__.pyc

 byte-compiling /usr/local/lib/python2.6/dist-packages/nmap/example.py to example.pyc

 byte-compiling /usr/local/lib/python2.6/dist-packages/nmap/nmap.py to nmap.pyc

 running install_egg_info

 Writing /usr/local/lib/python2.6/dist-packages/python_nmap-0.2.4.egg-info

To make installing Python packages even easier, Python setuptools provides a Python module called easy_install. Running the easy installer module followed by the name of the package to install will search through Python repositories to find the package, download it if found, and install it automatically.

 programmer:∼ #
easy_install python-nmap

 Searching for python-nmap

Reading
http://pypi.python.org/simple/python-nmap/

Reading
http://xael.org/norman/python/python-nmap/

 Best match: python-nmap 0.2.4

Downloading
http://xael.org/norman/python/python-nmap/python-nmap-0.2.4.tar.gz

 Processing python-nmap-0.2.4.tar.gz

 Running python-nmap-0.2.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-rtyUSS/python-nmap-0.2.4/egg-dist-tmp-EOPENs

 zip_safe flag not set; analyzing archive contents...

 Adding python-nmap 0.2.4 to easy-install.pth file

 Installed /usr/local/lib/python2.6/dist-packages/python_nmap-0.2.4-py2.6.egg

 Processing dependencies for python-nmap

 Finished processing dependencies for python-nmap

To rapidly establish a development environment, we suggest you download a copy of the latest BackTrack Linux Penetration Testing Distribution from
http://www.backtrack-linux.org/downloads/
. The distribution provides a wealth of tools for penetration testing, along with forensic, web, network analysis, and wireless attacks. Several of the following examples will rely on tools or libraries that are already a part of the BackTrack distribution. When an example in the book requires a third-party package outside of the standard library and built-in modules, the text will provide a download site.

When setting up a developmental environment, it may prove useful to download all of these third-party modules before beginning. On Backtrack, you can install the additional required libraries with easy_install by issuing the following command. This will install most of the required libraries for the examples under Linux.

 programmer:∼ #
easy_install pyPdf python-nmap pygeoip mechanize BeautifulSoup4

Chapter five requires some specific Bluetooth libraries that are not available from easy_install. You can use the aptitude package manager to download and install these librariers.

 attacker#
apt-get install python-bluez bluetooth python-obexftp

 Reading package lists... Done

 Building dependency tree

 Reading state information... Done

 <..SNIPPED..>

 Unpacking bluetooth (from .../bluetooth_4.60-0ubuntu8_all.deb)

 Selecting previously deselected package python-bluez.

 Unpacking python-bluez (from .../python-bluez_0.18-1_amd64.deb)

 Setting up bluetooth (4.60-0ubuntu8) ...

 Setting up python-bluez (0.18-1) ...

 Processing triggers for python-central .

Additionally, a few examples in Chapter five and seven require a Windows installation of Python. For the latest Python Windows Installer, visit
http://www.python.org/getit/
.

In recent years, the source code for Python has forked into two stable branches-2.x, and 3.x. The original author of Python, Guido van Rossum, sought to clean up the code to make the language more consistent. This action intentionally broke backward compatibility with the Python 2.x release. For example, the author replaced the print statement in Python 2.x with a print() function that required arguments as parameters. The examples contained in the following chapter are meant for the 2.x branch. At the time of this book’s publication, BackTrack 5 R2 offered Python 2.6.5 as the stable version of Python.

 programmer# python -V

 Python 2.6.5

Interpreted Python Versus Interactive Python

Similar to other scripting languages, Python is an interpreted language. At runtime an interpreter processes the code and executes it. To demonstrate the use of the Python interpreter, we write print “Hello World” to a file with a .py
extension. To interpreter this new script, we invoke the Python interpreter followed by the name of the newly created script.

 programmer# echo print \”Hello World\” > hello.py

 programmer# python hello.py

 Hello World

Additionally, Python provides interactive capability. A programmer can invoke the Python interpreter and interact with the interpreter directly. To start the interpreter, the programmer executes python with no arguments. Next, the interpreter presents the programmer with a >>> prompt, indicating it can accept a command. Here, the programmer again types
print “Hello World.”
Upon hitting return, the Python interactive interpreter immediately executes the statement.

 programmer# python

 Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)

 [GCC 4.4.3] on linux2

 >>>

 >>> print “Hello World”

 Hello World

To initially understand some of the semantics behind the language, this chapter occasionally utilizes the interactive capability of the Python interpreter. You can spot the interactive interpreter in usage by looking for the >>> prompt in the examples.

As we explain the Python examples in the following chapters, we will build our scripts out of several functional blocks of code known as methods or functions. As we finalize each script, we will show how to reassemble these methods and invoke them from the main() method. Trying to run a script that just contains the isolated function definitions without a call to invoke them will prove unhelpful. For the most part, you can spot the completed scripts because they will have a main() function defined. Before we start writing our first program though, we will illustrate several of the key components of the Python standard library.

Other books

Baking Cakes in Kigali by Gaile Parkin
Unknown by Unknown
Lady Maybe by Julie Klassen
Polgara the Sorceress by David Eddings
Her Marine Bodyguard by Heather Long
Changing Vision by Julie E. Czerneda
Twin Threat Christmas by Rachelle McCalla