XDCTF2014 Writeup之Web和Crack篇
0x01?Web20
什么,小P說來點彩頭?先出個簡單的,就WEB20吧。題目鏈接:WEB20hint?>?大家不知道復活節要玩什么嗎?(非前端題,請勿關注html注釋、css、javascript等)
之前被HTML注釋和小P的博客坑了很久 毫無頭緒 還盯著圖片看是否有隱寫術之類。。。
折騰了一下然后去做后面的題目搶分去了 后來根據提示得知是考php彩蛋信息
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 (PHP信息列表)
?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 (PHP的LOGO)
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 (Zend LOGO)
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 (PHP LOGO 藍色大象)
http://game1.xdctf.com:8081/H86Ki4NnCSVv/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Your Flagflag-WhatisPhp-mtzeXAtcKA53
0x02?Web50
在業界都知道,哪一行都不好做,我們這一行也不例外,拿XSS來說,沒兩把刷子,你還能混得下去么,下面是某黑寫的XSS編碼神器,你值得擁有,但是為了版權問題,他在里面留了標記,找到標記,這神器就是你的!!牛x的你值得擁有........之前flag有點小BUG,現在已經修復了哦~
下載得到一個crx文件,拖到chrome的extensions里面看了下沒啥標記,然后修改后綴為rar或zip解壓。
想想也知道key不會這么快找到;這里沒有再翻翻其他文件,也都沒有發現flag,看下兩個圖片的EXIF信息,發現有XP注釋!
(話說這題隊友隔壁老王是直接用windows文件夾看到備注然后拿下提交,然后團隊得分了。)
107 101 121 32 105 115 58 88 68 83 101 99 64 50 79 49 52
key is:XDSec@2014
0x03 Web70
大家都說XSS很不好玩,但是會玩的人就是很好玩,你覺得呢?呵呵
Jother編碼提交exp和截圖到郵箱得flag
XsSXD$3(201X@xiD@n
0x04?Web100
一開始做這道題就確定是隱寫的方向了……直接用winhex打開一看,發現看不出什么名堂。
用steganabara和stegsolve看了一陣子隨機圖層,沒發現什么隱藏信息。
于是回頭繼續看源代碼……發現有注釋提示
按照注釋的路徑嘗試,發現是一個二維碼,掃之……
掃出來是這么一個東西
閱讀了一下文章,發現是將惡意代碼隱藏在像素中躲避殺軟……

然后用stegsolve的Data?Extract功能,基于像素對比,一個個嘗試,最終在red0上試出來了flag(雖然不知道原理,但覺得確實很好用,還有待進一步學習吶==)
0x05?Web200
自從小P告訴離休老干部le4f?python怎么寫網站以后,就一發不可收拾。這是le4f的新作:http://y0pk678.xdctf.com:8081/說明:本題flag形式為XDCTF{XXXX},填入XXXX內容即可。
http://y0pk678.xdctf.com:8081/help
http://y0pk678.xdctf.com:8081/read?file=readme
奇怪,為什么沒全部顯示出來
哦,我懂了些什么
哦,我懂了些什么
奇葩的碼畜你不要賣萌了
這是newapp.py的說明文件
我猜你可能不知道還有第二行
我猜你可能不知道還有第二行
咦,怎么還有第三行
咦,怎么還有第三行
奇怪,為什么沒全部顯示出來
http://y0pk678.xdctf.com:8081/read?file=newapp.py
反復讀取,拼接成完整的newapp.py
#!/usr/bin/env python
#coding=utf-8
__author__ = 'le4f.net'
import web
import random
urls = (
'/getflag', 'xdctf',
'/help', 'help',
'/read', 'read',
'.*','ctf'
)
def func(a):
if a == 'le4f.net':
flag = open("flagishere","r").readlines()[0].strip()
web.header('flag', flag)
return 'Nice Job!!!'
else:
pass
class help:
def GET(self)
try:
return "welcome to my first web.py project."
except:
pass
class xdctf:
def GET(self):
try:
web.input(_unicode=func(web.input(unabletoread = 'show me flag!!!!').get('unabletoread')))
return "flag is here?!!show me flag!!!!"
except:
pass
class ctf:
def GET(self):
try:
return "u may need help information."
except:
pass
class read:
def GET(self):
data = web.input(file = 'readme')
if data['file'].count('.') > 1:
f = 'readme'
else:
f = data['file'].replace('$','').replace('^','.').replace('*','').replace('\\','').replace('/','').replace('\"','').replace('\'','').replace('|','').replace(';','.').replace('<','').replace('>','').replace('&','').lower()
try:
print f
cont = open("./"+f,"r").readlines()
rand = random.randint(0,len(cont)-2)
return cont[rand]+'\n'+cont[rand+1]
except:
pass
else:
pass
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
根據代碼發送一個get請求,在header中看到flag。
flagXDCTF{X1di4nUn1Vers1tySecT3AM}
0x06?Web150
最近,小黑在學習入侵技術的過程中得到一款功能十分強大的php木馬,但是使用了一段時間發現,自己拿到的shell老是被別人登錄,但剛開始學習的小黑,對php代碼不是很熟悉,你能幫他分析下這代碼嗎?找到后門接收shell的密碼作為key,不是后門密碼喲........
下載下來發現是一個加密后的PHP。搜了一下,特征很像神盾php加密。
在網上找到一個PHP神盾的解密網站?http://blog.99tk.cn/decode#
上傳解密,看到flag
XDSE@L0VEr2014
0x07?Web180
下載回來源碼 看了數據庫data.mdb里面沒啥 然后發現了深度隱藏文件about.asp
是一個asp的大馬 也找不到更好的辦法了 就姑且認為這個版權的人就是我們要找到犯罪分子
<%@ LANGUAGE = VBScript.Encode %><%
Server.ScriptTimeout=999999999
UserPass="3895" '密碼
mNametitle ="gh0st2014" ' 標題
Copyright="qq:2725629821" '版權
那么昵稱就是gh0st2014,QQ很新,社工庫里面肯定無收獲,那么這題就是考一些常規的社工和信息收集了。
訪問此人空間 提示
很簡單 直接 gh0st2014猜進去 其實這里可是設計的難度大一點 貼近生活一點。
根據空間里面破碎的身份證和基本信息
性別: 男
年齡: 29
生日: 5月7日
星座: 金牛座
現居地:
中國 陜西 西安
推出此人身份證610121198505073895
然后登陸 獲得key:Welcome@Xidan$@clov@r
0x08?Web250
小P閑暇時間開發了一個留言板,供瀏覽者與管理員進行交流,不過聽說有點問題?地址:http://lsoyon.xdctf.com:8081/4CgtWuwdouSE/FLAG在管理員的cookie中。flag形如flag-xxxx。請自行測試確認能獲得cookie,再點擊提交審核,管理員會查看。管理員的瀏覽器是chrome最新版哦~提交審核后請不要刪除你的留言,否則管理員看不到的哦~管理員2分鐘看一次留言板,每次停留3秒。看過以后才能夠再次提交審核。所以請測試真實通過后再提交。
于是嘗試使用[script][/script]提交發現括號被過濾了,使用標簽和HTML十進制編碼成功繞過(這里正好用上前面題里的XSS神器:?),還蠻好用的)


