Python 内存马分析

前言

打安洵杯线下的时分有一道PythonSSTI模板注入的AWD标题, 由于之前没有怎样接触过关于Python的攻防点, 一度被他人种了Python 内存都还没发现, 等竞赛中缀发现修补后的标题被打进来后, 查看流量记载才认识到攻击者前面是用的Flask内存马打的, 之前看过大约的思绪却鸽了不断没学, 这里暂且记载一下相关学问点.

概念

常用的Python框架有DjangoFlask, 这两者都可能存在SSTI破绽. Python 内存马应用Flask框架中SSTI注入来完成, Flask框架中在web应用模板渲染的过程中用到render_template_string停止渲染, 但未对用户传输的代码停止过滤招致用户能够经过注入歹意代码来完成Python内存马的注入.

Flask 恳求上下文管理机制

当网页恳求进入Flask时, 会实例化一个Request Context. 在Python中分出了两种上下文: 恳求上下文(request context)、应用上下文(session context). 一个恳求上下文中封装了恳求的信息, 而上下文的构造是运用了一个Stack的栈构造, 也就是说它具有一个栈所具有的全部特性. request context实例化后会被push到栈_request_ctx_stack中, 基于此特性便能够经过获取栈顶元素的办法来获取当前的恳求.

破绽环境

先用Flask编写一个SSTI-Demo:

from flask import Flask, request, render_template_string

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    person = 'knave'
    if request.args.get('name'):
        person = request.args.get('name')
    template = '<h1>Hi, %s.</h1>' % person
    return render_template_string(template)


if __name__ == '__main__':
    app.run()
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像插拟0