Posted on 12-06-2011
Filed Under (linux, programming, shell script) by admin

Most networks rely on services to run all the time, whether it is MySQL for database, or Apache for web services, the fact of the matter is that those services need to be available all the time; therefore, admins need to make sure those services are running. So here’s a simple, yet efficient script that checks whether a service is running, and if it’s not, it tries to restart the service 3 times, if it fails to start the service; then, it proceeds to notify the user by emailing the log file. You can change the “service” variable to suit your needs depending on the service. Also, you could add more services and use a “for” loop to iterate through every single service. This script kind of creates a starting point.

#!/bin/bash
#author: jorge L. Vazquez
#purpose: checking running services
 
email=root
service=apache2
count=0
threshold=2
servicelog=/var/log/$service.log
 
#checking if service is running
ps -e | grep $service > /dev/null
servicestat=$(echo $?)
 
#if service not running lets try restart 3 times
if [ "$servicestat" != 0 ]; then 
 
	while [ "$count" -le "$threshold" ]
	do
		#attempt to start the service
		/etc/init.d/$service start >> $servicelog 2>&1
		if [ $? != 0 ]; then
			((count=count+1))
		else
			exit 0  #if service started exit
		fi
	done
	#if service could not be started, notify
	cat $servicelog | mail -s "problem starting $service" $email 2>/dev/null
fi
 
#END

Comments Off    Read More   
Posted on 20-05-2011
Filed Under (linux, programming, shell script, ubuntu) by admin

Going through different log files can be a pain, but here’s a simple script that parses today’s logs from different files into a single file, in this case we extract today’s logs from messages, auth.log, syslog. Finally, we send them through email. Don’t forget to make the file executable!… Logparser can be downloaded from here

#!/bin/bash
#author jorge
#purpose: extracting daily log entries from multiple log files
 
LOG1=/var/log/messages
LOG2=/var/log/auth.log
LOG3=/var/log/syslog
MYDATE=`date +%b\ %d`
OUTPUTLOG=`date +%F`.dailylog
EMAIL=btuser
 
for LOG in $LOG{1,2,3}
do
        #if file exist and is not empty then process
        if [ -e $LOG ] && [ -s $LOG ]; then
                echo $LOG BEGIN >> $OUTPUTLOG
                #only grabbing todays log out of file
                grep -E "$MYDATE" $LOG >> $OUTPUTLOG 2>/dev/null
                echo $LOG END >> $OUTPUTLOG
                echo >> $OUTPUTLOG
        fi
done
 
#email output
cat $OUTPUTLOG | mail -s "daily logs `date +%F`" $EMAIL 2>/dev/null
 
#END

Comments Off    Read More   
Posted on 15-05-2011
Filed Under (backtrack, linux) by admin

Well, Backtrack 5 is out, and in this version you have the option to download your preferred desktop manager: Gnome or Kde. In my case I prefer gnome because in my opinion, it offers more flexibility when configuring X window. I have not played around much with this version, but I noticed that Nessus is back (you need to register) but it is free, and you can register as many times you want. Also, it has “Wbar” dock bar, which could be easily configure under Accessories->WbarConf. Anyway, here’s how the gnome desktop looks, well sort of, with a few minor changes.

backtrack 5

Comments Off    Read More   

When conducting a pentest, the first thing the pentester should do is to change its computer mac address and hostname because they are recorded in the logs and dhcp server. Macxchange is a very simple script. It is meant to work with backtrack or any other linux distro. It selects a random word from john the ripper wordlist for hostname, and for the mac address uses macchanger. Once your mac and hostname have been changed remember to restart networking or get an ip “dhclient <interface> “. So if you’re using other distro than backtrack, make sure to have macchanger installed, and edit the proper varialbe for wordlist. You can also download script from here

#!/bin/bash
#author: Jorge L. Vazquez
#purpose: this script will change the mac address to random
#and will pick a random word from password.lst in jtr for hostname
#change variables "interface" and "file" to your settings
#also macchanger needs to be installed
 
