从早期的在线商店开始:
在购物车的数量字段中输入“.1”,可以获得90%的折扣。软件会正确计算总费用为“.1 * cost”,而打包订单的人只是忽略了数量前面奇怪的“.”。
最令人无法容忍的安全漏洞,而且很常见、很容易被发现的是Google黑客。比如:
http://www.google.com/search?q=inurl%3Aselect+inurl%3A%2520+inurl%3Afrom+inurl%3Awhere
让人惊奇的是,互联网上有多少页面,特别是政府网站,通过查询字符串传递了一个SQL查询。这是最糟糕的SQL注入形式之一,而且根本不需要花费任何精力就能找到易受攻击的站点。
稍加调整,我已经能够找到未受保护的phpMyAdmin、未受保护的MySQL安装程序、包含用户名和密码的查询字符串等。
<Cthon98> hey, if you type in your pw, it will show as stars
<Cthon98> ********* see!
<AzureDiamond> hunter2
<AzureDiamond> doesnt look like stars to me
<Cthon98> <AzureDiamond> *******
<Cthon98> thats what I see
<AzureDiamond> oh, really?
<Cthon98> Absolutely
<AzureDiamond> you can go hunter2 my hunter2-ing hunter2
<AzureDiamond> haha, does that look funny to you?
<Cthon98> lol, yes. See, when YOU type hunter2, it shows to us as *******
<AzureDiamond> thats neat, I didnt know IRC did that
<Cthon98> yep, no matter how many times you type hunter2, it will show to us as *******
<AzureDiamond> awesome!
<AzureDiamond> wait, how do you know my pw?
<Cthon98> er, I just copy pasted YOUR ******'s and it appears to YOU as hunter2 cause its your pw
<AzureDiamond> oh, ok.
来自bash.org
微软创业初期的真实故事。
当你醒来并看到 ZDNet.com 早上的头条是 "有史以来最严重的Internet Explorer安全漏洞已在 'Blah' 中发现",而 'Blah' 则是你六个月前编写的代码时,你才会真正感到恐惧。
我一到公司就立刻检查了变更日志,发现我们信任对产品进行更改的另一个团队中的某人竟然签出了我的代码,更改了一堆安全注册表键设置,没有任何合理原因就把代码提交回去,并没有接受任何代码审查或告诉任何人。至今我仍不知道他到底在想什么;他很快离开了公司。(自愿离职)
(更新:针对评论中提出的问题,以下为几点回应:
首先,请注意我选择采取慈善的态度,认为安全键的更改是无意的、出于粗心或不熟悉的缘由,而非恶意。我没有证据证明正反面,但认为将错误归因于人类的缺陷是明智之举。
其次,我们的代码审核系统现在比十二年前强得多得多。例如,现在不可能在没有将更改列表发送给有关方面的情况下提交代码。特别是,在发货周期后期进行的更改具有许多围绕它们的“过程”,以确保进行正确的更改以确保产品的稳定性和安全性。)
无论如何,这个漏洞是一个对象被错误地标记为“可用于从Internet Explorer中使用”的“安全脚本”。该对象能够将二进制文件 - OLE自动化类型库,实际上 - 写入任意磁盘位置。这意味着攻击者可以编写一个包含某些具有敌对行为的字符串的类型库,将其保存到已知的执行位置路径中,并给它赋予导致脚本运行的扩展名,然后希望某种方式下用户会意外运行代码。我不知道是否有任何成功的“真实世界”攻击使用了这个漏洞,但可以利用它来创建一个有效的攻击。
我们很快为此发布了一个补丁,让我告诉你。
我曾经发现并修复了许多JScript中的安全漏洞,但它们中没有一个曝光得像这个那样广泛。
我希望您能发现这里有什么问题(实际上是非常严重的):
String emailBody = "";
for (int i = 0; i < subscribers.Count; i++)
{
emailBody += "Hello " + subscribers[i].FirstName + ",";
emailBody += "this is a reminder with your account information: \n\n:";
emailBody += "Your username: " + subscribers[i].Username + "\n";
emailBody += "Your password: " + subscribers[i].Password + "\n";
emailBody += "Have a great day!";
emailDispatcher.Send(subscribers[i].EmailAddress, emailBody);
}
最后一个接收者是最开心的 ;)
旧的IBM System 36呆板终端有一个键盘组合键开始宏记录。因此,当终端没有登录时,您可以开始记录宏并将其保留在该位置。下次有人登录时,按键将记录在宏中,并在记录到达最大允许键数时自动结束录制。稍后回来并重放宏以进行自动登录。
我见过的最糟糕的漏洞是一个网络应用程序的错误,当您提供空用户名和密码时,会以管理员身份登录 :)
曾经在一个网站的URL上注意到这一点。
http://www.somewebsite.com/mypage.asp?param1=x¶m2=y&admin=0
将最后一个参数改为admin=1给了我管理员特权。如果你要盲目信任用户输入,请至少不要透露出你正在这样做!
我在The Daily WTF上看到了这个。
<script language="javascript">
<!--//
/*This Script allows people to enter by using a form that asks for a
UserID and Password*/
function pasuser(form) {
if (form.id.value=="buyers") {
if (form.pass.value=="gov1996") {
location="http://officers.federalsuppliers.com/agents.html"
} else {
alert("Invalid Password")
}
} else {
alert("Invalid UserID")
}
}
//-->
</script>
在我看来,没有什么比这更好了。