方法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 注入是不會成功的,但伺服器同樣會報錯,具體提示...