vue大型網(wǎng)站開發(fā)嗎公司做賣網(wǎng)站有前景嗎
鶴壁市浩天電氣有限公司
2026/01/24 15:41:27
vue大型網(wǎng)站開發(fā)嗎,公司做賣網(wǎng)站有前景嗎,wordpress進(jìn)度條,成都廣告設(shè)計(jì)第一關(guān)先來判斷是否可以在url上直接打開地址欄#xff0c;post傳入的內(nèi)容是否直接會(huì)拼接到數(shù)據(jù)庫(kù)語句中?id1%20%27and%2012%20--%20ads%20是空格的url的代碼具體操作流程如下1,判斷是否是注入類型若輸入 ?id1 頁(yè)面正常#xff0c;輸入 ?id1 頁(yè)面報(bào)錯(cuò)#xff0c;就證明了單…第一關(guān)先來判斷是否可以在url上直接打開地址欄post傳入的內(nèi)容是否直接會(huì)拼接到數(shù)據(jù)庫(kù)語句中?id1%20%27and%2012%20--%20ads%20是空格的url的代碼具體操作流程如下1,判斷是否是注入類型若輸入?id1頁(yè)面正常輸入?id1頁(yè)面報(bào)錯(cuò)就證明了單引號(hào)閉合的字符型注入存在。?id1%20%27and%2012%20--%20ads?id1%20%27and%2011%20--%20ads百分號(hào)27是單引號(hào)看兩個(gè)顯示結(jié)果會(huì)不會(huì)變2,判斷字段ORDER BY關(guān)鍵字的核心作用MySQL 語法用于對(duì)查詢結(jié)果集進(jìn)行排序語法格式為ORDER BY 字段名/字段索引。這里的關(guān)鍵特性O(shè)RDER BY支持用數(shù)字「字段索引」代替字段名數(shù)字N表示 “對(duì)查詢結(jié)果的第 N 個(gè)字段進(jìn)行排序”。步驟 2判斷字段數(shù)order by用order by N猜解查詢的字段數(shù)量輸入?id1 order by 1----是注釋符讓后面的 SQL 失效頁(yè)面正常。輸入?id1 order by 2--頁(yè)面正常。輸入?id1 order by 3--頁(yè)面正常。輸入?id1 order by 4--頁(yè)面報(bào)錯(cuò)說明字段數(shù)是3。3確定回顯位置-1 union select 1,2,3--輸入?id-1 union select 1,2,3--頁(yè)面顯示2和3確定這兩個(gè)位置為回顯位。數(shù)據(jù)庫(kù)原理拆解UNION SELECT聯(lián)合查詢的核心規(guī)則MySQL 語法用于將兩個(gè)或多個(gè)SELECT語句的查詢結(jié)果集合并為一個(gè)結(jié)果集返回。必須滿足核心前提條件多個(gè)SELECT語句查詢的「字段數(shù)量必須相同」且對(duì)應(yīng)字段的數(shù)據(jù)類型兼容否則報(bào)錯(cuò)。例如SELECT 1,2,3 UNION SELECT 4,5,6;合法均為 3 個(gè)字段SELECT 1,2 UNION SELECT 3,4,5;非法字段數(shù)不一致。為什么要用id-1原始 SQL 中id1會(huì)查詢到有效數(shù)據(jù)存在id1的用戶此時(shí)UNION SELECT的結(jié)果集會(huì)被原始查詢結(jié)果覆蓋頁(yè)面只顯示原始數(shù)據(jù)無法看到聯(lián)合查詢的內(nèi)容。傳入id-1拼接后的 SQL 為SELECT * FROM users WHERE id-1 UNION SELECT 1,2,3--;由于數(shù)據(jù)庫(kù)中不存在id-1的用戶原始查詢結(jié)果集為空。根據(jù) MySQL 聯(lián)合查詢的規(guī)則當(dāng)?shù)谝粋€(gè)SELECT結(jié)果集為空時(shí)會(huì)直接顯示第二個(gè)SELECT聯(lián)合查詢的結(jié)果集這是我們能看到1,2,3的關(guān)鍵?;仫@位置的含義頁(yè)面最終顯示2和3說明原始 SQL 查詢結(jié)果集中第 2 個(gè)和第 3 個(gè)字段的內(nèi)容會(huì)被渲染到頁(yè)面上第 1 個(gè)字段可能不顯示或被隱藏。后續(xù)我們只需要將2和3替換為實(shí)際的查詢語句如查數(shù)據(jù)庫(kù)名、賬號(hào)密碼就能讓查詢結(jié)果在頁(yè)面上顯示出來這是聯(lián)合查詢注入的核心價(jià)值。4查詢數(shù)據(jù)庫(kù)信息核心注入操作操作回顧通過替換回顯位的2,3依次查詢數(shù)據(jù)庫(kù)名、表名、字段名、賬號(hào)密碼。數(shù)據(jù)庫(kù)原理拆解分步驟解析1. 查詢當(dāng)前數(shù)據(jù)庫(kù)名?id-1 union select 1,database(),3--database()MySQL 內(nèi)置系統(tǒng)函數(shù)作用是返回當(dāng)前正在使用的數(shù)據(jù)庫(kù)名稱即原始 SQL 所屬的數(shù)據(jù)庫(kù)。拼接后的 SQL 為SELECT * FROM users WHERE id-1 UNION SELECT 1,database(),3--;原理聯(lián)合查詢的第 2 個(gè)字段被替換為database()數(shù)據(jù)庫(kù)執(zhí)行該函數(shù)后返回當(dāng)前數(shù)據(jù)庫(kù)名通常是security并通過頁(yè)面的回顯位展示出來。2. 查詢數(shù)據(jù)庫(kù)中的表名group_concat(table_name)information_schema.tables核心語法SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schemadatabase();各部分原理拆解information_schema.tables系統(tǒng)數(shù)據(jù)庫(kù)information_schema中的tables表存儲(chǔ)了 MySQL 中所有數(shù)據(jù)庫(kù)的表元數(shù)據(jù)包括數(shù)據(jù)庫(kù)名table_schema、表名table_name、表類型等。WHERE table_schemadatabase()過濾條件只查詢當(dāng)前數(shù)據(jù)庫(kù)database()返回的結(jié)果中的表避免查詢到其他數(shù)據(jù)庫(kù)如mysql、information_schema的表。group_concat(column_name)MySQL 內(nèi)置聚合函數(shù)作用是將多行查詢結(jié)果拼接為一行字符串返回用逗號(hào)分隔。若不用group_concat()直接SELECT table_name聯(lián)合查詢只會(huì)返回單行結(jié)果默認(rèn)只取第一行無法看到所有表名用group_concat()可以將所有表名emails,referers,uagents,users拼接為一行一次性在回顯位展示完整這是注入中高效查詢多行數(shù)據(jù)的核心技巧。拼接后的 SQL 執(zhí)行后會(huì)從information_schema.tables中提取當(dāng)前數(shù)據(jù)庫(kù)的所有表名拼接后通過回顯位展示。3. 查詢users表的字段名group_concat(column_name)information_schema.columns核心語法SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schemadatabase() AND table_nameusers;各部分原理拆解information_schema.columns系統(tǒng)數(shù)據(jù)庫(kù)information_schema中的columns表存儲(chǔ)了 MySQL 中所有表的字段元數(shù)據(jù)包括數(shù)據(jù)庫(kù)名table_schema、表名table_name、字段名column_name、字段類型等。過濾條件table_schemadatabase() AND table_nameusers精準(zhǔn)定位「當(dāng)前數(shù)據(jù)庫(kù)」中的「users表」只查詢?cè)摫淼淖侄涡畔?。同樣使用group_concat(column_name)將所有字段名id,username,password拼接為一行通過回顯位完整展示。4. 查詢users表的賬號(hào)密碼group_concat(username,:,password)核心語法SELECT group_concat(username,:,password) FROM users;各部分原理拆解users表是 SQLi-Labs 中存儲(chǔ)管理員賬號(hào)密碼的核心業(yè)務(wù)表從步驟 2 中查詢得到。username,:,passwordMySQL 中支持用逗號(hào),拼接字符串這里將username用戶名、分隔符:、password密碼拼接為一個(gè)字符串如admin:admin方便閱讀。group_concat()將users表中所有行的賬號(hào)密碼拼接為一行一次性展示所有數(shù)據(jù)避免多次查詢高效獲取全部核心信息。拼接后的 SQL 執(zhí)行后數(shù)據(jù)庫(kù)會(huì)從security數(shù)據(jù)庫(kù)的users表中提取所有賬號(hào)密碼通過回顯位展示完成核心注入目標(biāo)。總結(jié)整個(gè)注入流程的核心是篡改后臺(tái)原始 SQL利用 MySQL 語法特性注釋符、ORDER BY、UNION SELECT、系統(tǒng)表 / 函數(shù)實(shí)現(xiàn)非法查詢。關(guān)鍵節(jié)點(diǎn)閉合單引號(hào)突破字符型注入限制→ 猜字段數(shù)滿足聯(lián)合查詢前提→ 找回顯位獲取查詢結(jié)果出口→ 查元數(shù)據(jù)通過information_schema獲取核心信息。所有操作的底層支撐都是 MySQL 的基礎(chǔ)語法和系統(tǒng)表 / 函數(shù)的特性這也是 SQL 注入的核心所以為發(fā)現(xiàn)這個(gè)界面加載粗我要第二關(guān)和上面只有閉合方式的區(qū)別閉合方式為雙引號(hào)第三關(guān)和上面只有閉合方式的區(qū)別閉合為單引號(hào)和括號(hào)第四關(guān)和上面只有閉合方式的區(qū)別閉合為單引號(hào)和括號(hào)SQLi-Labs 5-7 關(guān)原理講解注入類型與核心技巧這三關(guān)分別對(duì)應(yīng)報(bào)錯(cuò)注入、盲注布爾型、盲注時(shí)間型第五關(guān)核心特征頁(yè)面只返回 “正確 / 錯(cuò)誤” 提示無數(shù)據(jù)回顯但會(huì)輸出 SQL 語法錯(cuò)誤信息如 “you have an error in your SQL syntax”。SELECT * FROM users WHERE id$id LIMIT 0,1;利用MySQL 報(bào)錯(cuò)函數(shù)如extractvalue()、updatexml()讓數(shù)據(jù)庫(kù)在執(zhí)行惡意 SQL 時(shí)拋出錯(cuò)誤并將查詢結(jié)果嵌入錯(cuò)誤信息中返回實(shí)現(xiàn) “無回顯下獲取數(shù)據(jù)”。常用報(bào)錯(cuò)函數(shù)extractvalue()語法extractvalue(1, concat(0x7e, 查詢語句, 0x7e))作用從 XML 文檔中提取值當(dāng)?shù)诙€(gè)參數(shù)包含特殊字符如~時(shí)會(huì)拋出錯(cuò)誤并顯示參數(shù)內(nèi)容。示例查數(shù)據(jù)庫(kù)名plaintext?id1 and extractvalue(1,concat(0x7e,database(),0x7e))--頁(yè)面會(huì)返回錯(cuò)誤XPATH syntax error: ~security~其中security就是數(shù)據(jù)庫(kù)名。updatexml()原理與extractvalue()類似語法updatexml(1, concat(0x7e, 查詢語句), 1)。核心邏輯通過構(gòu)造包含報(bào)錯(cuò)函數(shù)的 SQL強(qiáng)制數(shù)據(jù)庫(kù)輸出錯(cuò)誤信息間接獲取查詢結(jié)果無需頁(yè)面回顯數(shù)據(jù)。第六關(guān)核心特征頁(yè)面僅返回 “存在數(shù)據(jù)” 或 “不存在數(shù)據(jù)”如 “you are in”/“you are not in”無任何錯(cuò)誤提示或數(shù)據(jù)回顯。原始 SQLsqlSELECT * FROM users WHERE id$id LIMIT 0,1;字符型注入雙引號(hào)閉合原理利用SQL 邏輯判斷的布爾結(jié)果true/false通過 “逐字符猜解” 的方式獲取數(shù)據(jù)。核心技巧逐字符判斷利用substr()、ascii()函數(shù)substr(目標(biāo)字符串, 位置, 1)截取字符串指定位置的字符ascii(字符)將字符轉(zhuǎn)換為 ASCII 碼值。示例猜數(shù)據(jù)庫(kù)名第 1 個(gè)字符plaintext?id1 and ascii(substr(database(),1,1))100--若頁(yè)面顯示 “you are in”說明數(shù)據(jù)庫(kù)名第 1 個(gè)字符的 ASCII 碼大于 100逐步縮小范圍最終確定字符如security的第 1 個(gè)字符s的 ASCII 碼是 115。核心邏輯通過構(gòu)造邏輯判斷語句根據(jù)頁(yè)面的 “存在 / 不存在” 提示逐個(gè)字符推導(dǎo)目標(biāo)數(shù)據(jù)效率低但適用于無回顯、無報(bào)錯(cuò)的場(chǎng)景。第七關(guān)核心特征頁(yè)面無任何回顯、無錯(cuò)誤提示無論 SQL 是否正確頁(yè)面均顯示相同內(nèi)容。原始 SQLsqlSELECT * FROM users WHERE id((($id))) LIMIT 0,1;字符型注入單引號(hào) 括號(hào)閉合需用)))閉合原理利用MySQL 的延時(shí)函數(shù)sleep(N)通過 “是否延時(shí)” 判斷 SQL 邏輯的布爾結(jié)果進(jìn)而逐字符猜解數(shù)據(jù)。核心技巧延時(shí)判斷結(jié)合if()函數(shù)語法if(條件, sleep(3), 1)作用若條件為真數(shù)據(jù)庫(kù)延時(shí) 3 秒執(zhí)行若為假立即執(zhí)行。示例猜數(shù)據(jù)庫(kù)名第 1 個(gè)字符plaintext?id1))) and if(ascii(substr(database(),1,1))115, sleep(3), 1)--若頁(yè)面加載時(shí)間超過 3 秒說明條件為真數(shù)據(jù)庫(kù)名第 1 個(gè)字符是s若立即加載說明條件為假需調(diào)整字符的 ASCII 碼值。第八關(guān)第 8 關(guān)布爾盲注單引號(hào)閉合無任何回顯增強(qiáng)版核心特征頁(yè)面僅返回兩種狀態(tài)You are in...........條件為真、無該提示 / 空白頁(yè)面條件為假無錯(cuò)誤回顯、無數(shù)據(jù)回顯。與第 6 關(guān)核心邏輯一致僅閉合方式不同屬于純布爾盲注場(chǎng)景。原始 SQLsqlSELECT * FROM users WHERE id$id LIMIT 0,1;字符型注入單引號(hào)閉合無報(bào)錯(cuò)輸出是第 6 關(guān)的單引號(hào)版本原理與第 6 關(guān)布爾盲注核心原理完全一致利用SQL邏輯判斷的布爾結(jié)果通過substr()截取字符、ascii()轉(zhuǎn)換 ASCII 碼逐字符猜解數(shù)據(jù)。核心差異第 6 關(guān)是雙引號(hào)閉合第 8 關(guān)是單引號(hào)閉合注入語句前綴需對(duì)應(yīng)調(diào)整。?id1 and ascii(substr(database(),1,1))115--第九關(guān)第十關(guān)第十一關(guān)注入點(diǎn)從URL 的 GET 參數(shù)轉(zhuǎn)移到頁(yè)面的 POST 表單參數(shù)用戶名uname、密碼passwd。頁(yè)面有登錄成功 / 失敗提示Your Login name or Password is wrong支持報(bào)錯(cuò)注入或布爾盲注。原始 SQLsqlSELECT * FROM users WHERE username$uname AND password$passwd LIMIT 0,1;字符型注入單引號(hào)閉合POST 參數(shù)傳遞無數(shù)據(jù)回顯但有登錄狀態(tài)反饋原理POST 注入與 GET 注入的核心區(qū)別GET 注入?yún)?shù)通過 URL 傳遞可直接在地址欄構(gòu)造語句。POST 注入?yún)?shù)通過 HTTP 請(qǐng)求體傳遞需借助工具如 Burp Suite或?yàn)g覽器開發(fā)者工具構(gòu)造表單數(shù)據(jù)。注入核心邏輯與 GET 型字符注入一致先閉合單引號(hào)再構(gòu)造注入語句最后用注釋符注釋多余內(nèi)容。示例用報(bào)錯(cuò)注入查數(shù)據(jù)庫(kù)名在uname字段輸入plaintextadmin and extractvalue(1,concat(0x7e,database(),0x7e))--密碼字段可任意輸入如123提交后頁(yè)面會(huì)返回報(bào)錯(cuò)信息包含當(dāng)前數(shù)據(jù)庫(kù)名。核心邏輯注入原理與 GET 型注入一致僅參數(shù)傳遞方式不同需掌握 POST 表單數(shù)據(jù)的構(gòu)造方法。第十二關(guān)注入點(diǎn)為 POST 表單參數(shù)uname、passwd與第 11 關(guān)場(chǎng)景一致。閉合方式為雙引號(hào) 括號(hào)id($id)是閉合類型的進(jìn)階場(chǎng)景。原始 SQLsqlSELECT * FROM users WHERE username($uname) AND password($passwd) LIMIT 0,1;字符型注入雙引號(hào) 括號(hào)閉合POST 參數(shù)傳遞原理閉合核心技巧需要先閉合雙引號(hào)再閉合括號(hào)才能讓后續(xù)注入語句生效。閉合格式閉合雙引號(hào))閉合括號(hào)即admin)。示例用報(bào)錯(cuò)注入查數(shù)據(jù)庫(kù)名在uname字段輸入plaintextadmin) and extractvalue(1,concat(0x7e,database(),0x7e))--提交后頁(yè)面返回報(bào)錯(cuò)信息提取其中的數(shù)據(jù)庫(kù)名即可。第十三關(guān)核心特征原始 SQLsqlSELECT * FROM users WHERE username($uname) AND password($passwd) LIMIT 0,1;字符型注入單引號(hào) 括號(hào)閉合POST 參數(shù)傳遞無登錄狀態(tài)反饋僅支持報(bào)錯(cuò)注入原理注入點(diǎn)為 POST 表單參數(shù)閉合方式為單引號(hào) 括號(hào)。頁(yè)面無登錄成功反饋僅在 SQL 語法錯(cuò)誤時(shí)返回報(bào)錯(cuò)信息無其他狀態(tài)差異屬于POST 型報(bào)錯(cuò)盲注。閉合核心技巧先閉合單引號(hào)再閉合括號(hào)即admin)。注入核心邏輯由于無登錄狀態(tài)反饋無法使用布爾盲注只能依賴報(bào)錯(cuò)注入獲取數(shù)據(jù)。plaintextadmin) and extractvalue(1,concat(0x7e,database(),0x7e))--提交后頁(yè)面會(huì)拋出 XPATH 語法錯(cuò)誤包含當(dāng)前數(shù)據(jù)庫(kù)名實(shí)現(xiàn)無狀態(tài)反饋下的數(shù)據(jù)獲取。核心邏輯復(fù)合閉合方式 POST 注入 報(bào)錯(cuò)盲注的結(jié)合強(qiáng)化 “根據(jù)頁(yè)面反饋選擇注入方式” 的能力。第十四關(guān)注入點(diǎn)為 POST 表單參數(shù)閉合方式為純雙引號(hào)與第 6 關(guān)、第 10 關(guān)的雙引號(hào)閉合一致。頁(yè)面有登錄成功 / 失敗提示支持報(bào)錯(cuò)注入或布爾盲注是 POST 型雙引號(hào)注入的基礎(chǔ)場(chǎng)景。原始 SQLsqlSELECT * FROM users WHERE username$uname AND password$passwd LIMIT 0,1;字符型注入雙引號(hào)閉合POST 參數(shù)傳遞有登錄狀態(tài)反饋原理閉合核心技巧直接用雙引號(hào)閉合原始字符串即admin。示例用報(bào)錯(cuò)注入查數(shù)據(jù)庫(kù)名在uname字段輸入plaintextadmin and extractvalue(1,concat(0x7e,database(),0x7e))--密碼字段任意輸入提交后頁(yè)面返回報(bào)錯(cuò)信息提取數(shù)據(jù)庫(kù)名即可。核心邏輯POST 注入的基礎(chǔ)雙引號(hào)版本與 GET 型雙引號(hào)注入原理一致進(jìn)一步鞏固 POST 表單的注入技巧。第十五關(guān)第十七·關(guān)·原理場(chǎng)景差異UPDATE 注入與 SELECT 注入的核心區(qū)別SELECT 注入目的是 “查詢數(shù)據(jù)”語句構(gòu)造圍繞SELECT/UNION SELECT/ 報(bào)錯(cuò)函數(shù)。UPDATE 注入目的是 “通過報(bào)錯(cuò)獲取數(shù)據(jù)”無需更新真實(shí)密碼語句構(gòu)造圍繞 “破壞 UPDATE 語法嵌入報(bào)錯(cuò)函數(shù)”利用 UPDATE 執(zhí)行時(shí)的語法錯(cuò)誤返回查詢結(jié)果。核心前提用戶名需存在如admin、dumb否則 UPDATE 語句不會(huì)執(zhí)行注入無效。核心技巧閉合方式單引號(hào)閉合密碼字段的原始字符串嵌入報(bào)錯(cuò)函數(shù)最后用--注釋多余內(nèi)容。報(bào)錯(cuò)函數(shù)依舊使用extractvalue()/updatexml()與第 5 關(guān)報(bào)錯(cuò)注入原理一致。示例猜數(shù)據(jù)庫(kù)名用戶名填dumb存在的賬號(hào)新密碼字段輸入plaintext123 and extractvalue(1,concat(0x7e,database(),0x7e))--拼接后的 UPDATE 語句sqlUPDATE users SET password123 and extractvalue(1,concat(0x7e,database(),0x7e))-- WHERE usernamedumb;判斷邏輯執(zhí)行 UPDATE 語句時(shí)報(bào)錯(cuò)函數(shù)觸發(fā) XPATH 語法錯(cuò)誤頁(yè)面返回錯(cuò)誤信息其中包含當(dāng)前數(shù)據(jù)庫(kù)名security且不會(huì)真正修改dumb的密碼后續(xù)內(nèi)容被注釋。核心邏輯基于 UPDATE 語句的報(bào)錯(cuò)注入核心是 “利用存在的用戶名觸發(fā) UPDATE 執(zhí)行通過報(bào)錯(cuò)函數(shù)間接獲取數(shù)據(jù)不破壞目標(biāo)賬號(hào)的原始數(shù)據(jù)”是業(yè)務(wù)場(chǎng)景中常見的注入類型。第十九關(guān)核心特征注入點(diǎn)是HTTP 請(qǐng)求頭的 Referer 字段請(qǐng)求來源頁(yè)面標(biāo)識(shí)與第 18 關(guān)場(chǎng)景高度相似。同樣需要登錄成功觸發(fā) INSERT 語句頁(yè)面回顯 Referer 信息并支持報(bào)錯(cuò)反饋。原始 SQL登錄日志記錄sqlINSERT INTO security.referers (referer, ip_address, username) VALUES ($referer, $ip, $uname);字符型注入單引號(hào)閉合$referer對(duì)應(yīng) Referer 頭原理場(chǎng)景前提同第 18 關(guān)需先登錄成功如dumb/dumb觸發(fā) INSERT 語句。注入邏輯與第 18 關(guān)完全一致僅注入點(diǎn)從 User-Agent 改為 Referer 頭。核心操作Burp 抓包抓取登錄成功的請(qǐng)求包找到Referer字段。修改 Referer 字段為注入語句plaintext and extractvalue(1,concat(0x7e,version(),0x7e))--發(fā)送請(qǐng)求后頁(yè)面返回報(bào)錯(cuò)信息包含 MySQL 版本號(hào)。核心邏輯與 User-Agent 頭注入原理一致進(jìn)一步強(qiáng)化 “HTTP 頭任意字段均可作為注入點(diǎn)” 的認(rèn)知關(guān)鍵是識(shí)別業(yè)務(wù)邏輯中被代入 SQL 的頭信息。第20關(guān)注入點(diǎn)是HTTP 請(qǐng)求的 Cookie 字段存儲(chǔ)登錄狀態(tài)的uname參數(shù)。登錄成功后頁(yè)面會(huì)回顯 Cookie 中的用戶名信息支持報(bào)錯(cuò) / 聯(lián)合查詢注入。原始 SQLCookie 驗(yàn)證sqlSELECT * FROM users WHERE username$uname LIMIT 0,1;字符型注入單引號(hào)閉合$uname對(duì)應(yīng) Cookie 中的uname參數(shù)原理場(chǎng)景前提登錄成功后瀏覽器會(huì)保存unamedumb的 Cookie頁(yè)面通過讀取該 Cookie 顯示用戶名。注入邏輯Cookie 中的uname參數(shù)被作為字符串代入 SELECT 語句通過單引號(hào)閉合后可構(gòu)造報(bào)錯(cuò) / 聯(lián)合查詢語句。核心操作Burp 抓包登錄成功后抓取頁(yè)面請(qǐng)求包找到Cookie: unamedumb字段。修改 Cookie 為注入語句以聯(lián)合查詢?yōu)槔齪laintextunamedumb union select 1,2,database()--發(fā)送請(qǐng)求后頁(yè)面回顯位會(huì)顯示當(dāng)前數(shù)據(jù)庫(kù)名security。核心邏輯注入點(diǎn)轉(zhuǎn)移到 Cookie 字段原理與 GET 參數(shù)注入一致關(guān)鍵是 “識(shí)別 Cookie 參數(shù)的 SQL 代入邏輯通過抓包修改 Cookie 值”。第二十一關(guān)核心特征注入點(diǎn)是 Cookie 的uname參數(shù)但Cookie 值被 Base64 編碼后傳輸。閉合方式為單引號(hào) 括號(hào)增加了解碼與閉合的雙重難度。原始 SQLsqlSELECT * FROM users WHERE username($uname) LIMIT 0,1;字符型注入單引號(hào) 括號(hào)閉合$uname是 Base64 解碼后的 Cookie 值原理編碼邏輯正常情況下Cookie 中的unamedumb會(huì)被編碼為unameZHVtYgdumb的 Base64 編碼后端接收后先解碼再代入 SQL。注入邏輯需先構(gòu)造閉合后的注入語句再對(duì)語句進(jìn)行 Base64 編碼才能被后端正確解碼并執(zhí)行。核心操作Burp 抓包構(gòu)造注入語句先閉合單引號(hào) 括號(hào)再寫聯(lián)合查詢plaintextdumb) union select 1,2,database()--對(duì)該語句進(jìn)行 Base64 編碼結(jié)果為ZHVtYicpIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKS0tKw。修改 Cookie 為unameZHVtYicpIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKS0tKw。發(fā)送請(qǐng)求后頁(yè)面回顯位顯示當(dāng)前數(shù)據(jù)庫(kù)名。核心邏輯Cookie 注入 Base64 編碼 復(fù)合閉合的結(jié)合核心是 “先構(gòu)造注入語句再編碼傳輸”需掌握常見編碼的處理方式。