护网杯wp

  1. web
    1. easy tornado
    2. LTSHOP
    3. easy_laravel
  2. MISC
    1. 迟来的签到题

web

easy tornado

进入首页,看到文件列表。

http://49.4.94.186:31331/

随便点一个,可以读取文件内容,看到url里有两个参数,一个是文件名,另一个是签名。

根据 hint.txt , 签名是 cookie_secret + 文件名 的 md5

hint.txt
md5(cookie_secret + md5(filename))

http://49.4.94.186:31331/file?filename=Orz.txt&signature=25d5cc7447f6e6a5785004b0a3362d6c

通过 FUZZ 参数,发现新的路由,即报错页面。

http://49.4.94.186:31331/error?msg=%E7%AD%BE%E5%90%8D%E9%94%99%E8%AF%AF

看到参数的 签名错误 被输出到页面里,应该是 SSTI。

tornado—web框架基础入门 通过这个进行快速学习tornado的开发

tornado文档 通过阅读文档快速掌握对象

安装:

pip install tornado

官方demo

import tornado.ioloop
import tornado.web
# import uimodules as md
# import uimethods as mt

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

settings = {
    'template_path': 'views',        # html文件
    'static_path': 'statics',        # 静态文件(css,js,img)
    'static_url_prefix': '/statics/',        # 静态文件前缀
    'cookie_secret': 'suoning',        # cookie自定义字符串加盐
    # 'xsrf_cookies': True,         # 防止跨站伪造
    # 'ui_methods': mt,           # 自定义UIMethod函数
    # 'ui_modules': md,           # 自定义UIModule类
}

application = tornado.web.Application([
    (r"/", MainHandler),
], **settings)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

通过application = tornado.web.Application([(r"/", MainHandler),], **settings)

很明显可以知道 cookie_secret 在RequestHandler这个对象里面

然后根据Tornado小记 – 模板中的Handler

handler 指向RequestHandler

而RequestHandler.settings又指向self.application.settings

所有handler.settings就指向RequestHandler.application.settings了!

就知道怎么通过模版注入

模版注入绕过:Flask/Jinja2模板注入中的一些绕过姿势

里面的payload 基本都包含 () 很明显题目过滤了 只保留了. 所以通过上面别名的方法来获得cookie_secret

可以通过这个 msg= 直接读出 tornado 的配置。

找到了 cookie_secret,根据 hint,构造 url

/fllllllllllag

{BVt!-e%cqXs&ln)$7_xI@wJ0PA^9Q1#8?khj(4ao2urCbL3HE~.GpzFf[YKSg

<?php
$str = "/fllllllllllag";
$a=md5($str);
$str2 = "{BVt!-e%cqXs<&ln)$7_xI@wJ0PA^9Q1#8?khj(4ao2urCbL3HE~.GpzFf>[YKSg";
$str3=$str2.$a;
echo md5($str3);
?>

2ad507bc2e8b59cce2e4147b0bfa169f

http://49.4.94.186:31331/file?filename=/fllllllllllag&signature=2ad507bc2e8b59cce2e4147b0bfa169f

flag{fd29ee3314ce32fedce028ca753fb68a}

http://49.4.78.81:30980/file?filename=/fllllllllllag&signature=7bae09c2c6e2f6aa34df7dbee23db960

LTSHOP

本题的考点在于条件竞争以及整数的溢出问题

通过多线程发包的方式使得购买到 5 个以上的大辣条

可以使用burp抓包,发送到intruder

设线程大一点

start stack

得到10个大辣条越换两个辣条之王

抓包发现cookie有go_iris 猜测是go语言数据类型溢出

由于go使用强类型语言,猜测是整数溢出。 最后测试出是unsigned __int64,而uint64范围为18446744073709551615, 5个大辣条换一个辣条之王。

这里遇到了很大坑一开始我们一直用18446744073709551616,然后比赛完才发现要除以为除以5,所以最后num=3689348814741910324,那么要花费18446744073709551620个大辣条,超出uint64范围转换为5。

payload:

num=3689348814741910324

easy_laravel

https://qvq.im/post/%E6%8A%A4%E7%BD%91%E6%9D%AF2018%20easy_laravel%E5%87%BA%E9%A2%98%E8%AE%B0%E5%BD%95

https://www.anquanke.com/post/id/161849

ez_laravel给了docker镜像,详细分析和复现下,确实是一道好题,膜4uuu师傅。

https://github.com/sco4x0/huwangbei2018_easy_laravel

MISC

迟来的签到题

import base64

tmp=""
string = "AAoHAR1TJ1clUFYjVSRRV1cnIiUiV1BeUFNeIlBXI1BVI1UlUBs="
string2 = base64.b64decode(string)
print(string2)
for i in range(1,256):
    for j in string2:
        tmp = tmp + chr(ord(j) ^ i)
    print(tmp)
    tmp=""

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 951207194@qq.com

文章标题:护网杯wp

文章字数:797

本文作者:Mang0

发布时间:2018-10-13, 23:53:02

最后更新:2018-12-03, 19:22:17

原始链接:http://mang0.me/archis/173905c2/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