本文主要针对应用层面出现的一些条件竞争案例和原理讲解,希望能给各位大佬们在挖洞的
过程中增添一点思考。
什么是条件竞争漏洞?
基础概念:多个进程与此同时访问相同共享代码、变量、文件等,而不进行锁操作或同步操作时
,会产生条件竞争。开发人员在进行代码开发时,通常倾向于认为代码将以线性方式执行,而忽
略了并行服务器将与此同时执行多个进程,从而导致意外的结果。看看以上代码,猜一猜程序运
行后,您的余额还有多少?下面的图是否与运行逻辑相同?如有,祝贺你!这段代码运行的逻辑
和结果告诉我们,当两个进程与此同时进行存取操作时,可能会导致出现错误的余额,也就是说
,它们之间存在着一种条件竞争。
,会产生条件竞争。开发人员在进行代码开发时,通常倾向于认为代码将以线性方式执行,而忽
略了并行服务器将与此同时执行多个进程,从而导致意外的结果。看看以上代码,猜一猜程序运
行后,您的余额还有多少?下面的图是否与运行逻辑相同?如有,祝贺你!这段代码运行的逻辑
和结果告诉我们,当两个进程与此同时进行存取操作时,可能会导致出现错误的余额,也就是说
,它们之间存在着一种条件竞争。
因此,我们如何避免上述条件竞争(条件竞争一般修正)?
当然,您不希望您的银行存款莫名其妙地变成负数,因此,我们必须确保当1个进程修改balance
时,其他进程不能更改。上述示例将会为change_it()设置1个锁,如果我们想确保balance是正确
的,那么就需要为change_it()设置1个锁,当1个进程开始执行change_it()时,我们会说,这个进
程因为获得了锁,所以其他进程不能与此同时执行change_it(),而只能等待,直到锁被释放,获
得锁之后再更改。因为锁只有一个,而不管多个进程,同一时刻最多只能有一个进程持有锁,因
此,不会导致修改冲突。应用threavested.Lock()完成能够建立以下锁:实际的代码顺序和结果
以下:0x02能够利用条件竞争做什么?以上介绍的python代码的一小部分中介绍了条件竞争及其
常见的修复方法,那么hacker能够如何利用条件竞争呢?正如上面所示:领券,与此同时抽奖,
以及其他各种支付漏洞,另外还可以用于文件上传,系统提权等等,当然,肯定不仅仅限于此
~。应用条件竞争案例。
时,其他进程不能更改。上述示例将会为change_it()设置1个锁,如果我们想确保balance是正确
的,那么就需要为change_it()设置1个锁,当1个进程开始执行change_it()时,我们会说,这个进
程因为获得了锁,所以其他进程不能与此同时执行change_it(),而只能等待,直到锁被释放,获
得锁之后再更改。因为锁只有一个,而不管多个进程,同一时刻最多只能有一个进程持有锁,因
此,不会导致修改冲突。应用threavested.Lock()完成能够建立以下锁:实际的代码顺序和结果
以下:0x02能够利用条件竞争做什么?以上介绍的python代码的一小部分中介绍了条件竞争及其
常见的修复方法,那么hacker能够如何利用条件竞争呢?正如上面所示:领券,与此同时抽奖,
以及其他各种支付漏洞,另外还可以用于文件上传,系统提权等等,当然,肯定不仅仅限于此
~。应用条件竞争案例。
例1:某生活APP利用条件竞争刷红包。
1个新App推出了新的领红包活动,新的用户能够免费领到1个红包,利用Fiddler抓包,然后将数
据包复制和拦截几百次后全部一起释放,就可以领到很多很多红包,这就是条件竞争漏洞造成的。
据包复制和拦截几百次后全部一起释放,就可以领到很多很多红包,这就是条件竞争漏洞造成的。