C 当试图手动触发竞赛条件时,ln失败
这只是一种锻炼。我不是想利用什么东西… 我有一个setuid玩具程序要利用(反编译版本): 但我从脚本中得到以下错误:C 当试图手动触发竞赛条件时,ln失败,c,race-condition,exploit,C,Race Condition,Exploit,这只是一种锻炼。我不是想利用什么东西… 我有一个setuid玩具程序要利用(反编译版本): 但我从脚本中得到以下错误: ln: failed to create symbolic link '/tmp/expolitme': File exists ln: cannot remove '/tmp/expolit': No such file or directory 我已经使用了ln的-f选项来强制创建符号链接。为什么会出现这些错误?问题在于调用ln的方式--同时调用多个实例。ln“强制”符号
ln: failed to create symbolic link '/tmp/expolitme': File exists
ln: cannot remove '/tmp/expolit': No such file or directory
我已经使用了
ln
的-f选项来强制创建符号链接。为什么会出现这些错误?问题在于调用ln
的方式--同时调用多个实例。ln
“强制”符号链接的方式是,它取消链接(删除)目标并重新创建它。但是您同时调用了多个ln
实例,这会导致与对ln
的其他调用产生竞争条件。因为一个或多个实例取消了与tmp/exploitme
的链接,但其他一些实例已经创建了新的/tmp/exploitme
;所以“文件存在”。如果不在后台生成多个ln
实例,则不会观察到此问题
让我们用两个实例来展示一个示例:A和B
Instance A Instance B
Calls ln Calls ln
Deletes /tmp/expolitme if exists Deletes /tmp/expolitme if exists
Creates /tmp/expolitme
Creates /tmp/expolitme
(File exists - because A created it already)
错误源于脚本,而不是C程序,对吗?Post应该标记为Linux、脚本。不是Cyes,错误来自脚本,C代码与文章完全无关。同样奇怪的是,您在创建漏洞时公开请求帮助。这只是一个练习。我不是想利用什么。。。对不起,我应该指出这一点。
ln: failed to create symbolic link '/tmp/expolitme': File exists
ln: cannot remove '/tmp/expolit': No such file or directory
Instance A Instance B
Calls ln Calls ln
Deletes /tmp/expolitme if exists Deletes /tmp/expolitme if exists
Creates /tmp/expolitme
Creates /tmp/expolitme
(File exists - because A created it already)