SQL 手動注入

2021-10-03 07:21:14 字數 3524 閱讀 2218

web安全攻防 學習筆記

1.1、介紹 sql 注入

sql 注入就是指 web 應用程式對使用者輸入資料的合法性沒有判斷,前端傳入後端的引數是攻擊者可控的,並且引數代入資料庫查詢,攻擊者可以通過構造不同的 sql 語句來實現對資料庫任意操作。

sql 注入漏洞的產生需要滿足兩個條件:

1.2、注入的危害

資料庫敏感資訊洩露

頁面被竄改

資料庫被惡意操作

伺服器被遠端控制

1.3、注入的分類

select

*from users where username =

''and password ='';

注入字串 ***' or 1=1 --+ ; 其中 -- 為注釋 + 在瀏覽器中表示空格, 可以使後面的語句失效

select * from users where username = '***' or 1=1 --'

and password =

'';

1.4、sql 注入的形成原因資料與**未嚴格分離

使用者提交的引數資料未做充分檢查過濾及被帶入到 sql 命令中,改變了原有 sql 命令的" 語義 ",且成功被資料庫執行

1.5、sql 注入過程

客戶端引數值等資料被修改

服務端未經檢查和過濾就將被修改的資料注入到 sql 命令中,sql 命令功能被修改

資料庫引擎執行被修改後的 sql 命令

服務端將注入的結果返回給客戶端

客戶端根據上一次注入獲取到的敏感資訊構造注入語句進行進一步注入

火狐瀏覽器 hackbar 外掛程式安裝

1.1、get 和 post 請求

因此,get 提交的資料會在位址列中顯示出來,而 post 提交,位址列不會改變。

1.2、get 基於報錯的 sql 注入

通過 url 中修改對應的 id 值,為正常數字、字元(單引號,雙引號,括號)、反斜線來探測 url 中是否存在注入點。

例如:

http:/

/127.0.0.1/sqli/less-1/?id=1

# 可以正常訪問

# 報錯資訊 ''1'' limit 0,1'

# 其中 '1'' limit 0,1 未報錯內容

# 容易發現, sql 語句的 id 值可能是使用 ' ' 括起來的

報錯注入利用:

order by 判斷字段數

根據 order by 的語法order by 1表示按照表的第乙個字段排序,可以探測出當前表有多少給字段。

# 根據測試得知有 3 個字段

# 報錯資訊

unknown column '4' in 'order clause'

利用 union select 聯合查詢,獲取表名獲得表的字段數後可以進行下一步探測

# 使用時, 盡量使 id 值不要生效

# 得知在 2, 3 處存在注入點

# 所以可以用函式替換它們

獲取表名:

mysql 有乙個預設資料庫 information_schema,用於儲存各種資料庫啊表啊什麼的,可以利用一下。

# group_concat 把查詢出來的表名放在一起顯示出來, 可以不用這個函式看一下結果

利用 union select 聯合查詢,獲取欄位名

--+

為什麼有這麼多個?

因為它返回的並不只是乙個資料庫的 users 表的欄位名,而是整乙個 mysql 中的所有名為 users 的表的欄位名。

利用 union select 聯合查詢,獲取字段值

sql手動注入

第一步 判斷環境,尋找注入點 確定注入點 用 報錯就有注入的希望 and 1 1 正常 and 1 2 報錯就基本能注入 第二步 猜解表名檢測是否存在admin表,正確存在,返回錯誤則不存在 and exists select from admin 第三步 猜解字段 order by字段長度猜解資料...

sql手動注入經驗總結

總結了一下sql幾個注入的基本思路和用法,現來分享一下 如何判斷有無注入 and1 2 步驟 1 找注入點 id 1等等 2 通過order by 找出一共有多少列數。報錯數字前乙個 id 1 order by 3 前面不用加and 3 利用union select 1,2,3 一般用null取代 ...

使用burpsuite進行手動sql注入

sql注入是乙個web安全漏洞,它使攻擊者能夠干擾應用程式對其資料庫的查詢。通常,它使攻擊者可以檢視他們通常無法檢索的資料。成功的sql注入攻擊可能導致未經授權訪問敏感資料,例如密碼,信用卡詳細資訊或個人使用者資訊。1 檢索隱藏的資料,您可以在其中修改sql查詢以返回其他結果。2 顛覆應用程式邏輯,...