我们来讲故事……
首先你要知道任何一个Online Judge在评测的时候,肯定是先编译再运行。
然后我们知道程序是不能随便打开文件的。
但是!请注意这个很大的“但是”。编译环节是肯定要打开文件的。比如:
#include <iostream>
int main()
{
return 0;
}
那么一定要打开iostream文件把文件内容全部贴进来。
这个时候机会来了:
#include </etc/passwd>
int main()
{
return 0;
}
废话,当然会CE。但是CE的时候编译器会显示错误部分的源代码的对不对?
如果测评时编译环节以root身份运行,就可以套出root密码的hash值。
#include </var/www/JudgeOnline/index.php>
int main()
{
return 0;
}
就可以套出网页源代码的前几个字节。(当然这个没多大用啦……因为php代码很难被看成C++代码,然后套出来的差不多是"<?php"这样的 = =……)
其实是大约几个星期以前我在写
UOJ的测评的时候发现的这个漏洞。然后试了试其它OJ……有些知名OJ居然直接就中招了……= =……有两个OJ我直接就拿到了root密码的哈希值……
所以我赶紧修补UOJ上的这个漏洞……我的方法是直接把编译器整个监控起来。
唔……我不知道还有多少小OJ存在这个问题?
现在公布出来,写OJ的同仁们发现自己的OJ有这个漏洞的就赶快修补吧 = =……
最后想问一个问题,学黑客技术哪家强?
最后想问一个问题,学黑客技术哪家强?