部分翻译预览(新增“译者序”部分可跳过直接到正文):
author:Pravinrp
translator:陈殷
本文关键词:Race Condition Vulnerability
【译者序:这是一个竞争条件漏洞的示例 By Wenliang Du at Syracuse University】
/* vulp.c */
#include
#include
#define DELAY 10000
int main()
{
char * fn = "/tmp/XYZ";
char buffer[60];
FILE *fp;
long int i;
/* get user input */
scanf("%50s", buffer );
if(!access(fn, W_OK)){
/* simulating delay */
Laboratory for Computer Security Education 2
for (i=0; i < DELAY; i++){
int a = iˆ2;
}
fp = fopen(fn, "a+");
fwrite("\n", sizeof(char), 1, fp);
fwrite(buffer, sizeof(char), strlen(buffer), fp);
fclose(fp);
}
else printf("No permission \n");
该示例将用户输入字符串附加到临时文件/tmp/XYZ的末尾。由于代码使用root权限,所以它将检查用户是否实际上具有对文件/tmp/XYZ的访问权限。实际上,这是access()调用的主要目的。一旦程序验证了目标用户具有该特权,该程序将打开文件并将用户输入写入文件。
乍一看该程序似乎很不错。但是,它包含一个竞争条件漏洞。由于检查(access) 和使用(fopen)之间的窗口(the simulated delay) ,虽然它们共享文件名,但访问所使用的文件可能与fopen使用的文件不同/tmp/XYZ。可以使/tmp/XYZ为指向/etc/shadow的符号链接的恶意攻击者,可能导致用户输入附加到/etc/shadow。该程序以root权限运行,会可以覆盖任何文件。
漏洞危害:
一旦入侵者使用竞争条件攻击破坏了系统,就可以更改,操纵或窃取数据,更改权限,插入恶意代码,释放拒绝服务(DoS)攻击并停用安全控制。竞争条件攻击也可能包含API。在一个引人注目的案例中,FBI报告说,攻击者使用这种方法从位于加利福尼亚和内华达州的赌场通过现金提款自动柜员机从花旗银行窃取了超过100万美元。攻击者在60秒的时间内发送了几乎相同的查询。
正文:
我最近在Bug赏金计划中发现了RACE条件漏洞。
当设计为按特定顺序处理任务的计算系统被迫同时执行两个或多个操作时,就会发生条件竞争攻击。最终,应用程序被迫执行意外动作。这将导致应用程序进行安全利用。
在这个项目中,每个创建好的管理员在其团队中只能新增3个三个成员。
但是,我通过使用RACE条件竞争漏洞创建了4个团队成员。
我遵循的步骤是:
1.单击添加团队成员按钮发出请求并使用burp捕获该请求
2.” 邮件和姓名”将会作为被攻击字段以利用条件竞争漏洞。
3.接下来,我们需要配置intruder来准备进行RACE条件竞争攻击。
首先我们需要设置屏幕截图中所示的参数值。
现在我们需要更改发送请求的线程数。这一步是最重要的一步,线程设置得高一些,发送到服务器请求包速率就越大。
4.现在,在intruder选项中单击“attack”。
5.Burp将在点击的一瞬间向服务器发送请求。由于存在RACE条件竞争漏洞,我成功地添加了4个团队成员。现在,我的团队中共有4位团队成员。(脱敏处理过的截图)
成功利用!