看着這個簡單的界面,一時間沒有特別好的思路,先輸入一個1',發生了報錯
初步猜測這是一個字符型的注入,他將我們輸入的語句直接當成sql語句執行了,按題目的意思后面肯定過濾了很多注入語句,我就先來嘗試一些基本的語句
難道把union select都給過濾了?一陣絕望后接着試,試了好多后完全沒思路
接着大概就是傳說中的運氣吧
這兩個現象讓我猜測過濾的是兩個空格以及空格中間的字符串,繞過空格有好多方法:+,/**/,%0a,這里我用/**/代替空格構造一個查詢語句:
拿到數據庫,接下來就是常規的注入語句,具體可見之前寫的注入關
嘿嘿,你以為是常規語句就能解決的,怕不是活在夢里
經過一番測試,table_schema都被和諧了,這還怎么玩,突然想到之前有個字符串拼接的方法趕緊來試試
好像並沒有什么卵用,算了,去看wp吧。
后來發現原來要把limit以及后面的東西都給去掉,這個我實在是不知道原因,請知道的大佬招呼一聲。
出現了flag表,繼續注入
貌似column_name也被和諧了,確認之后確實是的,還是老方法繞過,發現還有東西被過濾,試了一試是information_schema.columns,再繞一次
flag就是我們想要的字段啊
太累了,但也學到了不少東西
簡單的sql注入之2
瞎試一通后發現還是過濾了空格嘛,同樣的手法還能連用兩題的啊,繼續深入
氣死了,database()被過濾了,那就查所有的數據庫
還是熟悉的配方,熟悉的web1,繼續走
又讓我找到了flag表,繼續
最后一步
跟上一題一模一樣,跟撿的一樣。
簡單的sql注入之3
一開始老套路先給個1'肯定是會報錯的
先拿個基於時間的盲注語句試試水
返回了一個don't,嘗試了語句中的每個指令,原來是sleep()被過濾了
突然想到了一開始看到的報錯信息,那就再試試報錯注入
又過濾了floor()函數,我就知道不會這么簡單
經過1=1與1=2的對比,我猜測當后面的sql語句成功執行就會返回hello,否則就無回顯。
這就跟基於時間的盲注一個原理么。原理猜到了,但由於對數據庫命令並不熟,我還是去查看了wp。
原來這邊除了上面這點還要利用一下報錯:
?id=1' and (select count(*) from 表名)>0 %23
表名不存在時,報錯
由此我們得知數據庫名為web1,
接下里跑表的語句還是?id=1' and (select count(*) from 表名)>0 %23
這里因為我沒有表名字典,所以也沒啥可跑的,求表哥們賞我一份字典吧
只能簡單的拿?id=1' and (select count(*) from flag)>0 %23測試一下,返回了hello說明flag表存在
猜列的手法如出一轍
?id=1'union select 列名 from flag %23可以拿個字段字典放burp里跑,我這里還是進行簡單的測試
?id=1'union select flag from flag %23后返回了hello,說明存在flag列
接下來就是最重要的一步——猜字符
?id=1'and ascii(substr((select flag from flag),1,1))=ASCII%23原理就是這條語句
對ASCII碼進行爆破,值從30到127
這里貼上我參考過的大佬的wp
【實驗吧】CTF_Web_簡單的SQL注入之3