你见过的最严重的安全漏洞?

什么是你见过的最严重的安全漏洞? 保持有限的细节可能是一个好主意,以保护有罪。

对于什么是值得的,这里有一个问题 ,如果你发现一个安全漏洞该怎么办,如果公司没有(似乎)回应一些有用的答案。

从网上商店的初期:

通过在购物车的数量字段中input.1获得90%的折扣。 软件正确地计算出总成本为.1 *成本,而人工包装的订单只是简单地掩盖了“奇数”。 在数量前面打包:)

谷歌黑客是最不可原谅的安全漏洞,不幸的是,这是一个非常常见而且容易find的漏洞。 例如:

http://www.google.com/search?q=inurl%3Aselect+inurl%3A%2520+inurl%3Afrom+inurl%3Awhere

令人惊讶的是,互联网上有多less页面,特别是政府网站,通过查询string传递了SQL查询。 这是SQL注入最糟糕的forms,并且find易受攻击的站点也不费吹灰之力。

通过微小的调整,我能够findphpMyAdmin的未受保护的安装,MySQL的未受保护的安装,包含用户名和密码的查询string等。

社会工程学:

<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上的标题那天早上是“ 在Blah发现的最差的Internet Explorer安全漏洞 ”,其中“Blah”是你六个月前自己写的代码。

开始工作之后,我立即检查了更改日志,发现另一个团队中的某个人(我们信任对该产品进行更改的人)已经检出了我的代码,并没有任何理由更改了一些安全registry项设置,检查了它,并从来没有得到代码审查或告诉任何人有关它。 直到今天,我不知道他到底在想什么。 此后不久,他离开了公司。 (他自己的)

(更新:对评论中提出的问题的几点回应:

首先,请注意,我select采取慈善的立场,认为安全关键的变化是无意的,基于疏忽或不熟悉,而不是恶意。 我没有任何证据,并且认为将错误归因于人为的错误是明智的。

其次,我们的支票系统比十二年前更强大得多。 例如,如果没有签入系统将更改列表通过电子邮件发送给感兴趣的团体,现在无法签入代码。 特别是在船舶周期后期做出的改变,周围有很多“过程”,确保正确的改变以确保产品的稳定性和安全性。)

无论如何,这个错误是一个不安全的从Internet Explorer使用的对象被意外地释放为被标记为“安全的脚本”。 该对象能够写入二进制文件 – 事实上,OLE自动化types库到任意的磁盘位置。 这意味着攻击者可以制作一个包含某些恶意代码string的types库,将其保存到一个已知可执行位置的path中,给它一个会导致脚本运行的东西的扩展,并希望用户会不小心运行代码。 我不知道使用这个漏洞的任何成功的“真实世界”攻击,但有可能用它来制定一个有效的漏洞。

我们发了一个相当麻烦的补丁,让我告诉你。

我在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哑terminal具有开始loggingmacros的键盘组合。 所以当一个terminal没有login的时候,你可以开始录制一个macros并把它留在那个位置。 下次有人login时,按键将logging在macros中,录制的最大允许密钥logging将自动结束。 稍后再回来并重播macros以自动登入。

替代文字

我见过的最糟糕的安全漏洞实际上是由你的编码,并导致Google Bot删除我的整个数据库。

当我第一次学习经典ASP时,我编写了自己的基本博客应用程序。 包含所有pipe理脚本的目录由IIS上的NTLM保护。 有一天,我搬到了新的服务器,忘了重新保护IIS中的目录(oops)。

博客主页有一个链接到主pipe理屏幕,主pipe理屏幕有一个删除链接为每个logging(没有确认)。

有一天,我发现数据库中的每条logging都被删除(数百个个人条目)。 我以为有些读者闯入了这个网站,并且恶意地删除了每个logging。

我从日志中发现:Google Bot已经抓取了网站,跟随了pipe理链接,并且继续跟踪所有的DELETE LINKS,从而删除了数据库中的所有logging。 我觉得我应该得到年度聋哑人的奖项,而不经意间被谷歌机器人所破坏。

谢天谢地,我有备份。