成功彈出cookie
構造payload將cookie發到xss平臺,卻發現存在CSP協定……
然后就沒有什么思路了….不知道其他隊伍是怎么直接拿到cookie的 怎么搞定CSP的
我最后是做到后面的web270的時候,上傳了shell,用菜刀連上后,上傳了一個接收cookie的php。
也算是個YD的方法吧,哈哈,思路要開闊!

構造payload:

等了幾分鐘就收到管理員的cookie啦

0x08?Web270[1,2,3,4]
小P睡了一覺起來,發現黑客們都饑渴難耐,想日站想瘋了。小P默默地看了看自己的網站:http://ph.xdctf.com:8082/感覺不知道放個什么程序比較好,而同服的另一個網站居然已經運營很久了:http://hlecgsp1.xdctf.com:8082/真不知道該怎么辦……這是一個系列題目,分步驟給分。一共4個FLAG都在小P網站所在的服務器中。請黑客們不要破壞網站文件、數據庫。一旦發現有阻礙比賽正常進行的現象,將會恢復服務器到最初狀態。說明:4個flag都形如flag-xxxx
打開后發現時phpok的cms。
果斷搜索下漏洞,發現有sql注入和文件上傳。
文件上傳的洞算出來時間戳跑文件名沒有跑出來后果斷換方法,嘗試sql注入。

爆出管理員密碼 登陸后臺

找到文件管理,傳個菜刀馬

上大馬 直接搜索flag





而在Web270[2]的flag中提示了第三個flag也在這臺服務器上。
用菜刀訪問/home/wwwroot時提示沒有權限

用大馬看下發現服務器設置了open_basedir

