mysql漏洞怎么注入 sql注入漏洞是什么意思啊

部分sql注入總結(jié)

本人ctf選手一名,在最近做練習(xí)時(shí)遇到了一些sql注入的題目,但是sql注入一直是我的弱項(xiàng)之一,所以寫一篇總結(jié)記錄一下最近學(xué)到的一些sql注入漏洞的利用。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供鳳泉網(wǎng)站建設(shè)、鳳泉做網(wǎng)站、鳳泉網(wǎng)站設(shè)計(jì)、鳳泉網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、鳳泉企業(yè)網(wǎng)站模板建站服務(wù),十載鳳泉做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

在可以聯(lián)合查詢的題目中,一般會(huì)將數(shù)據(jù)庫查詢的數(shù)據(jù)回顯到首頁面中,這是聯(lián)合注入的前提。

適用于有回顯同時(shí)數(shù)據(jù)庫軟件版本是5.0以上的MYSQL數(shù)據(jù)庫,因?yàn)镸YSQL會(huì)有一個(gè)系統(tǒng)數(shù)據(jù)庫information_schema, information_schema 用于存儲(chǔ)數(shù)據(jù)庫元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù)),例如數(shù)據(jù)庫名、表名、列的數(shù)據(jù)類型、訪問權(quán)限等

聯(lián)合注入的過程:

判斷注入點(diǎn)可以用and 1=1/and 1=2用于判斷注入點(diǎn)

當(dāng)注入類型為數(shù)字型時(shí)返回頁面會(huì)不同,但都能正常執(zhí)行。

sql注入通常為數(shù)字型注入和字符型注入:

1、數(shù)字型注入

數(shù)字型語句:

在這種情況下直接使用and 1=1/and 1=2是都可以正常執(zhí)行的但是返回的界面是不一樣的

2、字符型注入

字符型語句:

字符型語句輸入我們的輸入會(huì)被一對(duì)單引號(hào)或這雙引號(hào)閉合起來。

所以如果我們同樣輸入and 1=1/and 1=2會(huì)發(fā)現(xiàn)回顯畫面是并無不同的。

在我們傳入and 1=1/and 1=2時(shí)語句變?yōu)?/p>

傳入的東西變成了字符串并不會(huì)被當(dāng)做命令。

所以字符型的測(cè)試方法最簡(jiǎn)單的就是加上單引號(hào) ' ,出現(xiàn)報(bào)錯(cuò)。

加上注釋符--后正?;仫@界面。

這里還有的點(diǎn)就是sql語句的閉合也是有時(shí)候不同的,下面是一些常見的

這一步可以用到order by函數(shù),order by 函數(shù)是對(duì)MySQL中查詢結(jié)果按照指定字段名進(jìn)行排序,除了指定字 段名還可以指定字段的欄位進(jìn)行排序,第一個(gè)查詢字段為1,第二個(gè)為2,依次類推,所以可以利用order by就可以判斷列數(shù)。

以字符型注入為例:

在列數(shù)存在時(shí)會(huì)正常回顯

但是列數(shù)不存在時(shí)就會(huì)報(bào)錯(cuò)

這步就說明了為什么是聯(lián)合注入了,用到了UNION,UNION的作用是將兩個(gè)select查詢結(jié)果合并

但是程序在展示數(shù)據(jù)的時(shí)候通常只會(huì)取結(jié)果集的第一行數(shù)據(jù),這就讓聯(lián)合注入有了利用的點(diǎn)。

當(dāng)我們查詢的第一行是不存在的時(shí)候就會(huì)回顯第二行給我們。

講查詢的數(shù)據(jù)置為-1,那第一行的數(shù)據(jù)為空,第二行自然就變?yōu)榱说谝恍?/p>

在這個(gè)基礎(chǔ)上進(jìn)行注入

可以發(fā)現(xiàn)2,3都為可以利用的顯示點(diǎn)。

和前面一樣利用union select,加上group_concat()一次性顯示。

現(xiàn)在非常多的Web程序沒有正常的錯(cuò)誤回顯,這樣就需要我們利用報(bào)錯(cuò)注入的方式來進(jìn)行SQL注入了

報(bào)錯(cuò)注入的利用步驟和聯(lián)合注入一致,只是利用函數(shù)不同。

以u(píng)pdatexml為例。

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target: 需要操作的xml片段

xpath_expr: 需要更新的xml路徑(Xpath格式)

new_xml: 更新后的內(nèi)容

此函數(shù)用來更新選定XML片段的內(nèi)容,將XML標(biāo)記的給定片段的單個(gè)部分替換為 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替換的部分 與xpath_expr 用戶提供的XPath表達(dá)式匹配。