我见过的最糟糕的漏洞是在一个Web应用程序中的一个错误,提供一个空的用户名和密码将以pipe理员身份login你:)

一旦注意到这个网站的url。

 http://www.somewebsite.com/mypage.asp?param1=x&param2=y&admin=0 

将最后一个参数更改为admin = 1给了我pipe理员权限。 如果你要盲目的信任用户的input,至less不要电报你正在做的!

我在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> 

没什么可以击败这个恕我直言。

在一所大学里,这些名字都是无名的,他们的所有动作查询都是通过URL而不是表单来传递的。

在Google Bot出现之前,这件事情一直持续不断,他们浏览了所有的URL并擦除了数据库。

惊讶没有人提出了社会工程,但我得到了这篇文章的一个踢。

总结:恶意用户可以购买几十个闪存驱动器,使用自动运行的病毒或特洛伊木马程序加载它们,然后在公司的停车场在深夜洒上闪存驱动器。 第二天,每个人都出现在工作中,偶然发现了shiny的糖果形状,不可抗拒的硬件,并对自己说:“哦,免费的闪存驱动器,我想知道它是什么!” – 20分钟后,整个公司的networking被洗净。

“Pedo mellon a minno” ,“说话的朋友,进入”,在莫里亚的大门上。

微软鲍勃
(信用: 丹的20世纪弃绝 )

如果您第三次input密码错误,系统会询问您是否忘记了密码。

http://img132.yfrog.com/img132/8397/msbob10asignin15.gif

但是不要有安全性,比如继续提示input正确的密码,直到input正确的密码,或者在多次错误的尝试之后将其locking,您可以input任何新的密码,并取代原来的密码! 任何人都可以使用任何密码“受保护的”微软Bob账户来做到这一点

没有需要事先authentication。 他的手段User1可以改变自己的密码,只需忘记密码三次,然后第四次input一个新的密码 – 不必使用“更改密码”。

这也意味着User1可以以完全相同的方式更改User2,User3 …的密码。 任何用户都可以改变任何其他用户的密码,只需忘记三次,然后在提示时input新的密码 – 然后他们可以访问该帐户。

http://img132.yfrog.com/img132/9851/msbob10asignin16.gif

我有乔X的前家庭地址,需要知道他在同一个城市的新的当前地址,但无法与他联系。 我觉得他每天都收到一大堆邮购目录,于是我随意的把800的号码叫做See's Candies(而不是维多利亚的秘密,或者是瑞士殖民地,或者其他的大邮件):

我:“嗨,我是Joe X.我想你已经在我的旧地址和我的新地址两次把邮件列在我的邮件列表中,请问您的电脑是在[旧地址]还是在[假地址] ?”

运营商:“不,我们在[新地址]给你看。”

在文本框中给出1 = 1 列出系统中的所有用户

作为一个应用程序安全顾问的生活有很多常见的问题,让你通过一些东西在网站上的pipe理员。 但真正很酷的部分是,你可以买到价值百万美元的袜子。

这是我的一个朋友,在这个演出上工作,但它的目的是在一个现在非常受欢迎的在线书(和其他所有)商店的项目价格存储在HTML本身作为一个隐藏的领域。 在早期,这个bug占据了很多网上商店,他们刚开始弄清楚networking。 很less有安全意识,我的意思是真正的谁下载的HTML,编辑隐藏的领域,并重新提交订单?

当然,我们把价格改为0,订购了一百万双袜子。 您也可以将价格更改为负值,但这样做会使后端计费软件缓冲区溢出的一部分结束交易。

如果我可以select另一个,它将是Web应用程序中的path规范化问题。 能够做foo.com?file=../../../../etc/passwd真是太好了

提交数据库根密码意外源控制。 这很糟糕,因为它是Sourceforge的源代码控制。

不用说密码变得很快。

关键IT员工离开公司时不要更改pipe理员密码。

虽然这不是我见过的最糟糕的安全漏洞。 但这至less是我自己发现的最糟糕的事情:

