你见过的最糟糕的安全漏洞是什么?为了保护罪犯,限制细节可能是个好主意。

不管怎样,这里有一个关于如果你发现了安全漏洞该怎么办的问题,还有一个关于如果公司(似乎)没有回应该怎么办的问题。


当前回答

一个让我害怕的安全漏洞是在我曾经维护的一个遗留应用程序中,其中有一个settings.ini文件,其中的数据库凭据是纯文本的,所有用户密码都以纯文本的形式存储在数据库中。

我见过的大多数安全漏洞都发生在我的高中和大学。

首先,我发现我可以通过(非常简单的)ping flood攻击来关闭学校的互联网。不仅仅是我高中的互联网,整个学校系统,包括大学的一部分。绝对没有速率限制。在我演示之后,他们最终把它修好了。(顺便说一句,我的第一份编程工作就是靠这种“宣传”获得的)

第二点,也是可能性更大的一点是:

Ok, so every computer in the school was connected to a domain and such. So, when you logged onto a computer, it would copy down a generic user directory(including application data, etc folders) and then proceed with the login. Some people had their own logins other than the generic "student" account for one reason or another. Well, while I was browsing the public server where everything was shared on, I found a /users directory. Upon looking at it I discovered froma generic student account I had read-write to every users directory, including teachers, administrator, and the generic student account.

为了愚人节,我计划写一个简单的批处理文件或小程序,弹出一些类似Class of 09 rocks的东西!登陆每个人只是为了演示它,但我退缩了。我也从来没有告诉过管理员,所以这个安全漏洞可能仍然存在。

其他回答

不是最坏的,但也足以造成一些真正的损害。你会惊讶于这一点被忽视的频率有多高。特别是当人们使用这些流行的框架时,

yourwebapp.com/items/edit.php?id=4
yourwebapp.com/items/delete.php?id=4

不确定项的所有者是请求页面的人。 也就是说,你可以登录你的账户,然后在整个应用程序中编辑或删除任何人的项目。

一个简单的检查可以防止很多损坏。

$item = // find your item by the $_GET[ 'id' ];

if( $_SESSION[ 'user_id' ] != $item[ 'user_id' ] ){
  // kick em out they dont belong...
}

我的朋友曾经用PHP编写了一个论坛脚本。密码保存为一个名为pass.txt的纯文本文件。当然,每个人都可以访问那个文件。

对我来说,最糟糕的,最可怕的,最危险的,犯罪的疏忽,但在彻底破坏整个系统的安全方面,奇怪的优雅总是来自the Daily WTF:

客户端PHP

function saveform()
{
  var firstName = escapeSql(mainForm.elements.txtFirstName.value);
  var lastName = escapeSql(mainForm.elements.txtLastName.value);
  /* ... */
  var offerCode = escapeSql(mainForm.elements.txtOfferCode.value);

  var code =
  '  $cn = mssql_connect($DB_SERVER, $DB_USERNAME, $DB_PASSWORD)           ' +
  '          or die("ERROR: Cannot Connect to $DB_SERVER");                ' +
  '  $db = mssql_select_db($DB_NAME, $cn);                                 ' +
  '                                                                        ' +
  '  if (mssql_query("SELECT 1 FROM APPS WHERE SSN=\''+ssn+'\'", $cn)) ' +
  '  { $ins = false; }                                                     ' +
  '  else                                                                  ' +
  '  { $ins = true; }                                                      ' +
  '                                                                        ' +
  '  if ($ins) {                                                           ' +
  '    $sql = "INSERT INTO APPS (FIRSTNM, LASTNM, ..., OFFERCD) VALUES ("; ' +
  '    $sql+= "\''+firstName+'\',";                                        ' +
  '    $sql+= "\''+lastName+'\',";                                         ' +
  '    $sql+= "\''+offerCode+'\')";                                        ' +
  '                                                                        ' +
  '  /* ... */                                                             ' +
  '                                                                        ' +
  '  mssql_query($sql, $cn);                                               ' +
  '  mssql_close($cn);                                                     ';

  execPhp(code);
}

就盯着它看一分钟。想想你所能做的一切。女士们先生们,这是洛夫克拉夫特的杰作。

在密码数据输入元素中没有控制逻辑操作符(OR)。通过使用它,每个人都可以很容易地通过其他的条件。对于,select查询将像这样:

select *
from TheTable
where UserName=@id And Password=@pass OR 1=1

XSS是我喜欢在网站上找到的东西。

下面是我的发现日志的链接:

所有:http://xssed.com/archive/author=Dr.Optix

只有特色菜:http://xssed.com/archive/special=1/author=Dr.Optix/

祝你浏览愉快!