這個(gè)函數(shù)當(dāng)xpath路徑錯(cuò)誤時(shí)就會(huì)報(bào)錯(cuò),而且會(huì)將路徑內(nèi)容返回,這就能在報(bào)錯(cuò)內(nèi)容中看到我們想要的內(nèi)容。

而且以~開頭的內(nèi)容不是xml格式的語法,那就可以用concat函數(shù)拼接~使其報(bào)錯(cuò),當(dāng)然只要是不符合格式的都可以使其報(bào)錯(cuò)。

[極客大挑戰(zhàn) 2019]HardSQL

登錄界面嘗試注入,測(cè)試后發(fā)現(xiàn)是單引號(hào)字符型注入,且對(duì)union和空格進(jìn)行了過濾,不能用到聯(lián)合注入,但是有錯(cuò)誤信息回顯,說明可以使用報(bào)錯(cuò)注入。

利用updatexml函數(shù)的報(bào)錯(cuò)原理進(jìn)行注入在路徑處利用concat函數(shù)拼接~和我們的注入語句

發(fā)現(xiàn)xpath錯(cuò)誤并執(zhí)行sql語句將錯(cuò)誤返回。

在進(jìn)行爆表這一步發(fā)現(xiàn)了等號(hào)也被過濾,但是可以用到like代替等號(hào)。

爆字段

爆數(shù)據(jù)

這里就出現(xiàn)了問題flag是不完整的,因?yàn)閡pdatexml能查詢字符串的最大長(zhǎng)度為32,所以這里要用到left函數(shù)和right函數(shù)進(jìn)行讀取

報(bào)錯(cuò)注入有很多函數(shù)可以用不止updatexml一種,以下三種也是常用函數(shù):

堆疊注入就是多條語句一同執(zhí)行。

原理就是mysql_multi_query() 支持多條sql語句同時(shí)執(zhí)行,用;分隔,成堆的執(zhí)行sql語句。

比如

在權(quán)限足夠的情況下甚至可以對(duì)數(shù)據(jù)庫進(jìn)行增刪改查。但是堆疊注入的限制是很大的。但是與union聯(lián)合執(zhí)行不同的是它可以同時(shí)執(zhí)行無數(shù)條語句而且是任何sql語句。而union執(zhí)行的語句是有限的。

[強(qiáng)網(wǎng)杯 2019]隨便注

判斷完注入類型后嘗試聯(lián)合注入,發(fā)現(xiàn)select被過濾,且正則不區(qū)分大小寫過濾。

那么就用堆疊注入,使用show就可以不用select了。

接下去獲取表信息和字段信息

那一串?dāng)?shù)字十分可疑大概率flag就在里面,查看一下

這里的表名要加上反單引號(hào),是數(shù)據(jù)庫的引用符。

發(fā)現(xiàn)flag,但是沒辦法直接讀取。再讀取words,發(fā)現(xiàn)里面有個(gè)id字段,猜測(cè)數(shù)據(jù)庫語句為

結(jié)合1'or 1=1#可以讀取全部數(shù)據(jù)可以利用改名的方法把修改1919810931114514為words,flag修改為id,就可以把flag讀取了。

最終payload:

盲注需要掌握的幾個(gè)函數(shù)

在網(wǎng)頁屏蔽了錯(cuò)誤信息時(shí)就只能通過網(wǎng)頁返回True或者False判斷,本質(zhì)上是一種暴力破解,這就是布爾盲注的利用點(diǎn)。

首先,判斷注入點(diǎn)和注入類型是一樣的。

但是盲注沒有判斷列數(shù)這一步和判斷顯示位這兩步,這是和可回顯注入的不同。

判斷完注入類型后就要判斷數(shù)據(jù)庫的長(zhǎng)度,這里就用到了length函數(shù)。

以[WUSTCTF2020]顏值成績(jī)查詢?yōu)槔?/p>

輸入?yún)?shù)后,發(fā)現(xiàn)url處有個(gè)get傳入的stunum

然后用到length函數(shù)測(cè)試是否有注入點(diǎn)。

發(fā)現(xiàn)頁面有明顯變化

將傳入變?yōu)?/p>

頁面回顯此學(xué)生不存在

那么就可以得出數(shù)據(jù)庫名長(zhǎng)度為3

測(cè)試發(fā)現(xiàn)過濾了空格

然后就是要查數(shù)據(jù)庫名了,這里有兩種方法

一、只用substr函數(shù),直接對(duì)比

這種方法在寫腳本時(shí)可以用于直接遍歷。

二、加上ascii函數(shù)

這個(gè)payload在寫腳本時(shí)直接遍歷同樣可以,也可用于二分法查找,二分法速度更快。

接下來的步驟就和聯(lián)合注入一樣,只不過使用substr函數(shù)一個(gè)一個(gè)截取字符逐個(gè)判斷。但是這種盲注手工一個(gè)一個(gè)注十分麻煩所以要用到腳本。