有声读物的相当成功的在线商店使用cookie来在成功authentication之后存储当前用户的标识信息。 但是,您可以轻松更改Cookie中的用户标识并访问其他帐户并在其上购买。

在.com时代开始的时候,我在一家大型海外零售商工作。 几个月前,我们的竞争对手推出了一家网上商店,我们非常感兴趣地观看。 当然,我们去尝试一下……并且很快意识到我们的购物车变得混乱起来。 玩了一下查询string后,我们意识到我们可以劫持对方的会话。 有了合适的时间,你可以改变交付地址,但保留单独的付款方式…所有这些后,已经用自己喜欢的物品装满了车。

当我刚刚join我现在工作的公司时,我的老板正在查看一个潜在的新客户现有的电子商务网站。 这是IIS和电子商务的相当初期,我们应该说,安全性并不严格。

长话短说,他改变了一个URL(只是出于好奇),并意识到目录浏览没有closures,所以你可以切断页面名称的URL的末尾,看到所有的文件networking服务器。

我们最终浏览了一个包含我们下载的Access数据库的文件夹。 这是整个电子商务客户/订单数据库,充满了数千个未encryption的信用卡号码。

在 公共 网站 上 发布 密码的人

我十三岁的时候,我的学校为学生开设了一个社交networking。 不幸的是,他们发现了一个安全漏洞,您可以将URI更改为另一个用户ID,例如“?userID = 123”,并为该用户login。 很明显,我告诉我的朋友,最后学校的社交networking充满了色情。

不会推荐它。

我认为超级用户访问的空白用户名/密码字段是最差的。 但是我看到我自己是一个

 if (password.equals(requestpassword) || username.equals(requestusername)) { login = true; } 

一个运营商太糟糕了,造成如此大的差异。

我的银行是我的顾客。 我无法login,所以我打电话给客户服务。 他们问我的用户名,没有别的 – 没有询问任何安全问题,也没有尝试validation我的身份。 然后,他们没有发送密码重置到他们已经存档的电子邮件地址,而是问我要发送到哪个电子邮件地址。 我给了他们一个不同于我在档案中的地址,并且能够重置我的密码。

所以从本质上讲,黑客所需要的只是我的用户名,然后他就可以访问我的账户。 对于一家大银行来说,至less有90%的美国人会听说这个银行。 这发生在两年前。 我不知道这是一个训练有素的客户服务代表,如果这是标准的程序。

I'll share one I created. Kind of.

Years and years and years ago the company I was working for wanted indexing on their ASP web site. So off I went and set up Index Server, excluded a few admin directories and all was good.

However unknown to me someone had given a sales person ftp access to the web server so he could work from home, this was the days of dialup and it was the easiest way for him to swap files…. and he started uploading things, including documents detailing the markup on our services…. which index server indexed and starting serving up when people searched for "Costs".

Remember kids, whitelists not blacklists.

One of the simplest, yet really cost worthy is:

Payment systems that use engines such as PayPal can be flawed because the response back from PayPal after payment was successful is not checked as it should be.

例如:

I can go on to some CD purchase website and add some content to the cart, then during the checkout stages there's usually a form on the page that has been populated with fields for paypal, and a submit button to "Pay"..

Using a DOM Editor I can go into the form "live" and change the value from £899.00 to £0.01 and then click submit…

When I'm on the PayPal side of things I can see that the amount is 1 penny, so I pay that and PayPal redirects some parameters to the initial purchase site, who only validates parameters such as payment_status=1 , etc., etc. and do not validate the amount paid.

This can be costly if they do not have sufficient logging in place or products are automatically dispatched.

The worst kind of sites are sites who deliver applications, software, music, etc.

How about an online document manager, which allowed to set every security permission you could remember…

That is until you got to the download page… download.aspx?documentId=12345

Yes, the documentId was the database ID (auto-increment) and you could loop every single number and anyone could get all the company documents.

When alerted for this problem the project manager response was: Ok, thanks. But nobody has noticed this before, so let's keep it as it is.

A Norwegian pizza delivery had a security hole where you could order negative amounts of pizzas at their new and shiny internet portal and get them for free.