日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

记录mysql中的隐患特性

發(fā)布時(shí)間:2024/1/23 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录mysql中的隐患特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、背景

? ? ? ?參考鏈接:?http://http://www.360doc.com/content/16/1204/19/27425026_611850045.shtml

? ? ? ?1.1 MYSQL在遇到/*! SQL語句*/這種格式的時(shí)候,里面的SQL語句會(huì)當(dāng)正常的語句一樣被解析。

? ? ? ? 如圖:

? ? ? ??

? ? ? ? 以上我們可以看到 where id =1;的部分被mysql解析了。

? ? ? ? 1.2 如果在!之后是一串?dāng)?shù)字(這串?dāng)?shù)字就是mysql數(shù)據(jù)庫的版本號(hào)),如果當(dāng)前數(shù)據(jù)庫的版本號(hào)大于等于該數(shù)字,SQL語句則執(zhí)行,否則就不執(zhí)行(鏈接中的說法),如圖:

? ? ? ??

? ? ? ? 如上圖所示,在mysql新版本中將這條約束歸到了開始的規(guī)則里面了,因?yàn)樵诟牧?后面的版本號(hào)之后,sql語句照樣執(zhí)行

二、示例

? ? ? ? 參考鏈接:http://http://www.freebuf.com/articles/web/22041.html

? ? ? ? 2.1 回到我們的注入點(diǎn)上來看看,我們使用mysql注釋+CRLF來進(jìn)行payload的構(gòu)造(注意URL編碼):

? ? ? ??http://www.modsecurity.org/testphp.vulnweb.com/artists.php?artist=0+div+1+union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A1%2C2%2Ccurrent_user

? ? ? ? 對(duì)其URL轉(zhuǎn)義如下(注意轉(zhuǎn)行符的解析):

0 div 1 union#foo*/*bar select#foo 1,2,current_user? ? ? ? ?這句sql語句到了Mysql的解析引擎后會(huì)再次被解析為:

? ? ? ? ?0 div 1 union select 1,2,current_user

? ? ? ? ?可以看到,注釋符之間進(jìn)行了就近原則的交錯(cuò)組合,Mysql的Sql Parser則選擇進(jìn)行了忽略。

? ? ? ? 我們知道,ModSecurity使用正則表達(dá)式來對(duì)Input Sql進(jìn)行匹配檢測(cè),對(duì)Select、Union在敏感位置的出現(xiàn)都進(jìn)行了攔截,但是ModSecurity有一個(gè)特點(diǎn)(或者叫做優(yōu)點(diǎn)),它會(huì)對(duì)輸入進(jìn)行"規(guī)范化",規(guī)范化的本意本來是防御"基于編碼格式、解析順序"的繞過的。

? ? ? ? ?2.2 注入Payload

? ? ? ? ?

? ? ? ? ? 繞過分析:

? ? ? ? ? ? ? ? ?這里采用了"碎片注入法(分段SQL注入)",或者是我們常說的"Split And Balance原則"。例如:??

對(duì)于最簡單的情況,可以使用字符串連接技術(shù)將較小的部分構(gòu)造成一個(gè)字符串。不同的數(shù)據(jù)庫使用不同的語法來構(gòu)造字符串 oracle: 'selec'||'t' sqlserver: 'selec'+''; mysql: 'selec'+'t' (這就是所謂的split and balance思想) 還要注意的是,加號(hào)和空格要先進(jìn)行URL編碼后在發(fā)送) ?這種技術(shù)的好處是可以將原本完整的Payload分成幾段,利用ModSecurity對(duì)SQL語義的理解不全來進(jìn)行規(guī)則繞過。常常用于進(jìn)行"二值邏輯"的盲注推理。

? ? ? ? ? ? ? ? ?回到我們的注入點(diǎn)上來看:

? ? ? ? ? ? ? ? ?對(duì)于Mod來說,我們的攻擊Payload為:

hUserId=2276&FromDate=a1%27+or&ToDate=%3C%3Eamount+and%27&sendbutton1=Get+Statement 而對(duì)于Mysql的解析引擎來說,它會(huì)自動(dòng)去除、轉(zhuǎn)換這些鏈接控制符,從而變成:

hUserId=22768&FromDate=a1%27+or&ToData=<>amount and%27&sendbutton1=GetStatement 2.3 注入PayLoad:

? ? ? ? ? ? ??

? ? ? ? ? ? ? ?這里使用了HPP(HTTP Parameter Pollution)注入技術(shù),關(guān)于HPP,有很多資料:

http://www.80sec.com/%E6%B5%85%E8%B0%88%E7%BB%95%E8%BF%87waf%E7%9A%84%E6%95%B0%E7%A7%8D%E6%96%B9%E6%B3%95.html

http://www.freebuf.com/articles/web/5908.html

http://hi.baidu.com/aullik5/item/860da508a90709843c42e2ca

http://hi.baidu.com/4b5f5f4b/item/abc28dda72c100f154347f36

https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf

? ? ? ? ? ? 回到我們的注入PayLoad上來,我們注意到after這個(gè)字段出現(xiàn)了3次,其中后2次的出現(xiàn)其實(shí)是產(chǎn)生了逗號(hào)的作用,以此來繞過。

? ? ? ? ?2.4 注入Payload:

? ? ? ? ? ? ?

? ? ? ? ? ? ? 思路分析:

? ? ? ? ? ? ? 這里采用了"半開注釋符(Unterminated Comments)"+"Mysql注釋符代碼執(zhí)行(MySQL Comment Extensions for conditional code execution)"技術(shù)來進(jìn)行繞過。半開注釋符是利用Mod的replaceComments來進(jìn)行敏感關(guān)鍵字的繞過。而"Mysql注釋符代碼執(zhí)行"則是Mysql的一個(gè)運(yùn)行機(jī)制。

? ? ? ? ? ? ? Mysql的Parser引擎會(huì)自動(dòng)解析這種格式中的sql代碼,同時(shí)其他的數(shù)據(jù)庫(例如MSSQL、ORACLE會(huì)自動(dòng)忽略這些注釋),也就是說,這是Mysql特有的特性。

? ? ? ? ? ? ? 防御方法:采用使用多行匹配(MultiMatch Action)+規(guī)范化方法(ReplaceComments)

? ? ? ? ? 2.5 注入Payload:

? ? ? ? ? ? ? ?

? 注入分析:這里采用了COOKIE注入

? ? ? ? ? ? ? ? 防御方法:

? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? 關(guān)于這個(gè)COOKIE注入,我想眼神幾點(diǎn)想法:

? ? ? ? ? ? ? ? ? 在注入點(diǎn)的選擇中,HTTP中的任何字段、任何位置都"有可能"產(chǎn)生SQL注入,這里只能說有可能,因?yàn)槭欠衲芊癞a(chǎn)生注入,和具體的應(yīng)用系統(tǒng)的環(huán)境有關(guān),即應(yīng)用系統(tǒng)會(huì)使用哪些字段帶入數(shù)據(jù)進(jìn)行執(zhí)行.

? ? ? ? ? ? 2.6 注入Payload:

http://www.modsecurity.org/testphp.vulnweb.com/artists.php?artist=%40%40new%20union%23sqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapswlmapsqlmap%0Aselect%201,2,database%23sqlmap%0A%28%29 ?payload分析:

? ? ? ? ? ? ? ? ? ? ? ?這里采用了"Mysql注釋(MySQL Comment)"+"換行繞過(New Line trick)"的組合方法來進(jìn)行Mod的繞過(本質(zhì)上是對(duì)Mod所使用的正則表達(dá)式的繞過)

? ? ? ? ? ? ? ? ? ? ? ?在Mod看來,我們的PayLoad如下:

? ? ? ? ? ? ? ? ? ? ? ?

http://www.modsecurity.org/testphp.vulnweb.com/artists.php?artist=@@new union#sqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmapsqlmap select 1,2,database#sqlmap () 然而,當(dāng)這段SQL代碼進(jìn)入Mysql的解析引擎的時(shí)候,Mysql看到的是這樣的形式:

