数字中国——数据安全产业积分争夺赛
0x01 前言
数字中国数据产业积分争夺赛,说朴素点就是打各种安全的逆天题目。各种见过的没见过的打过的的没打过的全部一股脑端上来,甚至还有大数据社工(给孩子电脑都跑报废了)。不过还好拼尽全力打到初赛中部赛区第八名。感觉很有必要记录一下这次的赤石记录,豪赤!
0x02 WriteUp记录
0x021 ez_upload
非常基础的一道upload题目,phtml加上php短标签直接就梭哈了。沟槽的fuzz字典里面没有phtml,害的我fuzz半天都快红温了还没fuzz上去。顺手整了个UploadBypass小工具试了试,感觉挺好用的。可惜在上传重命名的情况时不太好使。以后可以尝试二开一下,感觉会很有用。
0x022 数据分析
队内平常做内存取证的哥们这把在打爬虫,所以只能我自己上了。说是取证,但因为没工具摸到raw
文件后就没动静了。只出了第一个。提供了一个img文件,使用FTK Image
可以直接打开(感谢软件系统安全赛的馈赠)。打开后就可以看到一个重要文件.docx
,里面有一行被标白的数据,全选标黑即可。重点在于后面的raw
文件取证。有机会复现补全WP。
0x022 数据社工
最吃性能的一组题目(确信)。要处理多到头皮发麻的数据量并从中准确盒出张华强
的各项信息。入手点在于爬取的网页部分。使用python脚本硬爆可以直接爆出第2、3、4题的答案。
import os
def search_for_name(root_dir, target_name="张华强"):
# 存储所有匹配的文件路径
results = []
# 遍历1到50的文件夹
for folder_num in range(1, 51):
folder_path = os.path.join(root_dir, str(folder_num))
# 检查当前文件夹是否存在
if os.path.isdir(folder_path):
# 遍历文件夹中的html文件
for file_num in range(1, 10001):
file_path = os.path.join(folder_path, f"{file_num}.html")
# 检查文件是否存在
if os.path.isfile(file_path):
try:
# 打开文件并检查是否包含目标字符串
with open(file_path, "r", encoding="utf-8") as file:
content = file.read()
if target_name in content:
# 记录符合条件的文件夹和文件路径
results.append((folder_path, file_path))
except Exception as e:
print(f"无法读取文件 {file_path}: {e}")
# 输出所有找到的结果
if results:
print(f"找到目标字符串 '{target_name}' 的文件如下:")
for folder, file in results:
print(f"文件夹: {folder}, 文件: {file}")
else:
print(f"未找到包含目标字符串 '{target_name}' 的文件。")
# 调用函数,当前目录作为根目录
root_dir = "." # 当前目录
search_for_name(root_dir)
虽然是无脑暴力检索的模式,但速度确实还行,几分钟就可以将关键文件暴露出来。
阅读这两个html,即可拿到关键信息。
至此我们就拿到了三道题目的答案。剩下两道社工题待有时间再钻研一下吧。
0x023 数据攻防
算是最简单的一组题目了,给了一个http.log
与很大的pcapng
流量包。题目一要求我们观察数据包中的sqlite盲注流量,并从中提取出黑客盲注出的账密。
做的比较仓促,直接用脚本把pcapng
硬开后将sqlite流量以关键词提取出来
def extract_lines(input_file, output_file):
# 1. 二进制模式读取
with open(input_file, 'rb') as fin:
binary_data = fin.read()
# 2. 强制用 utf-8 解码并忽略错误
text_data = binary_data.decode('utf-8', errors='ignore')
# 3. 按换行符拆分成“行”
lines = text_data.splitlines()
# 4. 搜索包含 /randomPassword?level= 的行并输出
with open(output_file, 'w', encoding='utf-8') as fout:
for line in lines:
if '/randomPassword?level=Baby-1' in line:
fout.write(line + '\n')
if __name__ == '__main__':
extract_lines('test.pcapng', 'result.txt')
提取出来后直接拉到底,可以发现最后注的关键词是fl4g_1s_here
,写个脚本二次过滤
def extract_lines(input_file, output_file, search_term):
with open(input_file, 'r', encoding='utf-8') as fin, \
open(output_file, 'w', encoding='utf-8') as fout:
for line in fin:
if search_term in line:
fout.write(line)
if __name__ == '__main__':
# 输入文件名和输出文件名
input_file = 'result.txt' # 请替换成你的文件名
output_file = 'result2.txt'
search_term = 'fl4g_1s_here'
extract_lines(input_file, output_file, search_term)
通过阅读语句可以发现是sqlite的布尔盲注。按逻辑我们把爆破的各个位的最后一条注入数据提取出来,其必定是布尔判断为true
的结果。就可以拿到32位flag的每个字对应的16进制ASCII码。
题目三很简单,以json数据标志性的{}
把得到的个人数据全部提出来。然后统计phone的重复频率,把前三个拿出来即可。
def extract_lines(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as fin, \
open(output_file, 'w', encoding='utf-8') as fout:
for line in fin:
# Check if the line starts with '{' and ends with '}'
if line.startswith("{") and line.endswith("}\n"):
fout.write(line)
if __name__ == '__main__':
# 输入文件路径和输出文件路径
input_file = 'http.log' # 请替换成你的文件名
output_file = 'out1.txt' # 输出的文件名
extract_lines(input_file, output_file)
import re
from collections import Counter
# 读取txt文件
def read_txt_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.readlines()
# 解析每行数据
def parse_line(line):
# 使用正则提取tit3的字段数据
pattern = r'"phone":\s?"(\d+)"'
match = re.search(pattern, line)
if match:
return match.group(1)
return None
# 统计tit3字段的出现次数
def count_tit3_occurrences(file_path):
lines = read_txt_file(file_path)
tit3_values = []
for line in lines:
tit3 = parse_line(line)
if tit3:
tit3_values.append(tit3)
# 使用Counter统计频次
counter = Counter(tit3_values)
# 获取前五个出现最多的tit3
most_common_tit3 = counter.most_common(5)
return most_common_tit3
# 设置txt文件路径
file_path = 'out1.txt' # 请替换为你实际的文件路径
# 获取并打印结果
most_common_tit3 = count_tit3_occurrences(file_path)
print("phone字段出现次数最多的前五个号码:")
for item in most_common_tit3:
print(f"{item[0]}: {item[1]}次")
0x03 总结
好无敌的比赛,各样式的题目库库上,给哥们几个全打懵逼了快。还好大伙的技术栈够全面,在中部赛区拼尽全力也算是拿个第八进决赛了。