XDCTF-Writeup

Team:ROIS_ThreeLine(ET,Rice,liognaij)

Note:

这篇writeup由本人和两位队友共同完成,非个人单独作品。其中仅包含队伍提交通过的题目,在两位队友努力下取得第14的成绩,谨以此文为纪念。

若有幸被转载还请注明出处。

Web20

php彩蛋 URL后缀加上 ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 即可得到flag

http://game1.xdctf.com:8081/H86Ki4NnCSVv/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Web50

大致看了下源码文件,发现没有flag  仔细看可以发现有两个文件修改时间和其他的不一样

Manifest.json打开里面有这么一行:

"Key":"dGhlIGZvbGxvd2luZyBrZXkgaXMgbm90IHRoZSByZWFseSBrZXksIHlvdSBjYW4gZmluZCBpbiB0aGUgb3RoZXIgZmlsZSE="

Base64解码发现不是真正的flag ,并被告知真正flag在另一个文件。图片隐写?Winhex打开fuck.jpg 得到一串ASCII码,转换字符得到真正flag。

[email protected] #一开始有bug 提交会出错,后来修正了

Web70

过滤字符和数字,就到谷歌搜如何绕过,使用jsFuck编码,找到这个网址http://patriciopalladino.com/files/hieroglyphy/,生成alert(/xss/)代码

exp太长不贴出,成功弹窗

Web100

右键源码,发现注释里有提示src/2328266727.png,打开是一个二维码,手机扫一扫是一篇文章,讲的是图片隐藏,lsb图片隐藏,拿出神器stegsolve,点data extract,red最后一位0位置上打勾,点击preview,key就出来了

Web150

搜索一下 php解密 用php神盾解密,以pass为关键字在明文中搜索,很快就得到flag了

[email protected]

Web180

题目链接下载网站源码,解压后发现about.asp文件没了,直接在压缩包查看,发现about.asp为网站不死马,找到着两行:

mNametitle ="gh0st2014"  ' 标题

Copyright="qq:2725629821"  '版权

直接搜索QQ号,得到昵称和个人详细地址生日,进入空间得到身份证后四位,拼凑出完整身份证。按照题目要求填入帐号密码得到flag

Web200

存在这个文件http://y0pk678.xdctf.com:8081/read?file=newapp.py

但是每次只会随机返回两行,然后就慢慢去拼凑,拼凑了一些比较有用的

_unicode存在漏洞

漏洞原理http://www.leavesongs.com/PENETRATION/web-py-runcode-tip.html

构造:http://y0pk678.xdctf.com:8081/getflag?unabletoread=le4f.net

然后抓包,查看response,就可以在header看到flag了

flag: XDCTF{X1di4nUn1Vers1tySecT3AM}

Web250

Xss题,根据提示,用 [ ] 代替 < > 作为标签符号,经测试可以发现过滤了 . < > = 可以使用<svg>标签加编码绕过,再闭合<p>标签,最终exp:

Web270[1]

提示很明显,我们要从phpok这个网站入手,乌云上搜phpok的漏洞,前台任意文件上传getshell那个漏洞试了几次无法利用,用phpok的sql注入漏洞,拿出sqlmap跑,翻翻数据库,很快就跑出第一题的flag

也跑出用户名admin ,密码198712

这里要注意解密密码的md5时候要把后面多余的:a5去掉,然后解密得到的明文也要去掉a5

Web270[2]

用admin和198712登录网站后台,找到模版管理,可以添加.php格式模版,直接贴上一句话(大概这样,网站打不开了,具体名字记不大清),连上菜刀,在网站根目录看到了thereisaflag~.php,打开文件就看到了flag-3rdf1agis0nth155erver

Web270[3]

flag2提示flag3在服务器上,虽然有shell,但是没有跨目录权限,open_basedir的限制。就谷歌搜open_basedir bypass,然后找到一个php exp,主要利用sqlite一个漏洞,然后把这个php exp传到shell上,访问这个文件,一直点上层目录,然后就发现flag-whyflagisastupidfilename.txt这个文件,把后缀去掉就是flag了

exp地址: http://www.jinglingshu.org/?p=4989

Web270[4]

上大马,根据题目提到flag形式,直接搜索关键字flag-,然后就有了

Crack100

用de4dot脱壳,之后用ILSpy看源码,发现有flag.rs,就在ReverseMe.exe目录下创建了flag.rs文件,输入aaa,运行ReverseMe.exe,得到あああ,多试几次后发现时单字符替换,于是就把可见的字符输入flag.rs,运行ReverseMe.exe,得到相应的密文,通过对照解出了41为的flag,cplg1r7f3~xq-%!>[email protected])<0^&key#oXDSEC2014,提交错误。看到提示flag是44位的,

