Wednesday, May 30, 2012

Log central with Snort, Syslog-ng and Splunk ( SSS)

In previous post, i installed snort with barnyard to send log to snort report. Today, i installed addition Base: Snort log analysis:
Download file:
#wget http://sourceforge.net/projects/adodb/files/latest/download?source=files
#wget http://sourceforge.net/projects/secureideas/files/latest/download?source=files
#yum --enablerepo=epel -y install php-adodb php-pear-Image-Graph

#unzip adodb517.zip
#tar xvzf base-1.4.5.tar.gz
#cp -R base-1.4.5 /var/www/html/
#mv  /var/www/html/base-1.4.5  /var/www/html/base
#cp -R adodb5 /var/www/html/base
#chmod 777 -R /var/www/html/base

Go http:///base and setup, adodb path is /var/www/html/base/adodb5

After complete this tutorial, i started config snort to send log to center log. I am using splunk to Log Central Manager. I used syslog-ng to send snort log to splunk.
Frist, in snort machine, i edited config to force snort write alert to plain text file:
#vim /etc/sysconfig/snortd ( i don`t remmeber path)
Find ALERT and uncomment it, change ALERT=full
Restart snort:
#service snortd restart
#tail -f /var/log/snort/alert
Action to make alert and see alert log.
Next, we will install syslog-ng:
#yum --enablerepo=epel syslog-ng
Edit syslog-ng file:
#vim  /etc/syslog-ng/syslog-ng.conf
source s_tail { file("/var/log/snort/alert"
                    follow_freq(1) flags(no-parse) ) ; };

destination stail2 {  tcp("192.168.174.110") ;
};

log {
        source(s_tail);
        destination(stail2);
flags(flow-control);
};

I used tcp ( port 514)
#service syslog stop
#service syslog-ng start
#chkconfig syslog off
#chkconfig syslog-ng off



Go to splunk machine:
Install splunk: Download from: http://www.splunk.com/
#rpm -Uvh splunk-4.3.2-123586.i386.rpm
Access webgui, then go to DataInput/ Add TCP port 514:




You can use UDP or TCP ( syslog-ng config)
Restart splunk: /opt/splunk/bin/spunk restart
Install snort app for spunk: Go to App/Manger/Install - search snort
or: http://splunk-base.splunk.com/apps/22369/splunk-for-snort-splunk-4x
After install, go to snort for splunk to view
------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Thursday, May 24, 2012

My first Python Program

Today i started learning Python. I had first program. After finish, i learned:
print number, string, format etc
function
local and global variable
read file
string find index and substring

And now, this is my first program:
#Author:     Namhb
#Email:     namhb@gmail.com
#Program:    Demo1
#Version:    0.1

#############################################
##### Start program

##### Lib
import getpass
##### Global Variable
userfile = "user.txt"
userc = ""
rolec = ""
logined = False
failcount = 0
maxfail = 3
##### Function
def menu():
    print "+---------------------------------------------+"
    print "+                                             +"
    print "+     Demo Python Program                     +"
    print "+   namhb@gmail.com                           +"
    print "+                                             +"
    print "+---------------------------------------------+"

def checklogin(user, passwd):
    f = file(userfile)
    check = False
    while True:
        line = f.readline()
        if len(line) == 0:
            break
        u_end = line.index(":")
        u = line[0:u_end]
        p_end = line.index(":",u_end+1)
        p = line[u_end+1:p_end]
        r = line[p_end+1:len(line)-1]
        if user == u and passwd == p :
            check = True   
            break
    if check == True:
        # Set cookie
        global userc, rolec, logined
        userc = user
        rolec = r
        logined = True
    f.close()

def login():
    print "Login"
    username = raw_input("Username: ")
    password = getpass.getpass()
    print "Loading: user %s with password in %s" %(username,userfile)
    checklogin(username, password)
    if logined == True:
        print "Login successfully"
        print "Hello %s - %s" %(userc, rolec)
    else:
        global failcount
        failcount += 1
        print "Login failed, you have %d to try again" %(maxfail - failcount)
        if (maxfail - failcount) > 0:
            login()
        else:
            exit()       
   
##### Main
menu()
login()

And user.txt file:
namhb:123456:admin
linh:123456:user

------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Friday, May 18, 2012

Install Snort with snort report in CentOS

Step 1: Preparing

#yum install pcre pcre-devel php php-common php-gd php-cli php-mysql flex bison mysql mysql-devel mysql-bench mysql-server php-pear.noarch php-pear-DB.noarch php-pear-File.noarch kernel-devel libxml2-devel vim-enhanced.i386
#yum install gcc-c++

