0%

[SWPU 2016]web7

2025-04-27 16:01By
zhizuijingmi
Python条件竞争代码审计

Problem: [SWPU 2016]web7

思路

  • 解题大致思路
# coding:utf8 __author__ = 'niexinming' import cherrypy # 导入 CherryPy 框架,用于创建 Web 服务器 import urllib2 # 导入 urllib2 模块,用于发送 HTTP 请求 import redis # 导入 redis 模块,用于与 Redis 数据库交互 # 定义 Web 应用程序类 class web7: # 定义 index 方法,用于处理根路径的请求 @cherrypy.expose def index(self): # 返回 JavaScript 代码,使浏览器自动跳转到 /input 路径 return "<script> window.location.href='/input';</script>" # 定义 input 方法,用于处理 /input 路径的请求 @cherrypy.expose def input(self, url="", submit=""): # 读取 index.html 文件的内容,作为响应的基础模板 file = open("index.html", "r").read() reheaders = "" # 初始化变量,用于存储 HTTP 响应头信息 # 判断请求方法是否为 GET if cherrypy.request.method == "GET": reheaders = "" # 如果是 GET 请求,不进行任何操作 else: # 获取用户提交的 URL 和表单提交按钮的值 url = cherrypy.request.params["url"] submit = cherrypy.request.params["submit"] try: # 尝试打开用户提供的 URL,并获取其 HTTP 响应头信息 for x in urllib2.urlopen(url).info().headers: reheaders = reheaders + x + "<br>" # 将响应头信息拼接成 HTML 格式 except Exception as e: # 如果发生异常,将错误信息存储在 reheaders 变量中 reheaders = "错误" + str(e) # 再次尝试获取 HTTP 响应头信息(可能与之前的逻辑重复,需要检查代码逻辑) for x in urllib2.urlopen(url).info().headers: reheaders = reheaders + x + "<br>" # 将获取到的响应头信息嵌入到 HTML 模板中 file = file.replace("<?response?>", reheaders) return file # 返回处理后的 HTML 内容 # 定义 login 方法,用于处理 /login 路径的请求 @cherrypy.expose def login(self, password="", submit=""): # 创建 Redis 连接池,连接到本地 Redis 服务器 pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) re = "" # 初始化变量,用于存储登录结果信息 file = open("login.html", "r").read() # 读取 login.html 文件的内容,作为响应的基础模板 # 判断请求方法是否为 GET if cherrypy.request.method == "GET": re = "" # 如果是 GET 请求,不进行任何操作 else: # 获取用户提交的密码和表单提交按钮的值 password = cherrypy.request.params["password"] submit = cherrypy.request.params["submit"] # 验证用户提供的密码是否与 Redis 中存储的 admin 密码匹配 if r.get("admin") == password: # 如果密码正确,读取 flag 文件的内容并将其作为响应信息 re = open("flag", 'r').readline() else: # 如果密码错误,返回错误信息 re = "Can't find admin:" + password + ",fast fast fast....." # 将登录结果信息嵌入到 HTML 模板中 file = file.replace("<?response?>", re) return file # 返回处理后的 HTML 内容 # 配置 CherryPy 服务器,使其监听所有网络接口的 8080 端口 cherrypy.config.update({'server.socket_host': '0.0.0.0', 'server.socket_port': 8080, }) # 启动 CherryPy 服务器,传入 web7 类的实例作为 Web 应用程序 cherrypy.quickstart(web7(), '/')

具体看https://luo-kaihong.github.io/p/2025-nss-%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/

EXP

  • 具体攻击代码

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论