直接遍歷腳本

二分法腳本

時(shí)間盲注用于代碼存在sql注入漏洞,然而頁面既不會(huì)回顯數(shù)據(jù),也不會(huì)回顯錯(cuò)誤信息

語句執(zhí)行后也不提示真假,我們不能通過頁面的內(nèi)容來判斷

所以有布爾盲注就必有時(shí)間盲注,但有時(shí)間盲注不一定有布爾盲注

時(shí)間盲注主要是利用sleep函數(shù)讓網(wǎng)頁的響應(yīng)時(shí)間不同從而實(shí)現(xiàn)注入。

sql-lab-less8:

無論輸入什么都只會(huì)回顯一個(gè)you are in...,這就是時(shí)間盲注的特點(diǎn)。

當(dāng)正常輸入?id=1時(shí)時(shí)間為11毫秒

判斷為單引號(hào)字符型注入后,插入sleep語句

明顯發(fā)現(xiàn)響應(yīng)時(shí)間為3053毫秒。

利用時(shí)間的不同就可以利用腳本跑出數(shù)據(jù)庫,后續(xù)步驟和布爾盲注一致。

爆庫

爆表

爆字段

腳本

在進(jìn)行SQL注入時(shí),發(fā)現(xiàn)union,and,or被完全過濾掉了,就可以考慮使用異或注入

什么是異或呢

異或是一種邏輯運(yùn)算,運(yùn)算法則簡(jiǎn)言之就是:兩個(gè)條件相同(同真或同假)即為假(0),兩個(gè)條件不同即為真(1),null與任何條件做異或運(yùn)算都為null,如果從數(shù)學(xué)的角度理解就是,空集與任何集合的交集都為空

即 1^1=0,0^0=0,1^0=1

利用這個(gè)原理可以在union,and,or都被過濾的情況下實(shí)現(xiàn)注入

[極客大挑戰(zhàn) 2019]FinalSQL

給了五個(gè)選項(xiàng)但是都沒什么用,在點(diǎn)擊后都會(huì)在url處出現(xiàn)?id。

而且union,and,or都被過濾

測(cè)試發(fā)現(xiàn)?id=1^1會(huì)報(bào)錯(cuò)

但是?id=1^0會(huì)返回?id=1的頁面,這就是前面說的原理,當(dāng)1^0時(shí)是等于1的所以返回?id=1的頁面。

根據(jù)原理寫出payload,進(jìn)而寫出腳本。

爆庫

爆表

爆字段

據(jù)此可以寫出基于異或的布爾盲注腳本

實(shí)驗(yàn)推薦:課程:SQL注入初級(jí)(合天網(wǎng)安實(shí)驗(yàn)室)

Mysql 注入之 limit 注入

參考鏈接:

一般實(shí)際過程中使用 limit 時(shí),大概有兩種情況,一種使用 order by ,一種就是不使用 order by 關(guān)鍵字

執(zhí)行語句

這種情況下的 limit 后面可以使用 union 進(jìn)行聯(lián)合查詢注入

執(zhí)行語句

執(zhí)行語句

此時(shí)后面再次使用 union 將會(huì)報(bào)錯(cuò)

除了 union 就沒有其他可以使用的了嗎,非也

此方法適用于 5.0.0 MySQL 5.6.6 版本,在limit語句后面的注入

MySQL 5中的SELECT語法:

limit 關(guān)鍵字后面還可跟 PROCEDURE 和 INTO 兩個(gè)關(guān)鍵字,但是 INTO 后面寫入文件需要知道絕對(duì)路徑以及寫入shell的權(quán)限,因此利用比較難,因此這里以 PROCEDURE 為例進(jìn)行注入

報(bào)錯(cuò),嘗試一下對(duì)其中一個(gè)參數(shù)進(jìn)行注入,這里首先嘗試報(bào)錯(cuò)注入

成功爆出 mysql 版本信息,證明如果存在報(bào)錯(cuò)回顯的話,可以使用報(bào)錯(cuò)注入在 limit 后面進(jìn)行注入

不存在回顯怎么辦,延遲注入呀

執(zhí)行命令

如果 select version(); 第一個(gè)為5,則多次執(zhí)行sha(1)達(dá)到延遲效果

這里使用 sleep 進(jìn)行嘗試,但均未成功,所以需要使用BENCHMARK進(jìn)行替代

如何對(duì)網(wǎng)站進(jìn)行SQL注入

首先你要了解什么是SQL注入漏洞,SQL注入漏洞就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如很多影視網(wǎng)站泄露VIP會(huì)員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。