Download sourcode:
#cd /usr/local
#wget http://ips-builder.googlecode.com/files/libnet-1.0.2a.tar.gz
#wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
#wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
#wget http://www.snort.org/downloads/1623 -O daq-0.6.2.tar.gz
#wget http://www.snort.org/downloads/1631 -O snort-2.9.2.3.tar.gz
#download https://www.snort.org/snort-rules/
#wget http://www.unixwiz.net/tools/nbtscan-source-1.0.35.tgz
#wget http://jpgraph.net/download/download.php?p=1.27.1 -O jpgraph-1.27.1.tar.gz

Step 2: Install lib
#cd /usr/local
#tar zxvf /root/libnet-1.0.2a.tar.gz
#cd Libnet-1.0.2a
#./configure && make && make install
#cd /usr/local
#tar zxvf /root/libdnet-1.12.tgz
#cd libdnet-1.12
#./configure && make && make install
#cd /usr/local
#tar xvzf libpcap-1.1.1.tar.gz
#cd libpcap-1.1.1
#./configure && make && make install
#cp /usr/local/lib/libpcap.a /usr/lib/
#cd /usr/local
#mkdir nbtscan
#cd nbtscan
#tar zxvf /root/nbtscan-1-3-1.tar.gz
#make

Step 3: Install dag and snort
Install DAG
#cd /usr/local
#tar xvzf daq-0.6.2.tar.gz
#cd daq-0.6.2
#./configure && make && make install

Install Snort
#cd /usr/local
#tar zxvf /root/snort-2.9.2.3.tar.gz
#cd snort-2.9.2.3
#./configure && make && make install

Step 4: Config snort

Create snort rules and logs
#mkdir /etc/snort
#mkdir /var/log/snort
#cd /etc/snort
#tar zxvf /root/snortrules-snapshot-2921.tar.gz -C /etc/snort
#cp etc/* /etc/snort
#groupadd snort
#useradd -g snort snort
#chown snort:snort /var/log/snort
#touch /var/log/snort/alert
#chown snort:snort /var/log/snort/alert
#chmod 600 /var/log/snort/alert
#mkdir /usr/local/lib/snort_dynamicrules
#cp /etc/snort/so_rules/precompiled/Centos-5-4/i386/2.9.2.1/*.so /usr/local/lib/snort_dynamicrules
#cat /etc/snort/so_rules/*.rules >> /etc/snort/rules/so-rules.rules

Edit snort.conf
#vim /etc/snort/snort.conf
Change:
RULE_PATH to /etc/snort/rules
PREPROC_RULE_PATH to /etc/snort/preproc_rules
SO_RULE_PATH to /etc/snort/so_rules
Find reputation preprocessor and comment all this preprocessor. ( line 511)
Find unified2 and uncomment, edit to:  output unified2: filename snort.log, limit 128

Step 5: Setup MySQL
#mysql -u root -p
>SET PASSWORD FOR root@localhost=PASSWORD(‘password’);
>create database snort;
>grant ALL PRIVILEGES on snort.* to snort@localhost with GRANT option;
>SET PASSWORD FOR snort@localhost=PASSWORD(‘password’);
>exit

#cd /usr/local/snort-2.9.2.1/schemas
#mysql -p < create_mysql snort

Test database:
#mysql -u root -p
#SHOW DATABASES;
There should be 4 rows ( snort)
#use snort;
#SHOW TABLES;
There should be 16 rows
#exit;

Step 6: Create GUI

Extract JPGRAPP
#cd /usr/local
#tar xvzf /root/jpgraph-1.27.1.tar.gz
#cp jpgraph-1.27.1 /var/www/html
#mv /var/www/html/jpgraph-1.27.1 /var/www/html/jpgraph

#cd /var/www/html
#tar zxvf /root/snortreport-1.3.1.tar.gz
#cd snortreport-1.3.1
#vim srconf.php
Find $pass, change password to your password
Find JPGRAPH_PATH change to ("JPGRAPH_PATH", "../jpgraph/src/");
Find NMAP_PATH change to ("NMAP_PATH", "/usr/bin/nmap -v");
Find NBTSCAN_PATH change to ("NBTSCAN_PATH", "/usr/local/nbtscan/nbtscan");

Install Barnyard
#cd /usr/local
#tar zxvf /root/barnyard2-1.9.tar.gz
#cd barnyard2-1.9
#./configure --with-mysql &&make && make install
#cp etc/barnyard2.conf /etc/snort

Setup Barnyard
#vim /etc/snort/barnyard2.conf
Change hostname to localhost
Change interface to eth0 ( listen interface)
Change mysql line: output database: log, mysql, user=snort password=password dbname=snort host=localhost

Step 7: Start Snort
First CLI terminal
#snort -c /etc/snort/snort.conf

Second CLI terminal
#cp /dev/null /var/log/snort/barnyard.waldo
#mkdir /var/log/barnyard2
Start barnyard:
#/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard.waldo

