欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單聊聊SQL注入的原理以及一般步驟

 更新時(shí)間:2022年02月21日 09:16:02   作者:iamblackcat  
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令,下面這篇文章主要給大家介紹了關(guān)于SQL注入的原理以及一般步驟的相關(guān)資料,需要的朋友可以參考下

原理

SQL注入是一種攻擊方式,在這種攻擊方式中,惡意代碼被插入到字符串中,然后該字符串傳遞到SQL Server的實(shí)例以進(jìn)行分析和執(zhí)行。任何構(gòu)成SQL語句的過程都應(yīng)進(jìn)行注入檢查,因?yàn)镾QL Server將執(zhí)行其接收到的所有語法有效的查詢。

(摘自微軟 SQL注入,但要注意的是,SQL注入并不限于SQL Server,幾乎任何數(shù)據(jù)庫引擎都存在這個(gè)問題)

一般利用步驟

1.判斷注入點(diǎn)

判斷注入點(diǎn)有方面的含義,一是找到可能存在注入的位置,二十判斷該處能否進(jìn)行注入。在靶場(chǎng)環(huán)境下,我們已經(jīng)知道,GET的參數(shù)id是與數(shù)據(jù)庫進(jìn)行交互的點(diǎn),接下來判斷能夠進(jìn)行注入。

id為1,成功查詢,回顯正常

id為1',數(shù)據(jù)庫報(bào)錯(cuò),由報(bào)錯(cuò)信息猜測(cè)閉合方式為單引號(hào)

id為1' --+,成功查詢,回顯正常,印證猜測(cè),

id分別為1' and 1=1 --+和1' and 1=2--+,通過回顯情況,進(jìn)一步判斷能否注入

1=1為永真,當(dāng)1成功查詢,若1=1也成功查詢,則頁面返回正常,1=2為永假,因此若1=2得到執(zhí)行,則頁面必返回不正常。通過對(duì)比二者返回結(jié)果,可知改點(diǎn)能否進(jìn)行注入。

2.判斷查詢字段數(shù)

為了將我們想要的結(jié)果能夠顯示在頁面上,我們需要用到聯(lián)合查詢,聯(lián)合查詢的條件之一是必須保證前后查詢語句的字段數(shù)相等,因此,我們需要判斷查詢的字段數(shù)。

一般采用order by或union select如下:

order by 大于3的數(shù)時(shí)頁面返回不正常,小于等于3時(shí)返回正常,得知原查詢語句的字段數(shù)為3?;?/p>

當(dāng)我們聯(lián)合查詢4列時(shí),得到了查詢語句由不同的列的錯(cuò)誤,查詢3列時(shí):

成功查詢,得原查詢語句只有三列。

3.查數(shù)據(jù)庫名、版本號(hào)、用戶名等信息

union聯(lián)合查詢的規(guī)則是當(dāng)前一個(gè)查詢失敗時(shí)執(zhí)行第二個(gè)查詢,前面我們知道了查詢有三個(gè)字段,接下來將傳入id為0,判斷是三個(gè)字段的回顯位置。

再由數(shù)據(jù)庫內(nèi)置的version()、database()user()查詢出版本號(hào)、數(shù)據(jù)庫當(dāng)前名和當(dāng)前用戶。

4.查詢表名

前面我們查詢得知,當(dāng)前數(shù)據(jù)庫版本為5.5.53,在MySQL5.5后版本都內(nèi)置了數(shù)據(jù)庫information_schema。它存儲(chǔ)了數(shù)據(jù)庫中所有的表名、字段名等信息。從而可以構(gòu)造查詢語句,獲取表名。

payload:?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+

這里的group_concat()為SQL語句內(nèi)置的聚合函數(shù),用來將查詢的結(jié)果作為一個(gè)字符串輸出。

(使用payload:?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

5.查詢字段名

知道了所有的表名,接下來選擇一個(gè)表,查詢其中所有的字段名。

payload:?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+

6.查詢記錄內(nèi)容

有了表名和字段名,便可以爆出數(shù)據(jù)庫中的記錄了。

payload:?id=0' union select 1,group_concat(username),group_concat(password) from users --+

以上是一般SQL注入的流程,當(dāng)然還有一些像報(bào)錯(cuò)注入,請(qǐng)求頭注入、select into outfile 寫入一句話木馬等姿勢(shì)未介紹。后續(xù)學(xué)習(xí)過程中再逐漸補(bǔ)充。

總結(jié)

到此這篇關(guān)于SQL注入的原理以及一般步驟的文章就介紹到這了,更多相關(guān)SQL注入的原理及步驟內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論