簡(jiǎn)單來說,網(wǎng)站一般都是由web應(yīng)用程序,數(shù)據(jù)庫,服務(wù)器等組成的,網(wǎng)站的所有用戶數(shù)據(jù),密碼表單等等都是保存在數(shù)據(jù)庫當(dāng)中的,數(shù)據(jù)庫的內(nèi)容按到常理來說是只能在服務(wù)器內(nèi)部進(jìn)行查詢,當(dāng)然,但是,開發(fā)人員對(duì)客戶端用戶向客戶端提交的參數(shù)沒有進(jìn)行過濾,那么,黑客就可以從客戶端【瀏覽器,等等,詳細(xì)可以學(xué)習(xí)http協(xié)議】向服務(wù)器提交查詢數(shù)據(jù)庫的SQL語句,如果提交的語句成功的被服務(wù)器給接收到并且執(zhí)行么,那么黑客豈不是想怎么查詢數(shù)據(jù)庫里面的內(nèi)容就怎么查詢,不是么?那些管理賬號(hào)密碼,會(huì)員數(shù)據(jù)不是分分鐘就到手了?SQL注入漏洞危害是非常大的。

當(dāng)然,這種漏洞是根據(jù)提交參數(shù)沒過濾而產(chǎn)生的,那么除了瀏覽器的get提交參數(shù),http協(xié)議中還有,post提交,cookie提交,等等。注入漏洞不是網(wǎng)上那些所謂的黑闊,用什么啊D,明小子之類的亂檢測(cè)一氣而找出來的,如果樓主想研究這個(gè)漏洞的產(chǎn)生,原理,利用和防御,是需要進(jìn)行代碼審計(jì),SQL注入語句基礎(chǔ),等等。

現(xiàn)在一般常用的工具:SQLmap【這是一款神器,現(xiàn)在是公認(rèn)最強(qiáng)大的開源注入工具】

建議樓主去看幾本書:《SQL注入天書》《SQL注入漏洞的產(chǎn)生與防御》

這個(gè)漏洞的利用不是幾句話就能說清楚的,詳細(xì)的可以追問,純手工打字,望樓主采納。

什么是mysql注入

MySQL SQL 注入

SQL注入可能是目前互聯(lián)網(wǎng)上存在的最豐富的編程缺陷。 這是未經(jīng)授權(quán)的人可以訪問各種關(guān)鍵和私人數(shù)據(jù)的漏洞。 SQL注入不是Web或數(shù)據(jù)庫服務(wù)器中的缺陷,而是由于編程實(shí)踐較差且缺乏經(jīng)驗(yàn)而導(dǎo)致的。 它是從遠(yuǎn)程位置執(zhí)行的最致命和最容易的攻擊之一。

我們永遠(yuǎn)不要信任用戶的輸入,我們必須認(rèn)定用戶輸入的數(shù)據(jù)都是不安全的,我們都需要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行過濾處理。

以下實(shí)例中,輸入的用戶名必須為字母、數(shù)字及下劃線的組合,且用戶名長(zhǎng)度為 8 到 20 個(gè)字符之間:

讓我們看下在沒有過濾特殊字符時(shí),出現(xiàn)的SQL情況:

以上的注入語句中,我們沒有對(duì) $name 的變量進(jìn)行過濾,$name 中插入了我們不需要的SQL語句,將刪除 users 表中的所有數(shù)據(jù)。

在PHP中的 mysqli_query() 是不允許執(zhí)行多個(gè) SQL 語句的,但是在 SQLite 和 PostgreSQL 是可以同時(shí)執(zhí)行多條SQL語句的,所以我們對(duì)這些用戶的數(shù)據(jù)需要進(jìn)行嚴(yán)格的驗(yàn)證。

防止SQL注入,我們需要注意以下幾個(gè)要點(diǎn):

永遠(yuǎn)不要信任用戶的輸入。對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過正則表達(dá)式,或限制長(zhǎng)度;對(duì)單引號(hào)和 雙”-“進(jìn)行轉(zhuǎn)換等。

永遠(yuǎn)不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過程進(jìn)行數(shù)據(jù)查詢存取。

.永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫連接。

不要把機(jī)密信息直接存放,加密或者h(yuǎn)ash掉密碼和敏感的信息。

應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝

sql注入的檢測(cè)方法一般采取輔助軟件或網(wǎng)站平臺(tái)來檢測(cè),軟件一般采用sql注入檢測(cè)工具jsky,網(wǎng)站平臺(tái)就有億思網(wǎng)站安全平臺(tái)檢測(cè)工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻擊等。

教程來源:樹懶學(xué)堂_一站式數(shù)據(jù)知識(shí)學(xué)習(xí)平臺(tái)_MySQK 防止SQL注入

分享題目:mysql漏洞怎么注入 sql注入漏洞是什么意思啊
本文URL:http://muchs.cn/article4/hjceie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、虛擬主機(jī)、云服務(wù)器、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名