A Logo

Feel free to include my content in your page via my
RSS feed

Help Irongeek.com pay for
bandwidth and research equipment:

Search Irongeek.com:

Social-engineer-training Button
Irongeek Button

Web Hosting:
Dreamhost Logo
Help Irongeek.com pay for bandwidth and research equipment:


Bash Scripting 101 for Pen Testers Hack3rcon 3 (Hacking Illustrated Series InfoSec Tutorial Videos)

Bash Scripting 101 for Pen Testers
Hack3rcon 3

Intro to bash scripting

Lee Baird

Lee works works as a malware analyst in the DC area. He has performed enterprise security assessments for Fortune 500 companies. He holds a bachelor's degree in accounting from Marshall University and is a Offensive Security Certified Professional.

Back to Hack3rcon 3 video list


Bash 101 Course

When performing security assessments, it is very import that you have a repeatable process.  As you become familiar with more tools, you will want to incorporate them into your process.  Bash scripting is an easy way in which this can be accomplished.  Learn how to read, edit and parse critical information that you need from the output of various tools.  Take user's input and leverage multiple tools to perform OSINT.  Starting with the very basics and taking you through functions and nested arrays, you will learn to build out your own pentest framework that works for you.

A very import thing to remember when scripting, is that there are many ways to solve a particular problem.  There is no right way.  Whatever works for you, is the best way.

Everything you do from the command line can be scripted.

Many of the examples in this class are the same types of commands, that when linked together in a script, can create very useful programs.

My editors of choice:
     CLI - nano
     GUI - gedit

Create a text file:
     touch file Creates an empty file.
     pipe the output of a command
          ifconfig > tmp
     nano file

     ctrl v     Next page.
     ctrl y     Previous page.
     ctrl w    Where is (find).
     ctrl k     Cut that line of test.
     ctrl x     Exit editor.

Create a file and append text to it:
     ifconfig > tmp     
     echo >> tmp
     ping google.com -c3 >> tmp

How to view a file:
     cat file Show entire contents of file.
     more file Show one page at a time.  Space bar for next page and (q) to exit.
     head file Show the first 10 lines.
     head -15 file Show the first 15 lines.
     tail file Show the last 10 lines.
     tail -15 file Show the last 15 lines.
     tail -f file Useful when viewing the output of a log file.

     Feeds the output of one process to the input of another process.
     cat tmp | grep Bcast

     ps aux Show all running process for all users.
     kill -9 PID Nicely kill a PID.

     tab 1 ping google.com
     tab 2 ps aux | grep ping
kill -9 (ping PID)
     tab 1 Verify that ping has stopped.

     tab 1 ping google.com > tmp2
     tab 2 tail -f tmp2
     tab 1 ctrl z (pauses the process), bg to background the process.
     tab 2 You can still see the log growing.
     tab 1 fg to foreground the process.
ctrl c to kill the process.
     tab 2 Verify the log file has stopped growing.
ctrl c to kill the process.

Count the number of lines in a file:
     wc -l tmp2

     -d  delimiter
     -f  fields

     sort -u file Sort by unique.

     Isolate the IP address
     cat tmp2 | cut -d '(' -f2 | cut -d ')' -f1 | sort -u

     awk '{print $1}' file Show the 1st column.
     awk '{print $1,$5}' file Show the 1st and 5th columns.
     Show the 5 shortest and longest response times to a domain.
     grep -v Remove a single string. grep -v 'red' file
     egrep -v Remove multiple strings. egrep -v '(red|white|blue)' file

     sed 's/FOO/BAR/g' file Replace FOO with BAR.
     sed 's/FOO//g' file Replace FOO with nothing.
     sed '/^FOO/d' file Remove lines that start with FOO.

     31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 
     echo -e "\e[1;34mThis is a blue text.\e[0m"

Your first bash script.
     print "Hello world."

Make a file executable.
     chmod +x file
     chmod 755 file

     echo $name

     echo $user

     echo 'Hello' $name. 'You are running as' $user.

     Hello <your name>. Your IP address is <your IP>.

     Name  <your name>
     IP  <your IP>
     Interface  <your interface>
User Input
     read -p "Domain: " domain

Check For No User Input
     if [ -z $domain ]; then
          echo "#########################"
          echo "Invalid choice."

To see more of what you can do with bash scripting, please visit my collection of bash scripts and pentesting framework:


Printable version of this article

15 most recent posts on Irongeek.com:

If you would like to republish one of the articles from this site on your webpage or print journal please contact IronGeek.

Copyright 2015, IronGeek
Louisville / Kentuckiana Information Security Enthusiast