artist=@@new union select 1,2,database() 防御方法:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SQL是一種極其靈活的命令式語言,各個(gè)元素之間的組合可以有很多種,采用正則REGEX的方法來進(jìn)行匹配常常無法做到精確指導(dǎo),為了解決這個(gè)問題,我們有兩種思路:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a) 采用高階的SQL解析方法,例如AST:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??http://www.cnblogs.com/LittleHann/p/3495602.html

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b) 改進(jìn)正則,采用敏感關(guān)鍵字匹配的方法

SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* \ "([\~\!\@\#\$\%\^\&\*\(\)\-\+\=\{\}\[\]\|\:\;\"\'\`\‘\’\<\>].*){4,}" \ "phase:2,t:none,t:urlDecodeUni,block,id:'981173',rev:'2.2.1',msg:'Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded',capture,logdata:'%{tx.1}',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:tx.sql_injection_score=+1,setvar:'tx.msg=%{rule.msg}',setvar:tx.%{rule.id}-WEB_ATTACK/RESTRICTED_SQLI_CHARS-%{matched_var_name}=%{tx.0}" ? 2.7 注入Payload:

? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? HTML URL編碼鏈接:http://http://www.w3school.com.cn/tags/html_ref_urlencode.html

? ? ? ? ? ? ? ? ? Payloag分析:

? ? ? ? ? ? ? ? ? 這里采用了"Mysql錯(cuò)誤回顯"+"Tab鍵分隔繞過"的組合方法來進(jìn)行Mod的繞過,這里的關(guān)鍵點(diǎn)是沒有使用傳統(tǒng)的空格來進(jìn)行"Split And Balance"。

? ? ? ? ? ? ? ? ? 如果一定要采用黑名單,則必須進(jìn)行嚴(yán)格的代碼審計(jì)和測(cè)試,保證黑名單的完整性

例如,在Mysql中允許的分隔符為: 09 0A 0B 0C 0D A0 ? 防御方法:

? ? ? ? ? ? ? ? ? ? ? ? ?采用完整的"準(zhǔn)空格分隔符"黑名單CRS

SecRule REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* \ "(?i:(?:,.*[)\da-f(\"|'|`|′|’|‘)](\"|'|`|′|’|‘)(?:(\"|'|`|′|’|‘).*(\"|'|`|′|’|‘)|\Z|[^(\"|'|`|′|’|‘)]+))|(?:\Wselect.+\W*from)|((?:select|create|rename|truncate|load|alter|delete|update|insert|desc)\s*\(\s*space\s*\())" \ "phase:2,capture,multiMatch,t:none,t:urlDecodeUni,t:replaceComments,block,msg:'Detects MySQL comment-/space-obfuscated injections and backtick termination',id:'981257',tag:'WEB_ATTACK/SQLI',tag:'WEB_ATTACK/ID',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.id}-%{rule.msg}',setvar:tx.anomaly_score=+5,setvar:'tx.%{tx.msg}-WEB_ATTACK/SQLI-%{matched_var_name}=%{tx.0}',setvar:'tx.%{tx.msg}-WEB_ATTACK/ID-%{matched_var_name}=%{tx.0}'三、總結(jié)

? ? ? Blakclist filtering is not enough? -- 不要依賴黑名單機(jī)制

? ? ? 應(yīng)該使用多種方法進(jìn)行縱深防御? ??

? ? ? 對(duì)輸入驗(yàn)證采用安全模型,包括規(guī)范化、數(shù)據(jù)類型、數(shù)據(jù)格式、數(shù)據(jù)長度

? ? ? WAF作為一個(gè)防御手段,從某種程序上來說只是增加了攻擊者的攻擊成本,并不能從根本上解決注入的發(fā)生,要解決注入漏洞的產(chǎn)生,保護(hù)敏感數(shù)據(jù),必須多管齊下,從應(yīng)用系統(tǒng)、waf、數(shù)據(jù)庫防火墻的角度去思考。

四、附錄

? ? ? ? ?4.1 information-schema和mysql數(shù)據(jù)庫結(jié)構(gòu)

? ? ? ? ? ? ? ?

總結(jié)

以上是生活随笔為你收集整理的记录mysql中的隐患特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。