因缺思汀的繞過

訪問解題連接去訪問題目,能夠進行答題。根據web題通常解題思路去解答此題。看源碼,請求,響應等。提交與題目要求一致的內容便可返回flag。而後提交正確的flag便可得分。web題主要考察SQL注入,XSS等相關知識。涉及方向較多。此題主要涉及源碼審計,MySQL相關的知識。php

 

flag格式 CTF{}mysql

解題連接: http://ctf5.shiyanbar.com/web/pcat/index.phpweb

1.查看源代碼sql

2.打開連接http://ctf5.shiyanbar.com/web/pcat/source.txt,出現PHP代碼數據庫

能夠得知數據庫中的記錄就只有一條,這部分邏輯大概就是經過提交的uname查詢出結果,若是結果只有一條則繼續,若是查詢結果中的pwd字段和post過去的key值相同,則給出flag。
這時就要用到注入的一個小技巧,咱們使用group by pwd with rollup 來在查詢結果後加一行,而且這一行pwd字段的值爲NULL
在mysql官方文檔中是這樣描述rollup函數的:函數

 在GROUP BY子句中使用WITH ROLLUP會在數據庫中加入一行用來計算總數。
再結合limit和offset就能夠寫出一個payload
即:輸入的用戶名爲:' or 1=1 group by pwd with rollup limit 1 offset 2 #
#註釋
SELECT * FROM interest where uname=' ' or 1=1 
group by pwd with rollup  (在數據庫中添加一行使得pwd=NULL)
limit 1 (只查詢一行)
offset 2  (從第二行開始查詢)post

 

注意三點:《1》,關鍵字被過濾;《2》,單行輸出,因此用limit,由於逗號被過濾,因此不用limit 0,1檢驗行數,在這裏等同於 limit 1 offset 0,檢驗發現只有兩行:1' or 1 limit 1 offset 1# 。《3》使pwd爲空,有數據的狀況下怎麼搞出一條空的數據?---那就僞造一條:group by with rollup 是把全部信息在最下面整合彙總一條的功能,而且可指定字段彙總爲空!!因此執行:1' or 1=1 group by pwd with rollup limit 1 offset 2# 便可獲得flag
此時密碼只要爲空便可查詢成功rest

 

相關文章
相關標籤/搜索