精华内容
下载资源
问答
  • 条件竞争

    千次阅读 2019-06-03 11:23:25
    条件竞争 前言 前面强网杯的时候做upload,有大佬提出过条件竞争的思路,虽然最后不是,但看了下条件竞争感觉还是很有意思的,这里来学习一下 下面是从别人博客中引用,我感觉是把条件竞争讲的挺清楚的,举的例子和...

    条件竞争


    前言

    前面强网杯的时候做upload,有大佬提出过条件竞争的思路,虽然最后不是,但看了下条件竞争感觉还是很有意思的,这里来学习一下

    下面是从别人博客中引用,我感觉是把条件竞争讲的挺清楚的,举的例子和大佬在比赛中分析的也很像

    下面以相关操作逻辑顺序设计的不合理为例,具体讨论一下这类问题的成因。在很多系统中都会包含上传文件或者从远端获取文件保存在服务器的功能(如:允许用户使用网络上的图片作为自己的头像的功能),下面是一段简单的上传文件释义代码:

    <?php
      if(isset($_GET['src'])){
        copy($_GET['src'],$_GET['dst']);
        //...
        //check file
        unlink($_GET['dst']);
        //...
     }
    ?>
    

    这段代码看似一切正常,先通过copy($*GET['src'],$*GET['dst'])将文件从源地址复制到目的地址,然后检查$*GET['dst']的安全性,如果发现$*GET['dst']不安全就马上通过unlink($_GET['dst'])将其删除。但是,当程序在服务端并发处理用户请求时问题就来了。如果在文件上传成功后但是在相关安全检查发现它是不安全文件删除它以前这个文件就被执行了那么会怎样呢?

    假设攻击者上传了一个用来生成恶意shell的文件,在上传完成和安全检查完成并删除它的间隙,攻击者通过不断地发起访问请求的方法访问了该文件,该文件就会被执行,并且在服务器上生成一个恶意shell的文件。至此,该文件的任务就已全部完成,至于后面发现它是一个不安全的文件并把它删除的问题都已经不重要了,因为攻击者已经成功的在服务器中植入了一个shell文件,后续的一切就都不是问题了。

    由上述过程我们可以看到这种“先将猛兽放进屋,再杀之”的处理逻辑在并发的情况下是十分危险的,极易导致条件竞争漏洞的发生。


    练习

    Montf — 没时间解释了

    拿到这道题的时候也是很懵逼啊,因为页面和源码都没什么提示,一来就卡住了
    1
    后面看了别人的提示说这里是index2,改为index取访问就能得到信息

    改为index后去访问,发现没有变化,看url发现又变为了index2,说明是发生了302跳转,这时候我们用burp来抓包看下
    2
    可以看到burp抓包,抓到了302跳转前的包,看到提示uploadsomething.php,访问
    3
    看似是一个登陆界面,但仔细看会发现是个文件上传界面,直接写个一句话木马上传
    4
    发现会返回地址,并提示flag就在那里

    直接去访问
    5
    可以看到提示too slow

    这里就要用到条件竞争了,我门可以猜测题意,这里应该是我们成功上传了php文件但后端在短时间内将其删除了,所以我们要抢到在它删除之前访问文件,就如我们打开文件的时候去删除它,会提示文件文件已打开一样,这样从而防止文件被删除

    多提交几次发现签名的那串数字是没有变化的,ok这时候我们可以写个脚本,也可以利用burp的爆破模块一直去访问

    burp的时候设置爆破模块,选择一个不影响的参数来用,这里我选择的是user-agent
    6
    然后payload选择选择数字自动增长,调整时间参数,让其不用又间隔
    7
    结果没能成功…还是太慢了?
    后面我看了别人的博客,他是开了两个爆破模块,一个是不断上传文件,一个是不断去访问文件(这里我发现别人用的是NUll payload,这个比我的数字应该是要好很多了…)
    这样终于成功抓到了包,看到了flag
    8
    这道题还是挺有意思的,大部分条件竞争的题是,通过竞争不让文件被删除,然后一句话木马去连接,这里却最后还是被删除了
    而且这里是需要不断上传和访问相结合,这也是第一次遇到吧…

    总结

    条件竞争除了上面文件上传的例子还有数据库的漏洞(数据库这个我感觉重视程度一般都会比较高吧,我记得以前看一些开发的视频讲数据库都会涉及到数据安全的问题,讲到原子操作吧,毕竟数据库涉及到一些交易上的问题)

    这里也可以参考下面的博客
    Web中的条件竞争漏洞
    条件竞争

    这里对于文件上传的条件竞争我还是有点疑惑的,
    我看别的博客给的解决方案是:一定要经过充分完整的检查之后再上传
    我不太理解这里的检查之后再上传,毕竟文件检查不在后端检查只靠前端显然是不行的吧,所以这里怎么来防止条件竞争并没有一个好的思路…
    然后靶场中条件竞争的题目有些少感觉也没有充分的完成一个锻炼,后面遇到了再补充吧

    参考

    1. Race Conditions/条件竞争
    2. WEB-CTF 条件竞争
    3. Moctf–没时间解释了
    4. Web中的条件竞争漏洞
    5. 条件竞争
    展开全文
  • CTF条件竞争

    千次阅读 2020-02-10 14:15:08
    条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现 bug。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会...

    简介

    条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现 bug。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会产生条件竞争漏洞。

    个人理解

    通俗的来讲就是假设程序同时处理存钱和取钱,当取钱"速度"大于存钱时,可能就会出现取钱后程序还未来得及将金额减少,程序又立马处理存钱,由此产生非预期的结果。

    竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。 ——Wikipedia-computer_science

    实例

    1.文件上传+条件竞争
    一般是上传文件,绕过防护之后,小马又会被立马删除。但是由于文件存在过,我们可以利用python脚本不断访问shell,这样就形成了python脚本和web删除程序之间的竞争,一定的测试量后,可以竞争到资源,执行shell,从而得到flag。

    2.Session+条件竞争
    服务器通过session对请求顺序建立了锁,因此我们需要多个session,使用两个浏览器登录同一个账户即可。在将IP改为8.8.8.8时,有短时间的网络请求堵塞,我们在这个时间段,使用另一个session提交请求,即可通过验证,成功将IP改8.8.8.8,然后获得flag。

    3.hgame-2020-Cosmos的二手市场
    在这里插入图片描述
    因为卖东西会收取手续费,正常情况下我们不可能会赚钱。我们可直接利用burpsuite低线程买入,高线程卖出,一次性买入100,卖出200;买入的线程50,卖出的线程100即可。

    那么怎么设置线程数呢??
    intruder—>Options下,将线程设置成50
    在这里插入图片描述
    在这里插入图片描述

    漏洞修复

    1.对于数据库的操作,比较正统的方法是设置锁
    2.对于文件上传,“引狼入室”的方法不可取,最好先进行充分的检测,再上传到服务器。

    参考

    条件竞争
    测试Web应用程序中的竞争条件

    展开全文
  • 条件竞争漏洞

    千次阅读 2018-12-17 18:27:14
    条件竞争:系统中,最小的运算调度单位是线程,而每个线程又依附于一个进程,条件竞争则是多进程 或多线程对一个共享资源操作,因为操作顺序 不受控的时候所产生的问题。 进程:进程是为了更好的利用CPU的资源;...

    条件竞争:系统中,最小的运算调度单位是线程,而每个线程又依附于一个进程,条件竞争则是多进程 或多线程对一个共享资源操作,因为操作顺序 不受控的时候所产生的问题。

    进程:进程是为了更好的利用CPU的资源;进程是系统进行资源分配和调度的一个独立单位;每个进程都有自己的独立内存空间,不同进程 通过进程间通信来通信;由于进程比较重要,占据独立的内存,所以上 下文进程间的切换开销(栈、寄存器、虚拟内 存、文件句柄等)比较大,但相对比较稳定安 全。

    线程:线程的是为了降低上下文切换的消耗,提高系 统的并发性,并突破一个进程只能干一样事的 缺陷,使到进程内并发成为可能。 线程是进程的一个实体,是CPU调度和分派的基 本单位,它是比进程更小的能独立运行的基本单 位。线程自己基本上不拥有系统资源,只拥有一点在 运行中必不可少的资源(如程序计数器,一组寄 存器和栈),但是它可与同属一个进程的其他的 线程共享进程所拥有的全部资源。 线程间通信主要通过共享内存,上下文切换很 快,资源开销较少,但相比进程不够稳定容易 丢失数据。

    协程:协程通过在线程中实现调度,避免了陷入内核 级别的上下文切换造成的性能损失,进而突破 了线程在IO上的性能瓶颈。协程拥有自己的寄存器上下文和栈。 程调度切换时,将寄存器上下文和栈保存到其 他地方,在切回来的时候,恢复先前保存的寄 存器上下文和栈,直接操作栈则基本没有内核 切换的开销。

    并发编程:并发编程在实际情况是为了提高执行效率,提高系统的利用率。 

    条件漏洞成因:

    当一个系统运行结果依耐于不可控的事情的先 后顺序的时候,就可能发生竞争。 

    往往程序员可能无法注意到这些事情,因为在 编写程序的时候,往往认为程序一条线执行下 来,但是一个线程在运行中是可能被随时打断 ,并且挂起,然后去执行其他线程的逻辑。导 致出现了设计人员意料之外的情况,最终出现 bug。

    漏洞产生条件:task1先对共享的空间进行了一个安全性检查,检查完之后,task2紧 接着修改了共享空间的内容,导致task1的安全性检查边的不可控, 甚至可以是一个不安全的数据,然而再次在获取数据的时候,就可能 出现预期之外的情况,严重的可能导致程序执行流被劫持。 

    但是在程序员的角度,从check到get这个过程中共享空间的内容是 不会变的,但是对于多线程来说,这个是未知的。

    并发,即至少存在两个并发执行流

           这里的执行流包括线程,进程,任务等级别的执行流

    共享对象,即多个并发流会访问同一对象

          常见的共享对象有共享内存,文件系统,信号,这些 共享对象是用来使得多个程序执行流相互交流。

    改变对象,即至少有一个控制流会改变竞争对象 的状态。

          因为如果程序只是对对象进行读操作,那么并不会产 生条件竞争。

     

    竞争条件示例分析

    我们的程序的总体流程如下:

    我们看看 init_main()函数:

    Login函数 :从逻辑上可以看出,read(0, share_buf, 0x100)是先让用户输 入了一个password,长度可以为0x100,然后将这个数据保 存到&share_buf 中,&share_buf 是局部变量,保存在栈上 的bss段上 。再通过pthread_create创建一个check_password的函数去 检测&share_buf 中保存的password是否为一个合法的值

    binary乍一看没有什么逻辑上的问题,唯一调 用的危险函数只有strcpy,但是前面也根据长度,动态的在栈上开辟空间,这也就导致这儿 正常逻辑下无法溢出。

    这里需要注意的是,bss上的share_buf是作 为参数传递给check_password的 。也就是说,主线程和子线程共同操作同一块内 存空间 。如果在子线程调用alloc之后,调用strcpy之前 通过主线程去修改位于bss段上的share_buf 的话,就可以在strcpy出产生溢出。

    然后在程序中,子进程的的strcpy之前有一个 sleep(1)这个操作 。导致了alloc到strcpy之间有足够的时间让主线 程去修改共享变量 。例如将共享变量share_buf里面的数据长度改的超 过一开始alloc的长度,这样就会造成栈溢出。

    checksec发现这个程序开启了canary,所以直接 溢出覆盖返回值是不行的,无法劫持程序流 。 但是如果登陆成功,程序会自动起一个shell,如 果想要登陆成功,就需要控制strncmp返回值为0 。 要么就是控制dest的地址指向password,要么就 是控制n为0

    控制dest是不行的,因为dest指向的是stack上,stack的 地址一般是一般是0x7f开头的,而password的地址为 0x06020E0又是通过strcpy复制过去的,不能有过多的 \x00,所以这里覆盖dest是不可行的

    可以利用strcpy会在结尾加\x00的特性去覆盖n,使得n的 值为0,这样也可以成功的时候strncmp返回0,以达到绕 过登陆的目的。

     

     

     

     

     

     

     

     

    展开全文
  • Web条件竞争

    千次阅读 2018-04-19 16:59:32
    最近,正好操作系统课上正在学进程的竞争关系,再加上寒假安恒杯2月赛上有道web题考到了条件竞争漏洞的利用,所以就系统的学习和总结下条件竞争漏洞。一. 漏洞成因:线程编程中,为了保证数据操作的一致性,操作...

      最近,正好操作系统课上正在学进程的竞争关系,再加上寒假安恒杯2月赛上有道web题考到了条件竞争漏洞的利用,所以就系统的学习和总结下条件竞争漏洞。

    一. 漏洞成因:

    线程编程中,为了保证数据操作的一致性,操作系统引入了锁机制,用于保证临界区代码的安全。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。

    临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。

    竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

    二.条件竞争实例:

    程序中多个线程之间就产生了资源竞争,这种情况发生了多次,于是最后的结果就和我们的预期不一样了。

    三.Web中的条件竞争

    Web服务器处理多用户请求时,是并发进行的,如果并发处理不当或者是相关的逻辑操作设计的不合理时,就可能导致条件竞争漏洞。

    一个简单的例子:

    将文件上传到服务器,然后检查上传的文件的类型,如果不符合条件就删除。

    但是,如果我们采用多线程的方式访问上传的文件,总有一次我们在文件删除之前就访问到了这个文件,如果这个文件是php的一句话木马,就在服务器中执行了shell了哈

    具体代码和利用脚本如下:

    前端代码:

    <html>

    <head>

    <metahttp-equiv="Content-Type" content="text/html;charset=utf-8">

    <tile>条件竞争漏洞实例</tile>

    </head>

    <h3align="center">文件上传</h3>

    <formmethod="post" action="upload.php"enctype="multipart/form-data">

        <table border=0 cellspacing=0cellpadding=0 align="center" width="100%">

        <tr>

            <td height="17">

            <input name="file"type="file" value="浏览">

            <input type="submit"name="file" value="上传">

            </td>

        </tr>

        </table>

    </form>

    </html>

    后端php代码:

    <?php

        $allowtype =array("gif","png","jpg");

        $size = 10000000;

        $path = "./";

     

        $filename = $_FILES['file']['name'];

     

        if(is_uploaded_file($_FILES['file']['tmp_name'])){

            if(!move_uploaded_file($_FILES['file']['tmp_name'],$path.$filename)){

                die("error:can notmove!");

            }  

        } else {

            die("error:not an upload file");

        }

     

        $newfile = $path.$filename;

        echo "file upload success.file pathis: ".$newfile."\n<br />";

     

        if ($_FILES['file']['error'] > 0){

            unlink($newfile);

            die("Upload file error: ");

        }

     

        $ext =array_pop(explode(".",$_FILES['file']['name']));//array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一,explode()函数把字符串打散为数组。

        if (!in_array($ext,$allowtype)){

            unlink($newfile);

            die("error:upload the file type isnot alloweddelete the file");

        }

    ?>

    四.CTF实战

    题目地址:

    http://202.119.201.199/challenge/web/uploadfile/

    先随便上传个图片文件,发现能够上传成功,显示要上传可执行文件

    上传一个包含一句话木马的可执行的 php 文件

    发现第三层防护,存在黑名单文件类型过滤,尝试绕过哈

    发现使用.phtml能够绕过。

    发现上传的文件被杀软查杀了,是上传成功才被查杀的,考虑利用条件竞争漏洞

    利用pythonrequests库写一个多线程并发访问的脚本

    import requests

    url ="http://202.119.201.199/challenge/web/uploadfile/upload/2.phtml"

    while True:

        r =requests.get(url)

        if 'flag' inr.text:

            printr.text
    参考资料:https://www.0dayhack.com/post-666.html
              SKSEC公众号
    展开全文
  • Race Conditions/条件竞争

    千次阅读 2018-11-09 10:42:24
    最近,做题总是碰到条件竞争,总结一波,菜鸡一只,大佬自行忽视。 原理 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不...
  • 浅谈条件竞争漏洞及利用 0x01 前言 最近看到了两三个关于条件竞争的例子,正好hgame上有一个类似的题目,这里就直接把这个知识点弄得明白点,因此就有了浅谈条件竞争漏洞。。 0x02 正言 条件竞争漏洞是一种服务器端...
  • 关于条件竞争漏洞(Race Conditions)

    千次阅读 2019-04-29 18:05:45
    条件竞争:系统中,最小的运算调度单位是线程,而每个线程又依附于一个进程,条件竞争则是多进程 或多线程对一个共享资源操作,因为操作顺序 不受控的时候所产生的问题。 进程:进程是为了更好的利用CPU的资源;...
  • 文件上传-条件竞争-DoraBox

    千次阅读 2020-01-06 17:07:32
    一、条件竞争的概念 发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中 二、文件上传-条件竞争源码 三、文件上传-条件竞争漏洞使用方法 我门可以猜测源码,这里应该是我们...
  • Upload-labs Pass-17 Pass-18 条件竞争

    千次阅读 2019-11-05 09:52:11
    Pass-17 条件竞争1 看下源码,感觉啥漏洞都没,只能查看writeup的提示了,答案是条件竞争。 $is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = array('jpg','png','gif'); $file_name =...
  • 小结一下Web的条件竞争的题目

    千次阅读 2018-03-10 20:15:39
    条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。 简单点理解就是在你要做一件事情的时候...
  • upload-labs 17(条件竞争

    千次阅读 2018-11-09 19:38:40
    题目 查看代码 分析,该代码先将文件上传到...可以通过条件竞争的方式在unlink之前,访问webshell。 首先在burp中不断发送上传webshell的数据包 然后不断在浏览器中访问,可以通过竞争访问到文件。 ...
  • 条件竞争漏洞 . 介绍 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,将会导致此类问题的发生 原理 上传文件源代码里没有校验...
  • CTF-【NSCTF 2015】WEB11 条件竞争

    千次阅读 2020-12-21 15:45:42
    条件竞争是指多进程/多线程情况下对于共享资源没有加锁,导致的问题。 源代码 <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>NSCTF</...
  • c++并发编程中由static类型变量引起的条件竞争问题
  • 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。 实验环境: PHPstudy Burp Suite抓包...
  • WEB-CTF 条件竞争

    千次阅读 2018-10-24 16:36:20
    另一方面,使用python不断的访问我们提交的文件,从条件竞争的方向来看,会使得我们有机会访问到我们的文件,最后得到flag import requests url = '你的文件路径' while 1: r = requests.get(url) if 'moctf'...
  • Upload-labs 17 条件竞争

    2020-01-13 13:34:39
    查看源码 $is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = array('jpg','png','gif'); $file_name = $_FILES['upload_file']['name'];... $temp_file = $_FILES['upload_file']['t...
  • Upload-labs 18 条件竞争——通关

    千次阅读 2020-01-13 14:30:58
    中国菜刀连接即可 第二种:不使用python脚本 burpsuite与第一种方法一样,无限重放数据包,在无限重放数据包的同时,要一直访问shell.php.7z文件 直到出现如下界面,说明竞争成功,成功执行shell.php.7z生成shell2....
  • Pass18 条件竞争 条件竞争:在Web安全中,大致就是检测文件后缀,不符合条件,就删除。这种方式。所以我们使用多线程并发去访问该文件。总会碰到在删除文件这个时间段之前访问到PHP文件。一旦成功访问,就说明写了一...
  • 竞争条件

    千次阅读 2017-12-09 20:44:02
    什么是竞态条件官方的定义是如果程序运行顺序的改变会影响最终结果,这就是一个竞态条件(race condition). 理解竞态条件首先要知道程序运行不一定是线性的。初学编程的时候都是从“面向过程编程“开始的,一条一条...
  • 动态竞争条件下的竞争策略PPT以不断创造出更好生存和发展的条件及优势为核心,最大限度实现企业自身价值...该文档为动态竞争条件下的竞争策略PPT,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 动态竞争条件下的竞争策略.ppt
  • 竞争条件和关键区

    千次阅读 2016-01-27 22:06:54
    竞争条件是一个可能发生在关键区域的特殊条件。关键区是由多线程执行的一个代码区,多线程一系列的并发执行关键区导致不同结果。多线程执行执行关键区的结果的不同和线程执行的顺序有关,关键区就被认为包含竞争条件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,439
精华内容 88,575
关键字:

条件竞争