找一個能夠bypass?open_basedir的馬上傳,翻翻目錄成功得到第三個flag,拿下了這題的firstblood!

web的題目就上面這些了,其中有3題我們是拿了一血的,哈哈。下面是破解類:
0x01?Crack100
逆向分析,獲取key,題目tips:flag為44位,41位的請繼續分析

PEiD查下,是.net程序。

用ILSpy打開,發現代碼被混淆了。用de4dot脫下殼試試,發現加了.net?reactor的殼

脫殼后就簡單多了

比較坑的是

直接看這一段代碼逆出來的是一個41位的flag,flag中還含有XDCTF2014,提交幾次不對后,問了下管理員,管理員說要在仔細看看源碼,可能忽略了一些步驟。


由于smethod_1有關于base64的操作,使密文與明文的長度不同。


0x02?Crack120
某天,小黑在某服務器上得到一個data文件,旁邊有句挑釁的話“有種你就解開data中的數據”,小黑折騰了半天,沒任何發現,但是推敲出,該目錄下的另外一個文件,與data息息相關,你來試試?
題目給出了一個沒有擴展名的文件和一個加密后的data。
打開沒有后綴名的文件后發現里面多處出現.pyt,module,__name__字樣,猜測這可能是一個pyc文件。
使用uncompyler.py反編譯之~

這樣有了源碼逆起來就很簡單啦,看不太懂的地方把它print出來看看基本也就明白了

運行下


這段不造什么時候才能進入,貌似要有連續127位相同?算啦,先不管了。
其余部分的逆算法很簡單,如果是0x8?的話,表示有?個連續的1;如果是0x0?的話,則表示有?個連續的0。

運行后得到一個圖片,flag就在圖片上~

0x03?Crack150
這個是一個apk,找到key,題目
打開后發現是一個登陸界面,看下源碼找到用戶名和密碼(buaa,123),成功登陸。

打開后發現界面與微信相似,里面有和一個人的聊天記錄,打開看下叭

聊天中提到了前一陣子被媒體炒得很火的xxshenqi。

這是XXshenqi的部分源碼。
果斷翻下assets看看有沒有什么有用的東西~

用UE看下圖片數據,發現文件末尾附加了一個dex文件

提取出來轉為jar報錯

只好用notepad++打開看下

發現末尾有一段中文,將key?md5編碼后提交,成功通過:?)
0x04?Crack180
ZZ發現土豪Ph在用SafeAccountSystem給Le4f打一筆退休金$23333,ZZ截斷了支付過程的密文,打算捉弄一下他們把退休金打到自己賬戶Z2333上。密文點此處下載:?http://game1.xdctf.com:8081/Z4l2Lu7XkNBa/crypt.txt支付系統的地址?game1.xdctf.com???端口,50008,請用nc連接(telnet不行)本題考點加密與解密,可是沒這個分類,真拙計。本題flag形如xdctf{xxx},答案填入xxx即可。

創建ID后會被分配一個One-time-Password
丟到cmd5查詢無果,繼續測試Transfer?of?Account

發現send的信息中含有許多5位一組的AB數據,猜測為培根密碼,嘗試對其進行解密:

對這兩串數據進行diff

發現差異節中包括前面題目生成的One-Time-Password
猜測b8c2b5c881f2b7f58a096a367a32be33為Ph的One-Time-Password

成功得到Flag
0x05?Crack300
逆向分析,比比誰更邪惡,題目
這道題不知道為什么,PEiD查不出殼,用IDA加載就報錯,只能用OD分析了……略坑:?(

先大概看下程序,401049處必須跳轉,因此上面的兩個字符串必須相同,得到0x40301F處應為XDCT

這里有一句檢測斷點的,到這里的時候別忘了改下標志位就好。

具體的分析過程就不詳細寫了,算法我用Python進行了模擬,發現需要對key進行枚舉。
跑出來key是X@3!F,得到flag?XDCTF{omgwtfjusthappenedtherethen}

2014.1010 SP小編更新:
官方Writeup
web20、web200、web250、crack180、web270 Writeuphttp://pan.baidu.com/s/1mg829zM
web50、web70、web100、web150、web180、crack100、crack150、crack200、exploit100、exploit200、exploit600、coding Writeuphttp://pan.baidu.com/s/1i39oMBr
本文由Q7和隔壁老王以及老王團隊原創,首發在SecPulse安全脈搏上。
原創作者:Q7
SP地址:http://www.secpulse.com/archives/1153.html