Test snort:
Third CLI:
#vim /etc/snort/rules/local.rules
Insert line:
“alert tcp any any <> any 80 (msg: "Test web activity"; sid:1000001;)”
Restart snort ( Ctrl+C and type start snort again in first CLI)
Open Web Browser, type your snort server address
Go to: http:///snortreport-1.3.3/alerts.php


If you see a number of events with SID 1000001, Snort works!

Step 8: Config Snort and barnyard start automatically

Snort:
#ln -s /usr/local/bin/snort /usr/sbin/snort
#cp /usr/local/snort-2.9.2.1/rpm/snortd /etc/init.d
#cp /usr/local/snort-2.9.2.1/rpm/snort.sysconfig /etc/sysconfig/snort
#cd /etc/rc3.d
#ln -s ../init.d/snortd S99snortd
#cd ../rc0.d
#ln -s ../init.d/snortd K99snortd
#cd /etc/rc5.d
#ln -s ../init.d/snortd S99snortd
#cd ../rc6.d
#ln -s ../init.d/snortd K99snortd
#chmod 755 /etc/init.d/snortd
#vim /etc/sysconfig/snort
Find eth0 and change to your interface
Comment ALERTMODE=FAST, DUMP_APP=1, BINARY_LOG=1

Test: /etc/init.d/snortd start

Barnyard2:
#vim /etc/snort/barnyard2.conf
Uncomment config daemon
Set the path to your waldo file, /var/log/snort/barnyard2.waldo

#vim /usr/local/barnyard2-1.9/rpm/barnyard2.config
Change LOG_FILE to snort.log
Change CONF to /etc/snort/barnyard2.conf

#ln -s /usr/local/bin/barnyard2 /usr/sbin/barnyard2
#cp /usr/local/barnyard2-1.9/rpm/barnyard2 /etc/init.d
#vim /etc/init.d/barnyard2
Change BARNYARD_OPTS to BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR -w $WALDO_FILE -f $LOG_FILE -X $PIDFILE $EXTRA_ARGS"
#cp /usr/local/barnyard2-1.9/rpm/barnyard2.config /etc/sysconfig/barnyard2
#chmod 755 /usr/local/bin/barnyard2
#cd /etc/rc3.d
#ln -s ../init.d/barnyard2d S99barnyard2d
#cd ../rc0.d
#ln -s ../init.d/barnyard2d K99barnyard2d
#cd /etc/rc5.d
#ln -s ../init.d/barnyard2d S99barnyard2d
#cd ../rc6.d
#ln -s ../init.d/barnyard2d K99barnyard2d
#chmod 755 /etc/init.d/barnyard2

Test: /etc/init.d/barnyard2 start.

------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Monday, May 14, 2012

Linux Bufferoverflow Exploit

Demo Linux Bufferoverflow Exploit:


------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Saturday, May 12, 2012

Local File Include with Access log

My demo for Local File Include. If you can not found any file contain mailicous code on server, you can use access log to inject malicious code. Note: If you send url by web browser, url will be encoded. So, you must send direct url to server to write code to access log.



------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Monday, May 7, 2012

SQLinjection with XSS

My report in tomorrow. If you find SQL injection, with union stament, you can force web application print result. Ex: union 1,2,3,4,5 -> You can see 2 3 4 5 number. Replace 2 with 'namhb', you can see namhb. So, you can exploit XSS in SQL injection.
Now, you can insert javascript, instead: alert(/namhb/) (in script tag). Buzz, new dialog.
Finish, have got many script, you can use sqli,js.
See demo:


------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Sunday, May 6, 2012

Exploit writing tutorial part 3 : SEH Based Exploits

Ở 2 phần trước, chúng ta đã nói về stack overflow. Phần này, chúng ta sẽ nói về một phương pháp khai thác khác sử dụng ngoại lệ, để từ đó thực hiện lệnh nhảy tới đoạn code mong muốn.
Trước hết, cần phải nói về ngoại lệ - exception handlers ?
Việc bắt ngoại lệ được đặt trong ứng dụng, mục đích để bắt các ngoại lệ mà ứng dụng có thể gặp phải ( ví dụ như file không tồn tại, hay chia cho 0...)

try



{



 //run stuff.  If an exception occurs, go to code



}



catch



{



 // run stuff when exception occurs



}

