mysql怎么注入布爾 mysql注入方式

mysql注入問題

mysql 可以使用更安全的pdo_mysql接口來處理

新羅ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

所有的查詢參數話綁定

$sql = 'select * from table where id=:id';

$pdo-prepare($sql)-bindValue(':id', $id, PDO::PARAM_INT)-excute();

$pdo-fetch(); 來獲取數據 這樣可以很有效的避免被注入

sqlmap怎么注入sql server

當給sqlmap這么一個url的時候,它會:

1、判斷可注入的參數

2、判斷可以用那種SQL注入技術來注入

3、識別出哪種數據庫

4、根據用戶選擇,讀取哪些數據

sqlmap支持五種不同的注入模式:

1、基于布爾的盲注,即可以根據返回頁面判斷條件真假的注入。

2、基于時間的盲注,即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執(zhí)行(即頁面返回時間是否增加)來判斷。

3、基于報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中。

4、聯合查詢注入,可以使用union的情況下的注入。

5、堆查詢注入,可以同時執(zhí)行多條語句的執(zhí)行時的注入。

sqlmap支持的數據庫有:

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

可以提供一個簡單的URL,Burp或WebScarab請求日志文件,文本文檔中的完整http請求或者Google的搜索,匹配出結果頁面,也可以自己定義一個正則來判斷那個地址去測試。

測試GET參數,POST參數,HTTP Cookie參數,HTTP User-Agent頭和HTTP Referer頭來確認是否有SQL注入,它也可以指定用逗號分隔的列表的具體參數來測試。

部分sql注入總結

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

在可以聯合查詢的題目中,一般會將數據庫查詢的數據回顯到首頁面中,這是聯合注入的前提。

適用于有回顯同時數據庫軟件版本是5.0以上的MYSQL數據庫,因為MYSQL會有一個系統(tǒng)數據庫information_schema, information_schema 用于存儲數據庫元數據(關于數據的數據),例如數據庫名、表名、列的數據類型、訪問權限等

聯合注入的過程:

判斷注入點可以用and 1=1/and 1=2用于判斷注入點

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

sql注入通常為數字型注入和字符型注入:

1、數字型注入

數字型語句:

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

2、字符型注入

字符型語句:

字符型語句輸入我們的輸入會被一對單引號或這雙引號閉合起來。

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

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

傳入的東西變成了字符串并不會被當做命令。

所以字符型的測試方法最簡單的就是加上單引號 ' ,出現報錯。

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

這里還有的點就是sql語句的閉合也是有時候不同的,下面是一些常見的

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

以字符型注入為例:

在列數存在時會正?;仫@

但是列數不存在時就會報錯

這步就說明了為什么是聯合注入了,用到了UNION,UNION的作用是將兩個select查詢結果合并

但是程序在展示數據的時候通常只會取結果集的第一行數據,這就讓聯合注入有了利用的點。

當我們查詢的第一行是不存在的時候就會回顯第二行給我們。

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

在這個基礎上進行注入

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

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

現在非常多的Web程序沒有正常的錯誤回顯,這樣就需要我們利用報錯注入的方式來進行SQL注入了

報錯注入的利用步驟和聯合注入一致,只是利用函數不同。

以updatexml為例。

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target: 需要操作的xml片段

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

new_xml: 更新后的內容

此函數用來更新選定XML片段的內容,將XML標記的給定片段的單個部分替換為 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替換的部分 與xpath_expr 用戶提供的XPath表達式匹配。

這個函數當xpath路徑錯誤時就會報錯,而且會將路徑內容返回,這就能在報錯內容中看到我們想要的內容。

而且以~開頭的內容不是xml格式的語法,那就可以用concat函數拼接~使其報錯,當然只要是不符合格式的都可以使其報錯。

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

登錄界面嘗試注入,測試后發(fā)現是單引號字符型注入,且對union和空格進行了過濾,不能用到聯合注入,但是有錯誤信息回顯,說明可以使用報錯注入。

利用updatexml函數的報錯原理進行注入在路徑處利用concat函數拼接~和我們的注入語句

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

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

爆字段

爆數據

這里就出現了問題flag是不完整的,因為updatexml能查詢字符串的最大長度為32,所以這里要用到left函數和right函數進行讀取

報錯注入有很多函數可以用不止updatexml一種,以下三種也是常用函數:

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

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

比如

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

[強網杯 2019]隨便注

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

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

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

那一串數字十分可疑大概率flag就在里面,查看一下

這里的表名要加上反單引號,是數據庫的引用符。

發(fā)現flag,但是沒辦法直接讀取。再讀取words,發(fā)現里面有個id字段,猜測數據庫語句為

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

最終payload:

盲注需要掌握的幾個函數

在網頁屏蔽了錯誤信息時就只能通過網頁返回True或者False判斷,本質上是一種暴力破解,這就是布爾盲注的利用點。

首先,判斷注入點和注入類型是一樣的。

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

判斷完注入類型后就要判斷數據庫的長度,這里就用到了length函數。

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

輸入參數后,發(fā)現url處有個get傳入的stunum

然后用到length函數測試是否有注入點。

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

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

頁面回顯此學生不存在

那么就可以得出數據庫名長度為3

測試發(fā)現過濾了空格

然后就是要查數據庫名了,這里有兩種方法

一、只用substr函數,直接對比

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

二、加上ascii函數

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

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

直接遍歷腳本

二分法腳本

時間盲注用于代碼存在sql注入漏洞,然而頁面既不會回顯數據,也不會回顯錯誤信息

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

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

時間盲注主要是利用sleep函數讓網頁的響應時間不同從而實現注入。

sql-lab-less8:

無論輸入什么都只會回顯一個you are in...,這就是時間盲注的特點。

當正常輸入?id=1時時間為11毫秒

判斷為單引號字符型注入后,插入sleep語句

明顯發(fā)現響應時間為3053毫秒。

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

爆庫

爆表

爆字段

腳本

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

什么是異或呢

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

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

利用這個原理可以在union,and,or都被過濾的情況下實現注入

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

給了五個選項但是都沒什么用,在點擊后都會在url處出現?id。

而且union,and,or都被過濾

測試發(fā)現?id=1^1會報錯

但是?id=1^0會返回?id=1的頁面,這就是前面說的原理,當1^0時是等于1的所以返回?id=1的頁面。

根據原理寫出payload,進而寫出腳本。

爆庫

爆表

爆字段

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

實驗推薦:課程:SQL注入初級(合天網安實驗室)

mysql創(chuàng)建布爾字段

工具/材料:Management Studio。

1、首先在桌面上,點擊“Management Studio”圖標。

2、然后在該界面中,右鍵點擊數據表“設計”選項。

3、之后在該界面中,添加布爾字段BooleanType,數據類型為“bit”選項。

4、接著在該界面中,點擊上方工具欄里“保存”按鈕。

5、最后在該界面中,顯示布爾字段BooleanType值為。

新聞標題:mysql怎么注入布爾 mysql注入方式
當前網址:http://muchs.cn/article34/ddigipe.html

成都網站建設公司_創(chuàng)新互聯,為您提供小程序開發(fā)、網站收錄、網站維護微信公眾號、定制開發(fā)、品牌網站建設

廣告

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

微信小程序開發(fā)