SQL注入系列篇 | 報(bào)錯(cuò)注入
報(bào)錯(cuò)注入概念
在數(shù)據(jù)庫操作中,當(dāng)SQL語句結(jié)構(gòu)不正確時(shí),數(shù)據(jù)庫通常會(huì)返回錯(cuò)誤信息。攻擊者利用這一特性構(gòu)造特殊SQL語句,觸發(fā)數(shù)據(jù)庫報(bào)錯(cuò),從而從錯(cuò)誤信息中獲取所需信息。然而,確保SQL結(jié)構(gòu)的正確性是關(guān)鍵。例如,在MySQL中,語句`select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e));`因缺少右括號(hào)而引發(fā)結(jié)構(gòu)錯(cuò)誤,而非我們所期待的報(bào)錯(cuò)信息。
當(dāng)正確添加右括號(hào),如`select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e));`,數(shù)據(jù)庫能正確執(zhí)行查詢,若在執(zhí)行階段出現(xiàn)錯(cuò)誤,攻擊者可捕獲報(bào)錯(cuò)信息,從而獲取有價(jià)值的數(shù)據(jù)。
報(bào)錯(cuò)注入流程
以DVWA靶機(jī)為例演示報(bào)錯(cuò)注入過程。已知在id參數(shù)點(diǎn)使用單引號(hào),后臺(tái)SQL含兩列值。通過構(gòu)造輸入`1’ and (extractvalue(1,concat(0x7e,(select user()),0x7e))) #`,數(shù)據(jù)庫返回錯(cuò)誤信息,揭示當(dāng)前用戶名。調(diào)整輸入為`1’ and (extractvalue(1,concat(0x7e,(select database()),0x7e))) #`,顯示當(dāng)前數(shù)據(jù)庫名。接著,輸入`1’ and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = database()),0x7e))) #`,披露所有表名。通過適當(dāng)修改SQL,可完全獲取數(shù)據(jù)表信息。
報(bào)錯(cuò)函數(shù)及原理剖析
本次演示利用extractvalue函數(shù)實(shí)現(xiàn)報(bào)錯(cuò)注入,其他如updatexml、exp、multipoint等函數(shù)也有類似效果。我們以`1’ and (extractvalue(1,concat(0x7e,(select database()),0x7e))) #`為例分析,后臺(tái)處理程序顯示,構(gòu)造的SQL為`extractvalue(xml_document,xpath_string)`。數(shù)據(jù)庫執(zhí)行此函數(shù)查詢XML文檔,需要輸入?yún)?shù),第一個(gè)為XML內(nèi)容或路徑,第二個(gè)為XPath。構(gòu)造輸入`extractvalue(1,concat(0x7e,(select database()),0x7e))`時(shí),數(shù)據(jù)庫檢查SQL結(jié)構(gòu)完整,檢測(cè)函數(shù)參數(shù)格式。解析第二個(gè)參數(shù)時(shí),`select database()`解析為 `'dvwa'`,通過`concat`連接為`~dvwa~`。數(shù)據(jù)庫檢測(cè)`~dvwa~`是否滿足XPath格式,因其不符合而引發(fā)報(bào)錯(cuò)。
后臺(tái)SQL及拼接后的原型
報(bào)錯(cuò)注入通過構(gòu)造特殊SQL引發(fā)數(shù)據(jù)庫報(bào)錯(cuò),從錯(cuò)誤信息中獲取敏感數(shù)據(jù)。若服務(wù)器未妥善處理這類錯(cuò)誤,攻擊者能通過頁面錯(cuò)誤回顯獲取信息。注意確保SQL結(jié)構(gòu)正確,以及理解報(bào)錯(cuò)注入的原理與流程,是有效防御的關(guān)鍵。
熊殷13098377064: 我把做好的留言本上傳到服務(wù)器上怎么提示“處理URL地址出錯(cuò)”我在?
廣宗縣分度: ______ 將你的服務(wù)器重新設(shè)置下...提示出錯(cuò)信息.. 如果你本地測(cè)試沒有問題的話.我估計(jì)是服務(wù)器上的寫權(quán)限沒有開放 你試試看 .祝你好運(yùn)了..
熊殷13098377064: dede 5.7 又被sql注入,怎么解 -
廣宗縣分度: ______ 過濾一些常見的數(shù)據(jù)庫操作關(guān)鍵字,select ,insert,update,delete,and,*等或通過系統(tǒng)函數(shù)addslashes對(duì)內(nèi)容進(jìn)行過濾php配置文件中register_globals=off;設(shè)置為關(guān)閉狀態(tài).(作用將注冊(cè)全局變...
熊殷13098377064: 要阻止SQL注入攻擊,需要那樣方法?
廣宗縣分度: ______ SQL注入攻擊的總體思路: 發(fā)現(xiàn)SQL注入位置; 判斷服務(wù)器類型和后臺(tái)數(shù)據(jù)庫類型; 確定可執(zhí)行情況 對(duì)于有些攻擊者而言,一般會(huì)采取sql注入法.下面我也談一下自己關(guān)于sql注入法的感悟. 注入法: 從理論上說,認(rèn)證網(wǎng)頁中會(huì)有型如: ...
熊殷13098377064: sqlmap怎么注入sql server -
廣宗縣分度: ______ 當(dāng)給sqlmap這么一個(gè)url的時(shí)候,它會(huì):1、判斷可注入的參數(shù)2、判斷可以用那種SQL注入技術(shù)來注入3、識(shí)別出哪種數(shù)據(jù)庫4、根據(jù)用戶選擇,讀取哪些數(shù)據(jù) sqlmap支持五種不同的注入模式:1、基于布爾的盲注,即可以根據(jù)返回頁面判斷條件...
熊殷13098377064: Java中如何解決sql 注入漏洞
廣宗縣分度: ______ 使用prepareStatement,在用戶名那里填?,用set方法往里賦值
熊殷13098377064: 什么是SQL注入?
廣宗縣分度: ______ SQL注入的一般步驟首先,判斷環(huán)境,尋找注入點(diǎn),判斷數(shù)據(jù)庫類型其次,根據(jù)注入?yún)?shù)類型,在腦海中重構(gòu)SQL語句的原貌,按參數(shù)類型主要分為下面三種:(A) ID=49 這類注入的參數(shù)是數(shù)字型,SQL語句原貌大致如下:Select * from 表名 ...
熊殷13098377064: 介紹一下SQL注入
廣宗縣分度: ______ 一、SQL注入簡(jiǎn)介: 1、由于程序在執(zhí)行SQL數(shù)據(jù)庫操作之前,沒有對(duì)用戶的輸入進(jìn)行驗(yàn)證,導(dǎo)致非法用戶捏造的SQL語句也被數(shù)據(jù)庫引擎當(dāng)做正常SQL語句被執(zhí)行的現(xiàn)象; 2、非法用戶捏造的SQL語句可以獲得用戶名密碼、修改用戶名密碼、...
熊殷13098377064: sql 注入問題 如下:
廣宗縣分度: ______ string sql = "exec('select count(0) from admin where IsLocked='+@IsLocked)";+@IsLocked可能就成字符處理了
熊殷13098377064: SQL注入求指點(diǎn)
廣宗縣分度: ______ 當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動(dòng)態(tài)sql語句以訪問數(shù)據(jù)庫時(shí),會(huì)發(fā)生sql注入攻擊.如果代碼使用存儲(chǔ)過程,而這些存儲(chǔ)過程作為包含未篩選的用戶輸入的字符串來傳遞,也會(huì)發(fā)生sql注入. SQL注入大致方法: 1、猜表名And (Select count(*) ...
熊殷13098377064: 什么是sql注入,如何避免sql注入 -
廣宗縣分度: ______ 所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令.在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過程的輸入?yún)?shù),這類表...
在數(shù)據(jù)庫操作中,當(dāng)SQL語句結(jié)構(gòu)不正確時(shí),數(shù)據(jù)庫通常會(huì)返回錯(cuò)誤信息。攻擊者利用這一特性構(gòu)造特殊SQL語句,觸發(fā)數(shù)據(jù)庫報(bào)錯(cuò),從而從錯(cuò)誤信息中獲取所需信息。然而,確保SQL結(jié)構(gòu)的正確性是關(guān)鍵。例如,在MySQL中,語句`select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e));`因缺少右括號(hào)而引發(fā)結(jié)構(gòu)錯(cuò)誤,而非我們所期待的報(bào)錯(cuò)信息。
當(dāng)正確添加右括號(hào),如`select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e));`,數(shù)據(jù)庫能正確執(zhí)行查詢,若在執(zhí)行階段出現(xiàn)錯(cuò)誤,攻擊者可捕獲報(bào)錯(cuò)信息,從而獲取有價(jià)值的數(shù)據(jù)。
報(bào)錯(cuò)注入流程
以DVWA靶機(jī)為例演示報(bào)錯(cuò)注入過程。已知在id參數(shù)點(diǎn)使用單引號(hào),后臺(tái)SQL含兩列值。通過構(gòu)造輸入`1’ and (extractvalue(1,concat(0x7e,(select user()),0x7e))) #`,數(shù)據(jù)庫返回錯(cuò)誤信息,揭示當(dāng)前用戶名。調(diào)整輸入為`1’ and (extractvalue(1,concat(0x7e,(select database()),0x7e))) #`,顯示當(dāng)前數(shù)據(jù)庫名。接著,輸入`1’ and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = database()),0x7e))) #`,披露所有表名。通過適當(dāng)修改SQL,可完全獲取數(shù)據(jù)表信息。
報(bào)錯(cuò)函數(shù)及原理剖析
本次演示利用extractvalue函數(shù)實(shí)現(xiàn)報(bào)錯(cuò)注入,其他如updatexml、exp、multipoint等函數(shù)也有類似效果。我們以`1’ and (extractvalue(1,concat(0x7e,(select database()),0x7e))) #`為例分析,后臺(tái)處理程序顯示,構(gòu)造的SQL為`extractvalue(xml_document,xpath_string)`。數(shù)據(jù)庫執(zhí)行此函數(shù)查詢XML文檔,需要輸入?yún)?shù),第一個(gè)為XML內(nèi)容或路徑,第二個(gè)為XPath。構(gòu)造輸入`extractvalue(1,concat(0x7e,(select database()),0x7e))`時(shí),數(shù)據(jù)庫檢查SQL結(jié)構(gòu)完整,檢測(cè)函數(shù)參數(shù)格式。解析第二個(gè)參數(shù)時(shí),`select database()`解析為 `'dvwa'`,通過`concat`連接為`~dvwa~`。數(shù)據(jù)庫檢測(cè)`~dvwa~`是否滿足XPath格式,因其不符合而引發(fā)報(bào)錯(cuò)。
后臺(tái)SQL及拼接后的原型
報(bào)錯(cuò)注入通過構(gòu)造特殊SQL引發(fā)數(shù)據(jù)庫報(bào)錯(cuò),從錯(cuò)誤信息中獲取敏感數(shù)據(jù)。若服務(wù)器未妥善處理這類錯(cuò)誤,攻擊者能通過頁面錯(cuò)誤回顯獲取信息。注意確保SQL結(jié)構(gòu)正確,以及理解報(bào)錯(cuò)注入的原理與流程,是有效防御的關(guān)鍵。
相關(guān)評(píng)說:
廣宗縣分度: ______ 將你的服務(wù)器重新設(shè)置下...提示出錯(cuò)信息.. 如果你本地測(cè)試沒有問題的話.我估計(jì)是服務(wù)器上的寫權(quán)限沒有開放 你試試看 .祝你好運(yùn)了..
廣宗縣分度: ______ 過濾一些常見的數(shù)據(jù)庫操作關(guān)鍵字,select ,insert,update,delete,and,*等或通過系統(tǒng)函數(shù)addslashes對(duì)內(nèi)容進(jìn)行過濾php配置文件中register_globals=off;設(shè)置為關(guān)閉狀態(tài).(作用將注冊(cè)全局變...
廣宗縣分度: ______ SQL注入攻擊的總體思路: 發(fā)現(xiàn)SQL注入位置; 判斷服務(wù)器類型和后臺(tái)數(shù)據(jù)庫類型; 確定可執(zhí)行情況 對(duì)于有些攻擊者而言,一般會(huì)采取sql注入法.下面我也談一下自己關(guān)于sql注入法的感悟. 注入法: 從理論上說,認(rèn)證網(wǎng)頁中會(huì)有型如: ...
廣宗縣分度: ______ 當(dāng)給sqlmap這么一個(gè)url的時(shí)候,它會(huì):1、判斷可注入的參數(shù)2、判斷可以用那種SQL注入技術(shù)來注入3、識(shí)別出哪種數(shù)據(jù)庫4、根據(jù)用戶選擇,讀取哪些數(shù)據(jù) sqlmap支持五種不同的注入模式:1、基于布爾的盲注,即可以根據(jù)返回頁面判斷條件...
廣宗縣分度: ______ 使用prepareStatement,在用戶名那里填?,用set方法往里賦值
廣宗縣分度: ______ SQL注入的一般步驟首先,判斷環(huán)境,尋找注入點(diǎn),判斷數(shù)據(jù)庫類型其次,根據(jù)注入?yún)?shù)類型,在腦海中重構(gòu)SQL語句的原貌,按參數(shù)類型主要分為下面三種:(A) ID=49 這類注入的參數(shù)是數(shù)字型,SQL語句原貌大致如下:Select * from 表名 ...
廣宗縣分度: ______ 一、SQL注入簡(jiǎn)介: 1、由于程序在執(zhí)行SQL數(shù)據(jù)庫操作之前,沒有對(duì)用戶的輸入進(jìn)行驗(yàn)證,導(dǎo)致非法用戶捏造的SQL語句也被數(shù)據(jù)庫引擎當(dāng)做正常SQL語句被執(zhí)行的現(xiàn)象; 2、非法用戶捏造的SQL語句可以獲得用戶名密碼、修改用戶名密碼、...
廣宗縣分度: ______ string sql = "exec('select count(0) from admin where IsLocked='+@IsLocked)";+@IsLocked可能就成字符處理了
廣宗縣分度: ______ 當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動(dòng)態(tài)sql語句以訪問數(shù)據(jù)庫時(shí),會(huì)發(fā)生sql注入攻擊.如果代碼使用存儲(chǔ)過程,而這些存儲(chǔ)過程作為包含未篩選的用戶輸入的字符串來傳遞,也會(huì)發(fā)生sql注入. SQL注入大致方法: 1、猜表名And (Select count(*) ...
廣宗縣分度: ______ 所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令.在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過程的輸入?yún)?shù),這類表...