INTERFACE=eth0
FILE=/pentest/passwords/jtr/password.lst
WORD=$(sort -R $FILE | head -1)
 
#changing mac address to random
ifconfig $INTERFACE down > /dev/null
if [ $? == 0 ]; then
	printf "%s\nChanging mac address...\n"
	macchanger -r $INTERFACE
else
	printf "%sScript encounter an error, sorry...\n"
	exit 1
fi
 
#changing hostname to random word from password.lst
printf "%s\nChanging Hostname...\n"
OLDHOST=$(hostname)
hostname $WORD
if [ $? == 0 ]; then
	printf "%sPrevius Hostname: $OLDHOST \n"
	printf "%sRandom Hostname: $WORD \n"
else
	printf "%sScript encounter an error, sorry...\n"
	exit 1
fi
 
#putting interface up
ifconfig $INTERFACE up > /dev/null
printf "\n"
 
#END

Comments Off    Read More   
Posted on 28-03-2011
Filed Under (C++, programming) by admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <string>
using namespace std;
 
class TicTacToe
{
private: 
	char table[3][3];
public:
	TicTacToe() { }
	//insert numbers
	void setTable()
	{
		int n = 1;
		for(int i = 0; i < 3; i++)
		{
			for(int j = 0; j < 3; j++)
			{
				table[i][j] = '0' + n;//cast n to char
				n++;
			}
		}
	}
	//output table to screen
	void printTable()
	{
		for(int i = 0; i < 3; i++)
		{
			for(int j = 0; j < 3; j++)
				if(j < 2) { cout << table[i][j] << "|"; }
				else { cout << table[i][j] << endl; }
			if(i < 2) { cout << "-+-+-\n"; }
		}
	}
	//player move and set to X or O
	void playerMove(char num, char player)
	{
		bool wrongMove = true;//wrong move
		for(int i = 0; i < 3; i++)
		{
			for(int j = 0; j < 3; j++)
			{//mark square with X or O
				if(table[i][j] == num) { table[i][j] = player; wrongMove = false; }
			}
		}
		if(wrongMove == true) { cout << "Wrong move!\n"; }
	}
	//cheking for winers
	bool checkWinner(char player, bool gameOver)
	{
		//winning conditions
		for(int i = 0; i < 3; i++)//checking rows
			if(table[i][0] == table[i][1] && table[i][1] == table[i][2]) gameOver = true;
		for(int i = 0; i < 3; i++)//checking columns
			if(table[0][i] == table[1][i] && table[1][i] == table[2][i]) gameOver = true;
		//diagonals
		if(table[0][0] == table[1][1] && table[1][1] == table[2][2]) gameOver = true;
		if(table[0][2] == table[1][1] && table[1][1] == table[2][0]) gameOver = true;
		if(gameOver == true) 
		{
			cout << "Player " << player << " wins!\n\n";
		}
		return gameOver;
	}
	//checking for a draw
	bool checkDraw(bool gameOver)
	{
		int n = 1, count = 0;
		for(int i = 0; i < 3; i++)
		{
			for(int j = 0; j < 3; j++)
			{
				//cheking if board is full
				if(table[i][j] == '0'+n) { count++; }
				n++;
			}
		}
		if(count < 1) { cout << "It's a draw!\n\n"; gameOver = true; }
		return gameOver;
	}
};
 
int main()
{
	bool done = false, gameOver = false;
	char player = 'O', num;
	TicTacToe myGame;
	myGame.setTable();
	do
	{
		if(player == 'X') { player = 'O'; }
		else { player = 'X'; } 
		myGame.printTable();
		cout << "Player \"" << player << "\" turn or (q) to quit> ";
		cin >> num; 
		cout << "\n";
		if(num == 'q') { cout << "Goodbye!...\n"; break; }
		myGame.playerMove(num, player);
		gameOver = myGame.checkWinner(player, gameOver);
		gameOver = myGame.checkDraw(gameOver);
		//if game over, starting over
		if(gameOver == true) 
		{	myGame.setTable(); 
			gameOver = false; 
		}
	}while(!done);
 
	system("pause");
	return 0;
}

