SQL注入原理以及基本方法

2021-09-20 16:41:15 字數 1783 閱讀 4588

一、sql注入的概述

定義:sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。

為了更直觀的讓大家了解到sql注入的原理,貼上一張sql注入攻擊示意圖

●sql注入威脅表現形式可以體現為以下幾點:

●繞過認證,獲得非法許可權

●猜解後台資料庫全部的資訊

●注入可以借助資料庫的儲存過程進行提權等操作

●sql注入攻擊的典型手段

●判斷應用程式是否存在注入漏洞

●收集資訊、並判斷資料庫型別

●根據注入引數型別,重構sql語句的原貌

●猜解表名、欄位名

●獲取賬戶資訊、攻擊web或為下一步攻擊做準備

二、sql注入的簡單例子

1.sql注入漏洞的幾種判斷方法

①'②and 1=1

③and 1=2

如果執行①後,頁面上提示報錯或者提示資料庫錯誤的話,說明是存在注入漏洞的。

如果執行②後,頁面正常顯示,而執行③後,頁面報錯,那麼說明這個頁面是存在注入漏洞的。

2.收集資訊、判斷資料庫型別

從其返回的資訊中可以判斷下資料庫的型別,更多可能可以知道部分資料庫中的字段以及其他有用資訊,為下一步攻擊提供鋪墊。

3.根據注入引數型別,重構sql語句的原貌

①id=40 這類注入的引數是數字型,那麼sql語句的原貌大致是:select*from 表名 where 字段=40

②name=電影 這類注入的引數是字元型,sql語句原貌大致是:select*from 表名 where 字段=『電影』

③搜尋時沒有過濾引數的,如keyword=關鍵字,sql語句原貌大致是:select*from 表名 where 字段 like 『%關鍵字%』

4.猜解表名、欄位名(直接將sql語句新增到url後)

①and exists(select*from 表名)

如果頁面沒有任何變化,說明附加條件成立,那麼就是說明猜解的表名正確,反之,就是不存在這個表,接下來就繼續猜解,知道正確

②and exists(select 字段 from 表名)

方法原理同上

③猜解字段內容(利用以上猜解出的表名和欄位名 方法較古老且麻煩)

●猜解字段內容的長度

(select top 1 len(欄位名)from 表名)>0 直至猜解到》n不成立的時候,得出欄位的長度為:n+1。

●得到長度後,猜解具體的內容

(select top 1 asc(mid(username,1,1))from 表名)>0直到》m不成立時,就可以猜解出ascii碼值了。

防範sql注入攻擊

在虛擬主機

server段中加入如下配置:

if ($request_uri ~*(.*)(insert|select|delete|update|count|*|%|master|truncate|declare|'|;|and|or|(|)|exec)(.*)$) 

當然我們也可以返回404錯誤: 

**如下:

if ($request_uri ~*(.*)(insert|select|delete|update|count|*|%|master|truncate|declare|'|;|and|or|(|)|exec)(.*)$) 

菜鳥東哥

SQL注入原理以及基本方法

一 sql注入的概述 定義 sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。sql注入威脅表現形式可以體現為以下幾點 繞過認證,...

SQL注入基本型別以及如何防止sql注入

注入型別 1.數字注入 select from users where name jack and password 1 or 1 1 password 2.字串注入 select from user where name jack and password sdjakfjsadklfjklsdfd...

sql注入原理及基本認識

sql注入簡介 所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞...