AWD比赛随笔

news/2025/12/1 0:33:55/文章来源:https://www.cnblogs.com/guaidao2/p/19290977

参加了一次AWD比赛,大致分享一下。

(上半场梭哈全场,下半场被全场梭哈)

第一场正常发挥

首先就是刚开始的20分钟,一定要做好防御。防御不好什么都是扯淡。如果能改root密码就改,我们这场比赛就没让我们改,因为权限不行(晕)。个人感觉如果有openssh的exp会很爽,但我没准备。所以脚本一定要备好。
在比赛刚开始要使用通杀脚本扫一遍是否有队伍还没改密码。
例:ssh_exp.py
代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SSH 批量登录测试器
测试多个主机的SSH登录凭据
"""import paramiko
import argparse
import threading
import time
from concurrent.futures import ThreadPoolExecutor, as_completedclass SSHBatchLoginTester:"""SSH批量登录测试工具"""def __init__(self, hosts_file=None, hosts_list=None, credentials_file=None, username=None, password=None, key_file=None, max_threads=10, timeout=10):"""初始化SSH批量登录测试器Args:hosts_file: 包含主机列表的文件路径 (每行一个主机)hosts_list: 主机列表credentials_file: 包含凭据的文件路径 (格式: username:password)username: 用户名password: 密码key_file: 私钥文件路径max_threads: 最大线程数timeout: 连接超时时间"""self.hosts = []self.credentials = []self.results = []self.max_threads = max_threadsself.timeout = timeoutself.username = usernameself.password = passwordself.key_file = key_file# 加载主机列表if hosts_file:self.load_hosts_from_file(hosts_file)elif hosts_list:self.hosts = hosts_list# 加载凭据if credentials_file:self.load_credentials_from_file(credentials_file)elif username and (password or key_file):self.credentials.append({'username': username,'password': password,'key_file': key_file})def load_hosts_from_file(self, filepath):"""从文件加载主机列表"""try:with open(filepath, 'r', encoding='utf-8') as f:self.hosts = []for line in f:line = line.strip()if line and not line.startswith('#'):# 支持 host:port 格式if ':' in line:host, port = line.split(':', 1)self.hosts.append((host, int(port)))else:self.hosts.append((line, 22))  # 默认端口为22print(f"[*] 已从 {filepath} 加载 {len(self.hosts)} 个主机")except Exception as e:print(f"[-] 加载主机文件时出错: {e}")import syssys.exit(1)def test_ssh_connection(self, host, port):"""测试单个SSH连接"""result = {'host': host,'port': port,'status': 'failed','error': None,'time_taken': 0}start_time = time.time()try:# 创建SSH客户端ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接if self.key_file:ssh.connect(hostname=host,port=port,username=self.username,key_filename=self.key_file,timeout=self.timeout)else:ssh.connect(hostname=host,port=port,username=self.username,password=self.password,timeout=self.timeout)# 执行简单命令验证连接stdin, stdout, stderr = ssh.exec_command('echo "Connection successful"')output = stdout.read().decode().strip()ssh.close()result['status'] = 'success' if output else 'failed'if not output:result['error'] = "Command execution failed"except Exception as e:result['error'] = str(e)finally:result['time_taken'] = time.time() - start_timereturn resultdef run_tests(self):"""运行所有测试"""if not self.hosts:print("[-] 没有主机需要测试")returnprint(f"[*] 正在测试 {len(self.hosts)} 个主机的SSH连接...")print(f"[*] 使用 {self.max_threads} 个线程")with ThreadPoolExecutor(max_workers=self.max_threads) as executor:# 提交所有任务future_to_host = {executor.submit(self.test_ssh_connection, host, port): (host, port)for host, port in self.hosts}# 收集结果for future in as_completed(future_to_host):result = future.result()self.results.append(result)# 实时输出结果if result['status'] == 'success':print(f"[+] {result['host']}:{result['port']} - 成功 ({result['time_taken']:.2f}秒)")else:print(f"[-] {result['host']}:{result['port']} - 失败 ({result['error']})")def print_summary(self):"""打印测试摘要"""total = len(self.results)success = sum(1 for r in self.results if r['status'] == 'success')failed = total - successprint("\n" + "="*50)print("SSH批量登录测试摘要")print("="*50)print(f"测试主机总数: {total}")print(f"成功连接数: {success}")print(f"失败连接数: {failed}")print(f"成功率: {(success/total)*100:.1f}%")if failed > 0:print("\n失败的连接:")for result in self.results:if result['status'] == 'failed':print(f"  - {result['host']}:{result['port']} ({result['error']})")def main():parser = argparse.ArgumentParser(description="SSH批量登录测试器")parser.add_argument("hosts_file", help="包含主机列表的文件 (每行一个)")parser.add_argument("-u", "--username", required=True, help="SSH用户名")parser.add_argument("-p", "--password", help="SSH密码")parser.add_argument("-k", "--key-file", help="SSH私钥文件")parser.add_argument("--port", type=int, default=22, help="默认SSH端口 (默认: 22)")parser.add_argument("--timeout", type=int, default=10, help="连接超时时间(秒) (默认: 10)")parser.add_argument("--threads", type=int, default=10, help="最大并发线程数 (默认: 10)")args = parser.parse_args()# 验证参数if not args.password and not args.key_file:print("错误: 必须提供密码(-p)或密钥文件(-k)")returntry:tester = SSHBatchLoginTester(hosts_file=args.hosts_file,username=args.username,password=args.password,key_file=args.key_file,port=args.port,timeout=args.timeout,max_threads=args.threads)tester.run_tests()tester.print_summary()except Exception as e:print(f"错误: {e}")if __name__ == "__main__":main()

利用类似这种脚本去打别人的靶机,看看有没有没换密码的。
然后,我们的上半场只有web靶机,所以使用Kali中的wapiti工具进行漏洞扫描。(因为考虑到比赛的时候flag轮换时间短,建议使用这种简便的轻量化的漏洞扫描工具)。
wapiti -u '目标URL'
通过扫描结果得知目标存在文件包含漏洞,在下载图片备份的地方存在文件包含漏洞。经过wapiti的检测发现存在可以直接包含/etc/passwd文件。
在本机通过find指令发现flag文件位于根目录下。命令如下:
find / -name *flag*
(当时我都怀疑自己搞错了,因为flag在/flag.txt文件里)
因为文件包含可以直接http://example.com/image-backup.php?=backfile=%2Fetc%2Fpasswd
所以直接就包含/flag.txt
构造如下URL:
http://example.com/image-backup.php?=backfile=%2Fflag.txt
直接梭哈全场的flag,爽!!!

但是第二场就难绷了

第二场是一个web靶机,一个pwn靶机。
我先是使用了wapiti扫描web靶机,再用pwnpasi扫描pwn文件,发现存在栈溢出。
发现web靶机存在xss,但是这没什么用啊!!!(服了)
因为是邮件登录系统,所以存在登录框,尝试sql望能密码绕过。如:admin' or '1' ='1
发现有回显,但是有转义字符。
【我的两个队友赛后复盘的意思是这个web靶机只要能登录进去就在首页可以直接拿到flag,那么因为靶机一样,就可以自己链接自己靶机上的mysql,查询管理员用户的md5(但我当时没反应过来,赛后把自己气笑了,但凡我们把md5改了也不会出现这种情况,也可以直接打进去别人靶机了。)】
pwn打的也是糟糕透顶了,明知道有栈溢出,而且canary,nx保护还没开,当时脑子不知道怎么回事,就是exp写不明白了,打不进去。(难绷)

赛后复盘

这次的问题出在了防御上,当然我自己的攻击和指挥也出现了一定的问题,因为是第一次参加线下awd比赛,拿了个决赛优秀奖,倒也还算满意。总结下来就是还得练。 --路虽远,行则将至。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能优化实战:从实例属性到扩展方法的演进

在软件开发中,性能优化是一个永恒的主题。即使是看似微不足道的设计决策,也可能在高并发场景下产生显著的性能影响。本文将通过一个实际案例——TangdaoTask类中Duration属性的设计演进,深入探讨"实例属性 vs …

vimgrep查找当前文件中的所有结果

vimgrep :vim[grep][!] /{pattern}/[g][j][f] {file} :vim[grep][!] {pattern} {file} ...如 :vimgrep /hello/g %:cope[n] [height] :ccl[ose] :cw[indow] [height]用:cw打开quickfix list查看搜索结果 lvimgrep :…

Hello World及Java编译基础知识

Hello World新建文件夹存代码 新建一个.java文件 编写代码public class hello{public static void main (String[] args){System.out.print("Hello,World!");} }编译 javac java文件(环境变量) 生成一个clas…

Walking

将文件放进随波逐流里面,使用foremost分离,得到一张二维码扫描二维码,获得flag

深入解析:MQTT客户端发布和订阅是什么意思?为什么mqttserver还要手工维护客户端ID列表和订阅主题和按需发送内容?

深入解析:MQTT客户端发布和订阅是什么意思?为什么mqttserver还要手工维护客户端ID列表和订阅主题和按需发送内容?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

docker-compse部署docker容器示例

一、什么是 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。作用: 通过一个名为 docker-compose.yml(或 compose.yaml)的配置文件,可以:用代码描述多个服务(如 Web 服务器、…

Silver

将文件放进010里面,发现flag

客户端和服务端通信----buffer

客户端和服务端通信----bufferbuffer在网络编程中,操作系统底层 API(如 send()、recv())要求传入:一个 内存地址(指针) 一个 字节数(size) 但 C++ 中有多种数据类型(std::string、std::vector<char>、C 数组…

Scrum冲刺阶段 Day Six

一、站立会议纪要1. 已完成工作 实现启用/禁用用户接口 后台功能 执行接口测试 + 联调验证 测试执行--- 2. 今日计划工作 开发分享访问前端页面 实现分享链接生成与提取码验证接口 实现分片上传、秒传与MD5校验完整逻辑…

156 电脑没有网卡驱动怎么办

电脑没有网卡驱动怎么办 在重装系统之后,我们可能遇到新系统没有合适的网卡驱动,导致系统无法联网的情况。这时我们可以使用连接网线或者使用手机共享网络的方法。如何使用手机共享网络 手机共享网络的本质是个人热点…

134 Gravesoft网页汉化5:Fix WPA Registry——修复WPA注册表

Gravesoft网页汉化5:Fix WPA Registry——修复WPA注册表https://gravesoft.dev/fix-wpa-registry Fix WPA Registry 修复WPA注册表在某些情况下,系统可能会在HKEY_LOCAL_MACHINE\SYSTEM\WPA处损坏WPA注册表项,这可能…

76 为什么Windows系统没有A盘和B盘?系统盘一定是C盘吗?

为什么Windows系统没有A盘和B盘?系统盘一定是C盘吗? 在如今的Windows系统中,大多数用户都会看到硬盘的默认盘符是C盘,而不是A盘或B盘.这背后有着一段有趣的历史.那么,为什么Windows系统选择C盘作为默认盘符?A盘和B盘…

11月阅读笔记(3)

程序员修炼之道》中 “未雨绸缪” 的思维,让我在代码异常处理上有了全新认知。之前写 C++ 作业时,总想着 “先实现功能再说”,比如写一个 “文件读取图书信息” 的函数void readBookFromFile(const string& fil…

攻防世界view_source

攻防世界view_source 1根据题目提示得知是网站源代码 23打开后将网站刷新一下便可看到源代码 4flag:cyberpeace{0caefd5b27ad046a5564ba7169f5350a}

133 Gravesoft网页汉化4:In-place Repair Upgrade——本地修复升级Windows

Gravesoft网页汉化4:In-place Repair Upgrade——本地修复升级Windowshttps://gravesoft.dev/in-place_repair_upgrade In-place Repair Upgrade 本地修复升级Windows(保存文件和应用程序)使用Windows ISO文件进行本…

154 如何在无密码时远程控制域内电脑

如何在无密码时远程控制域内电脑 在一般情况下,使用微软提供的远程桌面功能,我们可以在局域网内控制拥有账号密码的其他Windows系统专业版,企业版,以及专业工作站版本系统的电脑。 但是在某些特殊情况下,我们希望…

130 Gravesoft网页汉化1: 国外优秀激活工具MAS制作团队的Windows系统技术员说明文档

Gravesoft网页汉化1: 国外优秀激活工具MAS制作团队的Windows系统技术员说明文档MASSGRAVE团队出品的MAS脚本是一款优秀的开源Windows激活工具.事实上,MASSGRAVE团队不仅编写了MAS激活工具,还无偿为Windows系统编写了如…

38 把Office整个移动到D盘!

把Office整个移动到D盘! Microsoft Office 是众所周知的最为优秀的办公软件,是微软的力作之一. 然而,当下最为主流的 office 2019/2021/365 同时也因为安装占用过大C盘空间而饱受诟病. 对于office 2019,它的安装文件达…

63 Windows PE秒变Windows RE?到底是谁在用谁?

Windows PE秒变Windows RE?到底是谁在用谁? 评论区有朋友留言一个很有意思的问题. 我们使用Windows原版ISO启动电脑后,有一个界面是这样的:点击 修复计算机,之后出现了这个界面:那么问题就是,这个界面和WindowsRE的界…

Windows系统概述及磁盘分区

Windows系统概述及磁盘分区 Windows系统概述 Windows系统作为世界上使用者最多,最受欢迎的操作系统,值得热爱者们进行详细的研究.我们将分别介绍Windows系统的安装,维护,优化,以及进阶的高级操作.本教程所有的操作均使…