Comments Off    Read More   
Posted on 12-03-2011
Filed Under (C++, programming) by admin

BracketingSearch from cplusplus. The solution to computer guessing the number the user is thinking is achieve best by using Binary Search. A binary search locates a value in a sorted array by determining whether the value occurs in the first or second half, then repeating the search in one of the halves. In this case the computer start with a range 1 – 100, and using the num = (1 + 100) / 2 formula the computer continually adjust the range until it guesses the number.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Guessing game: the computer guess the 
//number that the user is thinking. 
//this is done by using Binary Search algorithm
#include <iostream>
using namespace std;
 
int guessNumber(int& l, int& h, int& m, char c);
void guessRight(int&, int&, int&, int&);
 
 
int main()
{
    int low = 0, high = 100, count = 0, mid = 0;
	char a;
	do
	{
		if(count == 0) //star game over
		{
            system("cls");
			cout << "Think a number from 1 - 100. \n";
			system("pause");
			cout << "\n\n";
			mid = guessNumber(low, high, mid, a);
		}
		count++;//count and menu
		cout << "Is your number " << mid << " ?\n";
		cout << "Enter (c) for correct\n";
		cout << "Enter (l) if number is low\n";
		cout << "Enter (h) if number is high\n";
		cout << "Enter (q) to quit\n";
		cin >> a;
		if(a == 'c') { guessRight(count, high, low, mid); }
		else if(a == 'l') { mid = guessNumber(low, high, mid, a); }
		else if(a == 'h') { mid = guessNumber(low, high, mid, a); }
		else if(a == 'q') { cout << "Goodbye!\n"; break; }
		else { cout << "Wrong choice try again\n"; }
	}while(a != 'q');
 
	system("pause");
	return 0;
}
//binary search
int guessNumber(int& low, int& high, int& mid, char a)
{
	if(a == 'l') { low = mid + 1; }//if number is low
	if(a == 'h') { high = mid - 1; }//if number is high
	int m = (high + low) / 2;
	return m;
}
void guessRight(int& count, int& high, int& low, int& mid)//guess right
{
	cout << "Congrats, you guessed in " << count << " tries!\n\n";
	high = 100; low = 0; mid = 0; count = 0;//reseting all num
	system("pause");
 
}

Comments Off    Read More   
Posted on 12-03-2011
Filed Under (C++, programming) by admin

This is the solution to PancakeGlutton exercise from cplusplus.com. Printing out an array of number in descending or ascending order can be accomplish with out doing any type of sort. ok, let’s say you want to find out how may pancakes a every person ate, and then output in descending order starting with the most pancakes. In this case the output is in descending order, so all you have to do is find the biggest number and then decrease by one and print every number in the array. Here’s an example.

#include <iostream>
#include <string>
using namespace std;
int main()
{
	int persons[10]; 
	for(int i = 0; i < 10; i++)
	{
		cout << "Enter how many pancakes person " << i << " ate: ";
		cin >> persons[i];
	}
	//finding biggest and smallest
	int small = persons[0], big = persons[0], idSmall, idBig;
	for(int j = 0; j < 10; j++)
	{
		if(small > persons[j]) { small = persons[j]; idSmall = j; }
		if(big < persons[j]) { big = persons[j]; idBig = j; }
	}
 
	cout << "The person who ate the most pancakes > " << idBig << endl;
	cout << "The person who ate the least pancakes > " << idSmall << endl;
 
	//output in descending order starting with most pancakes
	for(big; big >= 0; big--)
	{
		for(int i = 0; i < 10; i++)
		{
		    if(persons[i] == big) { cout << "Person " << i << " ate " << big << endl; }
		}
	}
	system("pause");
	return 0;
}

Comments Off    Read More