Nếu trong một chương trình bình thường không sử dụng ngoại lệ, đầu tiên sẽ đẩy vào các tham số, rồi đến EIP, EBP, tiếp đến cấp phát cho các biến cục bộ. Nếu chương trình có sử dụng ngoại lệ, sẽ cấp phát thêm một vùng để chứa ngoại lệ
"Address of exception handler" là một phần của  SEH record. Windows có một SEH mặc định (Structured Exception Handler) để bắt ngoại lệ. Khi mà ngoại lệ này được bắt, bạn sẽ thấy một popup “xxx has encountered a problem and needs to close”.
Để ứng dụng có thể trỏ đến catch code, con trỏ sẽ trỏ tới exception handler code được lưu trên stack. Mỗi code block có một frame của riêng mình. Nói cách khác, mỗi chương trình có một stack frame, nếu ngoại lệ được triển khai trong chương trình, ngoại lệ sẽ được xử lý trong stack frame này. Thông tin về ngoại lệ được lưu trữ trong exception_registration của stack
Cấu trúc của SEH record là 8bytes gồm 2 block 4 bytes.
Một con trỏ trỏ đến exception_registration tiếp theo, thường là SEH record tiếp theo
Con trỏ trỏ tới địa chỉ của exception handler code
Ở phía trên của các khối dữ liệu chính (các khối dữ liệu của chức năng của main, hoặc TEB TEB (Thread Environment Block) / TIB (Thread Information Block), một con trỏ trỏ đến đầu của chuỗi SEH được đặt. Chuỗi SEH này thường được gọi là FS: [0]
Vì vậy, khi nhìn vào mã lệnh Intel bạn sẽ thấy lệnh DWORD ptr từ FS: [0]. Điều này đảm bảo rằng xử lý ngoại lệ được thiết lập và sẽ có thể bắt lỗi khi chúng xảy ra. Opcode của lệnh này là 64A100000000. Nếu bạn không thể tìm thấy opcode này, các ứng dụng / thread không có thể có ngoại lệ xử lý.
Dưới cùng của chuỗi SEH được chỉ định bởi FFFFFFFF. Điều này sẽ kích hoạt kết thúc không của chương trình (và hệ điều hành xử lý sẽ kick vào)
How can we then use the SEH to jump to shellcode ?
Lý thuyết là, nếu bạn có thể ghi đè SE handler để sử dụng khi ngoại lệ được kích hoạt, chúng ta có thể buộc ứng dụng nhảy tới code mà chúng ta mong muốn ( giống như stack overflow). Tuy nhiên, bằng cơ chế XOR, trước khi mà ngoại lệ được kích hoạt, các thanh ghi sẽ được XOR trỏ 0×00000000 cho nên chúng ta không thể sử dụng được kỹ thuật jump reg như bình thường.
Thay vào đó, chúng sẽ sử dụng pop pop ret. Bình thường, các next SEH sẽ chứa địa chỉ của SEH tiếp theo, SE handler chứa địa chỉ của code sẽ được ngoại lệ thực thi. Chúng ta sẽ:
Gây ra một ngoại lệ, mục đích là kích hoạt SEH. Đương nhiên, phần giá trị của SEH record đã bị chúng ta điều khiển.
Ghi đè địa chỉ của next SEH bằng địa chỉ của jump code
Ghi đè địa chỉ của SEH handler bằng địa chỉ của pop pop retn
Khi ngoại lệ được kích hoạt, con trỏ EIP trỏ tới SEH handler, lúc này trỏ tới địa chỉ pop pop retn. Lúc này, lần lượt sẽ lấy trong stack ra 2 lần, mỗi lần 4 bytes, có nghĩa là ESP + 8. Điều đó có nghĩa là con trỏ stack trỏ tới next SEH.
Tiến hành retn lấy địa chỉ lưu trong next SEH, nhưng nó không còn chứa địa chỉ trỏ tới SEH record nữa mà trỏ tới jumpcode. Ở đây, thường là nhảy 8bytes. Để đảm bảo, thường nhảy 30bytes với NOP được sử dụng để cách.
Sơ đồ như sau:
1st exception occurs :
|
--------------------------- (1)
                           |
                    -------+-------------- (3) opcode in next SEH : jump over SE Handler to the shellcode
                    |      |             |
                    |      V             V
[ Junk buffer ][ next SEH ][ SE Handler ][ Shellcode ]
               opcode to   do                 (3) Shellcode gets executed
               jump over   pop pop ret
               SE Handler   |
               ^            |
               |            |
               -------------- (2) will ‘pretend’ there’s a second exception, puts address of next SEH location in EIP, so opcode gets exe


------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Demo buffer overflow

First is demo smash the stack:

Next is demo SEH exploit:

------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Uploading Exploit with Metasploit

With msfpayload, you can create web shell to backdoor ( like metepreter). This is my demo with metasploit
------------------------------------------------------------
Thanks for reading
--------------------------------------------------------------------------
Security Research
All my Lab:
Linux Lab -- window and Cisco Lab
to be continued - I will update more.

Install Xposed Inspector and Frida on Genymotion

Today i had some work with android. So i need trace application. I found 2 nice tool can help me: Xposed Inspector and Frida. To setup ther...