easytornado的wp

195 阅读3分钟
import tornado.web  
   
class MainHandler(tornado.web.RequestHandler):  
    def get(self):  
        self.render('index.html')         
class LoginHandler(BaseHandler):  
    def get(self):  
        '''  
        当用户访登录的时候我们就得给他写cookie了,但是这里没有写在哪里写了呢?  
        在哪里呢?之前写的Handler都是继承的RequestHandler,这次继承的是BaseHandler是自己写的Handler  
        继承自己的类,在类了加扩展initialize! 在这里我们可以在这里做获取用户cookie或者写cookie都可以在这里做  
        '''  
        '''  
        我们知道LoginHandler对象就是self,我们可不可以self.set_cookie()可不可以self.get_cookie()  
        '''  
        # self.set_cookie()  
        # self.get_cookie()  
        self.render('login.html', **{'status': ''})  
def login(request):  
    #获取用户输入  
    login_form = AccountForm.LoginForm(request.POST)  
    if request.method == 'POST':  
        #判断用户输入是否合法  
        if login_form.is_valid():#如果用户输入是合法的  
            username = request.POST.get('username')  
            password = request.POST.get('password')  
            if models.UserInfo.objects.get(username=username) and models.UserInfo.objects.get(username=username).password == password:  
                    request.session['auth_user'] = username  
                    return redirect('/index/')  
            else:  
                return render(request,'account/login.html',{'model': login_form,'backend_autherror':'用户名或密码错误'})  
        else:  
            error_msg = login_form.errors.as_data()  
            return render(request,'account/login.html',{'model': login_form,'errors':error_msg})  
    # 如果登录成功,写入session,跳转index  
    return render(request, 'account/login.html', {'model': login_form}

这里就是涉及渲染引擎和,tornado框架的问题了,其实说的那么复杂其实就是一堆代码组成的不同功能罢了,但是呢,了解其中的意义才是必要的,如果放任不管那么那不过是玩闹,学习要像呼吸一样自然,不是吗。 这个引擎呢就是网页动态渲染引擎了,这里接受一个参数嵌入网页里面,其实我也应该去学习一下引擎和这个框架了。框架呢就像系统一样它提供了许多方法,路由,过滤器,一些东西兼容你在上面进行特定的功能。 http://61.147.171.105:55281/error?msg={{handler.settings}} 这里发现它没有对这个输入进行过滤的时候就开始进行注入,因为这个error会把报错的东西输出来,那么我直接字典请求参数,要他输出来给我得到cookie密钥,handler.settings 是 Tornado Web 服务器中用于存储应用程序配置信息的一个字典对象,它通常包含一些全局或者应用程序级别的配置项,例如 cookie_secret、xsrf_cookies 等等。这个字典对象是在创建请求处理函数实例时被初始化,并作为参数传递给该实例的构造函数。handler 是一个请求处理函数实例对象,它代表了 Tornado Web 服务器中的一个 HTTP 请求。每当客户端向服务器发起一个 HTTP 请求时,服务器就会创建一个该类型的对象,并通过匹配路由规则来调用相应的方法进行处理。 而 settings 则是一个字典对象,它包含了当前请求处理函数实例对象的一些应用程序配置信息。这个字典对象是在创建 Tornado Web 应用程序对象时被初始化的,通常包含了一些全局或者应用程序级别的配置项,例如 {'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '090c75e6-1ef9-49df-a19c-e17244e1953a'} 其实就是被这个error函数处理了,还有一些函数给初始化了然后在页面里面显示出来 md5(cookie_secret+md5(filename)) 得到cookie密钥之后就可以哈希生成filename了 用python脚本加密

>>> src="/fllllllllllllag"
>>> cookie="a633dc5f-7b64-40f2-8c4f-c9b2dfd3a093"
>>> filename=hashlib.md5()
>>> filename.update(src.encode("utf-8"))
>>> filename=filename.hexdigest()
>>> cookie_s=hashlib.md5()
>>> cookie_s.update((cookie+filename).encode("utf-8"))
>>> cookie_s=cookie_s.hexdigest()
>>> print(cookie_s)
d2174486eadd3bcee2dde408a2d93335

add.bmp 发送就可以得到flag了,所以这个靶场的要拿到什么还是要去百度这个信息在在哪个字典看看,还要了解信息回显这个额,这个搞了好久三个小时,,,,,