ComputerSecurityStudent (CSS) [Login] [Join Now]




|UNIX >> Perl Lessons >> Current Page |Views: 15762

(Perl: Lesson 6)

{ Parsing /etc/passwd with split }


Section 0. Background Information
  1. What is Perl
    • Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier.  Since then, it has undergone many changes and revisions and become widely popular amongst programmers. Larry Wall continues to oversee development of the core language, and its upcoming version, Perl 6. Perl borrows features from other programming languages including C, shell scripting (sh), AWK, and sed.  The language provides powerful text processing facilities without the arbitrary data length limits of many contemporary Unix tools, facilitating easy manipulation of text files. Perl gained widespread popularity in the late 1990s as a CGI scripting language, in part due to its parsing abilities.

  2. Getting Perl
    • For the purposes of these perl lesson, I will be using a perl package that comes standard on Backtrack, Ubuntu and most flavors of Linux and Unix.
    • However, if you are using Windows, instead of a Linux, Unix or MAC operating system, you still have options.
  3. Pre-Requisite
  4. Lab Notes
    • In this lab we will do the following:
      1. We will download a program that contains a subroutine.
      2. The program will read the /etc/passwd file into an @ARRAY.
      3. Then the program will enumerate through each line of the @ARRAY (a.k.a., /etc/passwd) and use split to extract element of the line into the following variables.
        • my($username,$passwd,$uid,$guid,$geco,$homedir,$shell) = split(/:/,$line);   

  5. Legal Disclaimer
    • As a condition of your use of this Web site, you warrant to computersecuritystudent.com that you will not use this Web site for any purpose that is unlawful or that is prohibited by these terms, conditions, and notices.
    • In accordance with UCC § 2-316, this product is provided with "no warranties, either express or implied." The information contained is provided "as-is", with "no guarantee of merchantability."
    • In addition, this is a teaching website that does not condone malicious behavior of any kind.
    • Your are on notice, that continuing and/or using this lab outside your "own" test environment is considered malicious and is against the law.
    • © 2013 No content replication of any kind is allowed without express written permission.

Section 1. Login to BackTrack
  1. Start Up VMWare Player
    • Instructions:
      1. Click the Start Button
      2. Type Vmplayer in the search box
      3. Click on Vmplayer

     

  2. Open a Virtual Machine
    • Instructions:
      1. Click on Open a Virtual Machine

     

  3. Open the BackTrack5R1 VM
    • Instructions:
      1. Navigate to where the BackTrack5R1 VM is located
      2. Click on on the BackTrack5R1 VM
      3. Click on the Open Button

     

  4. Edit the BackTrack5R1 VM
    • Instructions:
      1. Select BackTrack5R1 VM
      2. Click Edit virtual machine settings

     

  5. Edit Virtual Machine Settings
    • Instructions:
      1. Click on Network Adapter
      2. Click on the Bridged Radio button
      3. Click on the OK Button

     

  6. Play the BackTrack5R1 VM
    • Instructions:
      1. Click on the BackTrack5R1 VM
      2. Click on Play virtual machine

     

  7. Login to BackTrack
    • Instructions:
      1. Login: root
      2. Password: toor or <whatever you changed it to>.

     

  8. Bring up the GNOME
    • Instructions:
      1. Type startx

 

Section 2. Bring up a console terminal
  1. Start up a terminal window
    • Instructions:
      1. Click on the Terminal Window

     

  2. Obtain the IP Address
    • Instructions:
      1. ifconfig -a
    • Note(FYI):
      • My IP address 192.168.1.111.
      • In your case, it will probably be different.

 

Section 3. Download lesson6a.pl
  1. Become the student user and make a directory
    • Instructions:
      1. su - student
      2. mkdir -p perl_lessons
      3. cd perl_lessons

     

  2. Download lesson6a.pl
    • Instructions:
      1. wget http://www.computersecuritystudent.com/UNIX/PERL/lesson6/lesson6a.pl
      2. chmod 700 lesson6a.pl
      3. perl -c lesson6a.pl

     

  3. Run lesson6a.pl
    • Instructions:
      1. ./lesson6a.pl
    • Note(FYI):
      • Before continuing to the proof of lab section.
      • Read each line of the code and examine how each subroutine executes.
      • Then read the following "Analyze The Code" section.

 