就在41位的flag后面加了3位,运行ReverseMe.exe,密文只剩下32位。分析main()函数发现41位的flag的前32位加密方法与44位flag的前32位加密方法是一样的,但44位flag的后12位多经过了2个处理,分别是method0和method1,说明44位flag的后12位经过method0和method1后变成了41位flag的后9位,把XDSEC2014 base64加密后刚好12位,再和array数组异或就得到了44位flag的后12位,加上41位flag的前32位就得到了完整的44位flag

cplg1r7f3~xq-%!>[email protected])<0^&key#o==4102cesdx=

Crack120

用uncompyle2对unknownScript进行反编译,得到源码,对源码进行分析,发现加密过程是把文件读入,进行加工后输出,输出的每一个字节的低七位代表输入文件的连续相同位的个数(最大为127),最高位代表该位的值。

例如输入文件二进制为

11000000,

00110111,

对应输出为0x06,0x85,0x01,0x82,0x02

写出解密程序,解密得到有flag的图片

解密程序源码:



View Code

Crack150

Apk题目,反编译发现提示xx神器,想起之前看过的关于这个的新闻,网上查了下分析过程,锁定aseert文件夹的k.jpg文件,winhex尝试看了下,发现最后有包含key  md5字样的乱码,往上有dex文件头,果断抠出,用notepad  utf-8格式打开,得到flag:

“key”的小写16位md5加密

Crack180

看到密文有很多的AB,觉得是培根加密,写了个脚本对截获的密文解密还是看不出什么

nc game1.xdctf.com 50008

创建一个帐号1,记下One-time-Password是a0a5c5b828c303846d2a669a4a54cb0e

之后对自己进行转帐获得密文

562041AAAAA90AABAB7AABAB193AAAAA977AAAAA4AAAAA504AAABB3AABAB

137AAABAAAAAA8AAABBAAABAAABAB7AABAA71AABAAAAABBAABAB143AABAA

AAABA6AAAABAAABB99AAAAA7AABAAAABABAAAABAABAB4AAAAAAABAA5AAAA

A0AAAAA5AAABA5AAAAB828AAABA303846AAABB2AAAAA669AAAAA4AAAAA54

AAABAAAAAB0AABAA562041AAAAA90AABAB7AABAB193AAAAA977AAAAA4AAA

AA504AAABB3AABAB137AAABA7AAABB4AAABA01AAAAB242927AAAABAABAA0

643AABAB06AABABAAAABAABAA29AAAAB10AAAAAAABAA

解密得到

562041a90f7f193a977a4a504d3f137ca8dcf7e71edf143ec6bd9

9a7efbf4ae5a0a5c5b828c303846d2a669a4a54cb0e562041a90f

7f193a977a4a504d3f137c7d4c01b242927be0643f06fbe29b10ae

发现其中含有One-time-Password,

多创建几个帐号后发现One-time-Password总是在第65-96位,

对截获的秘文解密后取第65-96位,成功登录Ph的帐号,

Please choose the Mode of Transfer

时要选第三个才能成功向Z2333转帐,转帐成功后就能得到

flag:xdctf{d4d5906bb2f30b3bbbc1d915e6ba0f7321}

解密脚本:



View Code

Code120

按照运行原理,进入应用程序之前要先把返回地址(该地址位于kernel32.dll中)压入栈中,再转向应用程序去执行,也就是说在刚刚进入应用程序后栈顶是一个位于 kernel32.dll 中的地址,我们得到这个地址后向可以向系统内存的低地址进行搜索得到kernel32.dll的装载基址。因为 dll 文件也是标准的 PE 文件,所以得到装载基址后,可以通过搜索kernel32.dll的导出表得到GetProcAddress和LoadLibrary的内存地址,再通过LoadLibrary加载user32.dll,再调用GetProcAddress获得MessageBox的地址加以调用就可以了。

程序源码:



View Code

Code200

通过给CreateProcess传递CREATE_SUSPENDED参数来使calc.exe处于挂起状态,通过读取server.exe的内容来覆盖刚创建的处于挂起状态的calc.exe的空间,然后通过原始进程的空间来执行server.exe的内容

zombie.exe源码:



View Code

server.exe源码:



View Code

命令行下输入zombie.exe server.exe

zombie.exe 会使calc.exe成为傀儡进程,之后加载server.exe来监听80端口