sql注入2 BugkuCTF平台

2021-10-04 07:56:43 字數 1931 閱讀 9569

方法1

這道題是ds_store原始碼洩露,跑一下就出來了,自動生成了乙個資料夾「123.206

.87.240_8007」,開啟找到flag檔案即可得到答案。

方法2

利用字串與數字做運算時,字串會轉為數字再做運算,例如"abc"=""

=0,"12ab"=12

>

11,可看下圖示例,若是username=0-

1=-1時就會報錯,但username=0-

0=0時是不會報錯的,會回顯相應的資訊。

這樣我們就能利用 admin'-0-' 來構造payload。因為源**類似於 select

*from *** where username=

'輸入處'

; 所以 admin'-0-' 輸入後就相當於username=

'admin'-0

-'',也就是字串與數字的運算問題了。

發現題目給的「提示 !,!=

,=,+

,-,^

,%」這些都是沒有被過濾的,而像「union,or

,and

,for

,information,逗號,空格」等都被過濾了。

由於information都被過濾了,就不能使用information_schema來爆表、爆列了。這時想到源**的uname、passwd,猜測就是最後的欄位名。

由於uname=admin已經確定,那麼寫指令碼異或注入一下得出passwd的長度為32,猜測是md5加密後的值,那就一位位爆出來。

發現「ascii(

),substr(),

mid(

)」都沒有被過濾,substr(

database()

,1,2

)=substr(

database()

from

1for

2),但由於for、逗號、空格被過濾,這裡考慮使用substr(

),mid

()也完全一樣。

說明原理:若passwd=abc123。

substr(

(passwd)

from(1

))='abc123',substr(

(passwd)

from(2

))='bc123'

比較ascii值:ascii(substr(

(passwd)

from(2

)))=

98//只比較字串得第一位,98即b得ascii值

當表示式為真時,返回「username error!

!@_@」;當表示式為假時,返回「password error!

!@_@」。

寫指令碼跑一下即可。「0192023a7bbd73250516f069df18b500」這串字元取md5解密一下得到「admin123」。

使用使用者名稱「admin」和密碼「admin123」登入後輸入ls執行即可得到flag。

SQL注入2

注入第二題 主要考察union查詢 看來跟union聯合查詢有關 if post user post pass else source strcasecmp 用忽略大小寫比較字串.query mysql fetch array mysql query select pw from ctf where...

防止SQL注入2

通過global.asax過濾關鍵字 方法一 protected void if request.form.count 0 else if s3 s1 方法二 比較好用 當有資料時交時,觸發事件 protected void 遍歷get引數。foreach string i in this requ...

SQL注入詳解 2

第二節 判斷能否進行sql 注入 看完第一節,有一些人會覺得 我也是經常這樣測試能否注入的,這不是很簡單嗎?其實,這並不是最好的方法,為什麼呢?首先,不一定每台伺服器的iis都返回具體錯誤提示給客戶端,如果程式中加了cint 引數 之類語句的話,sql 注入是不會成功的,但伺服器同樣會報錯,具體提示...