Section 6. Analyze The Code
  1. SheBang Directive
    • Instructions:
      1. vi lesson6a.pl
      2. :set nu
      3. Press the <Enter> key
    • Note(FYI):
      • Line 1: #!/usr/bin/perl
        • #! - is called the SheBang Directive.  SheBang is an interpreter directive that tells Linux to load the following program.
        • /usr/bin/perl - is the Perl Interpreter.  SheBang tells the program loader to run the Perl Interpreter.

     

  2. Explaining Lines 6 through 13
    • Instructions:
      1. Arrow down to line 6
    • Note(FYI):
      • Line 4: &parse_passwd;
        • Call subroutine &parse_passwd to execute.
      • Line 6: sub parse_passwd
        • parse_passwd is the name of the subroutine.
      • Line 7: {
        • Start of the parse_passwd subroutine
      • Lines 9: $file = "/etc/passwd";
        • Set variable $file to the actual /etc/passwd file.
      • Line 12: @ARRAY = `cat $file`;
        • Cat the content of the variable $file to the @ARRAY data structure.  i.e., The array will contain the contents of /etc/passwd.

     

  3. Explaining Lines 14 through 20
    • Instructions:
      1. Arrow down to line 16
    • Note(FYI):
      • Line 16: foreach my $line (@ARRAY)
        • This a foreach loop, that sequentially moves line by line through the array.
      • Line 17: {
        • Start of the foreach loop
      • Line 39: }
        • End of the foreach loop.
      • Line 19: chomp($line);
        • chomp is a perl function use to chop off any newline characters at the end of the line.
        • The variable $line is assign to each line of the @ARRAY as it sequentially enumerates.

     

  4. Explaining Lines 21 through 24
    • Instructions:
      1. Arrow down to line 24
    • Note(FYI):
      • Line 24: my($username,$passwd,$uid,$guid,$geco,$homedir,$shell) = split(/:/,$line);
        • Split is a built-in perl function that is used to break up strings into substrings based on a delimiter.
        • A delimiter is a character(s) that separates elements of a string.  The below example is the first line in the /etc/passwd file.  Notice that ":" is the delimiter that separates each element of the /etc/passwd file.
          • e.g., root:x:0:0:root:/root:/bin/bash
        • Split up variable $line by delimiter ":" into variables $username,$passwd,$uid,$guid,$geco,$homedir,$shell.
        • Notice there are six ":" delimiters which separates seven data elements.

     

  5. Explaining Lines 26 through 32
    • Instructions:
      1. Arrow down to line 26
    • Note(FYI):
      • Lines 26 - 32: Multiple Print Statement
        • Print the contents of each variable.

     

  6. Explaining Lines 33 through 40
    • Instructions:
      1. Arrow down to line 33
    • Note(FYI):
      • Lines 33 - 36: if($shell =~ m/false|nologin/i)
        • IF the variable $shell contains the word false or nologin, THEN print "Interactive Login Is NOT Possible".
      • Line 39: }
        • End of the foreach loop.
      • Line 40: }
        • End of the subroutine parse_passwd

     

  7. Save and Quit
    • Instructions:
      1. Press the <Esc> key
      2. :q!
      3. Press the <Enter> key

 

Section 7. Proof of Lab
  1. Project
    • Instructions:
      1. cp lesson6a.pl lesson6b.pl
      2. Make your edits in lesson6b.pl
      3. Basically, you will modify the existing code.  You will leave program pretty much intact including the subroutine, foreach loop, split, if statement, and prints.
      4. The program should prompt the user to search for a username.
        • e.g., print "Username Search: ";
      5. The program should assign variable $search to standard input
        • e.g., chomp(my $search = <stdin>);
      6. The program will contain the same subroutine called parse_passwd, but it will take in the variable $search as a parameter.
        • e.g., &parse_passwd($search);
      7. After the line that contains split, the program should immediately contains an IF statement that allows you to see if the $username variable contains the $search variable.
        • e.g., if($username =~ m/$search/i)
      8. Inside the IF statement, place the following print statements.  The below print statements should go between the opening starting { brace after the IF statement and the closing } brace.
        • print ">>>>>>> Match Found <<<<<<<<<\n";
        • print "Username: $username\n";
        • print "Password: $passwd\n";
        • print "UID: $uid\n";
        • print "GUID: $uid\n";
        • print "GECOS: $geco\n";
        • print "Homedir: $homedir\n";
        • print "Shell: $shell\n";

         

  2. Proof of Lab
    • Instructions
      1. chmod 700 lesson6b.pl
      2. perl -c lesson6b.pl
      3. ./lesson6b.pl
        • Username Search: root
      4. date
      5. echo "Your Name"
        • Put in your actual name in place of "Your Name"
        • e.g., echo "John Gray"
      6. Do a PrtScn, Paste into a word document, and upload to Moodle.
    • Proof Of Lab Instructions:
      1. Press the PrtScn key
      2. Paste into a word document
      3. Upload to Moodle
     


Help ComputerSecurityStudent
pay for continued research,
resources & bandwidth