什么是条件竞争漏洞? 在渗透某APP时如何检测




      本文主要针对应用层面出现的一些条件竞争案例和原理讲解,希望能给各位大佬们在挖洞的

过程中增添一点思考。
 
什么是条件竞争漏洞?
 
基础概念:多个进程与此同时访问相同共享代码、变量、文件等,而不进行锁操作或同步操作时

,会产生条件竞争。开发人员在进行代码开发时,通常倾向于认为代码将以线性方式执行,而忽

略了并行服务器将与此同时执行多个进程,从而导致意外的结果。看看以上代码,猜一猜程序运

行后,您的余额还有多少?下面的图是否与运行逻辑相同?如有,祝贺你!这段代码运行的逻辑

和结果告诉我们,当两个进程与此同时进行存取操作时,可能会导致出现错误的余额,也就是说

,它们之间存在着一种条件竞争。
 
 
因此,我们如何避免上述条件竞争(条件竞争一般修正)?

 
当然,您不希望您的银行存款莫名其妙地变成负数,因此,我们必须确保当1个进程修改balance

时,其他进程不能更改。上述示例将会为change_it()设置1个锁,如果我们想确保balance是正确

的,那么就需要为change_it()设置1个锁,当1个进程开始执行change_it()时,我们会说,这个进

程因为获得了锁,所以其他进程不能与此同时执行change_it(),而只能等待,直到锁被释放,获

得锁之后再更改。因为锁只有一个,而不管多个进程,同一时刻最多只能有一个进程持有锁,因

此,不会导致修改冲突。应用threavested.Lock()完成能够建立以下锁:实际的代码顺序和结果

以下:0x02能够利用条件竞争做什么?以上介绍的python代码的一小部分中介绍了条件竞争及其

常见的修复方法,那么hacker能够如何利用条件竞争呢?正如上面所示:领券,与此同时抽奖,

以及其他各种支付漏洞,另外还可以用于文件上传,系统提权等等,当然,肯定不仅仅限于此

~。
应用条件竞争案例。
 
 
例1:某生活APP利用条件竞争刷红包。
 
1个新App推出了新的领红包活动,新的用户能够免费领到1个红包,利用Fiddler抓包,然后将数

据包复制和拦截几百次后全部一起释放,就可以领到很多很多红包,这就是条件竞争漏洞造成的。
分享: