实验感想

1暴力破解

暴力破解使用特定的工具相对来讲是比较简单的,其中比较麻烦的一点是需要准备一个密钥的字典。  

我们大致的破解流程是

  1. 使用工具进行抓包,获取用户登录的接口

  2. 分析http报文的内容,特别注意cookie,token之类的值,并且明确参数的传递方式

  3. 修改请求,加入变量,进行破解。

在初级中,密码和用户名是通过querystring来传递的,没有安全性可言。而稍微高级一些的则使用form来传递,再往后会带上antiforgery token。但是这些都是小把戏,在http协议下无异于在网路上裸奔。使用https协议无疑能极大提升安全性,但我们想本地破解也不难,挂上开发者证书反代即可。hub系统就即使再配合上session也可以通过这种方法进行分析。

所以实际应用中,为了防止这种攻击,最好的方法还是使用hsts,这样中间人即使使用自己的证书来对用户进行欺诈,因为中间人的证书在用户的电脑上不受信任,用户也无法继续访问网站。从根源上解决了安全隐患。

2命令注入

命令注入是老生常谈的话题了,它巧妙利用了php、asp等远古框架的动态特性进行攻击。

不幸的是,任何现代化web框架早已不存在这种漏洞。只有开发人员自身允许用户没限制的在服务器上运行命令才可能出现这种事情。

时代在变化,IT技术人员必须跟上时代。钟情于老技术的人最终会被时间淘汰。

2020年了,php大势已去。在今年的StackOverflow servey中已经成为最让人讨厌的语言第六位,而世界上最大的php网站是pornhub。

而asp甚至都已经不存在了。现在的asp.net core和当初的asp几乎没有任何关联。asp.net core本身也已经不存在命令注入漏洞。

回到这个漏洞,这个与其说是漏洞不如就说是设计者脑瘫。但凡程序员正常一点点都不会存在这种离谱的问题。

3CSRF

​跨站点请求伪造,这个实验的设计让人一言难尽。

哪有这样伪造的?设计这个实验的人怕是活在上个世纪。

首先,这个实验里使用的img src方式的漏洞,在现代浏览器中已经不存在了。它会被新的站点cors策略拦截。

其次,我是不知道设计者的http协议是怎么学的。用src攻击的方式明显很蠢:src发出的请求只能是HTTPGET请求,而在设计规范中HTTPGET请求应当是不可能修改网站数据的(e.g. HTTPGET如果按照规范设计,是不存在安全隐患的)。这种攻击有用的期限是上世纪末期,那时候互联网规范还没普及。而现在试图使用这种攻击方式来攻破网站无疑是愚蠢的。如果这种方式也能攻击成功,只能代表写网站的人和设计实验的人一样蠢。

真正的跨站点请求伪造根本不是这么玩的,首先现代的跨站点请求伪造一定是基于POST的,最常见的csrf是利用form。因为form的POST请求不会受cors策略影响。

举个例子,假如某个购物网站有个表单,提交之后就是下单。然后我是黑客,我自己分析了这个表单,复制了一个,然后把表单里原本的input全部设置上我想设定的value,再加上hidden attribute,然后再在页面上随便加几个我自己写的输入框,伪造成一个登录页面。然后用户上我的网站的时候,我用这个页面让他们登录,用户只要一点登录,form就会被提交给那个购物网站,而且因为form不受cors影响,这个请求会带上用户的cookie。这样只要用户点了登录,他就会在那个购物网站上下单。

而高级的保护方式是使用antiforgery token。就和hub系统一样,它们用表单的时候会在表单里藏一个随机的token,这样别人伪造的请求就会因为没token而失效。

4文件包含

文件包含一般是和文件上传一起使用。因为很难想象开发者自己会在后端留具有破坏性的脚本。

这个漏洞之所以在上世纪有用,主要也是php的功劳。php当时为了开发者方便给了很多这样的接口却没有确保安全性。

所以说php虽然简单,漏洞却真的多。而且简单造成的后果就是大量菜鸟程序员也学会了开发网页,然而他们很多缺乏编程的尝试,也不了解基础的安全知识,没有一点安全的意识,以至于写出会包含这些漏洞的代码。

不过php容易写出这种漏洞也是真的。所谓有得必有失,php的这种注重灵活性的设计注定了它容易被黑客利用。自由的代价,是永远的警惕。

5文件上传

文件上传,又一个上世纪漏洞,我们网安真是太厉害了,学的全是xp和上世纪互联网漏洞。

据说武大的网站是被文件包含漏洞搞定的,然而我并不是很信。而且就算是真的,这也只能说明武大的维护人员蠢出天际,并不能说明这种漏洞还值得学习。

首先,文件上传漏洞,说白了就算把病毒之类的可执行文件传上他人的服务器,再想办法让它运行而已。

利用这个漏洞需要做服务器的人究极蠢:他不仅需要让你能上传病毒,还要把所有文件存在服务器本地,而且还要给你一个能够执行它的api。

并且,在现代Linux系统上,如果设计正常,一般外界保存的文件是没有x权限的(也就是说不可被执行),如果要手动执行,管理员还要手动chmod再执行。

再者,现代的web多为云服务、分布式,媒体文件存储都有专门的服务提供商。这种情况想用文件上传漏洞简直天方夜谭。

6SQL注入

好好,SQL注入,这东西讲了多少年了。设计实验的人是从来不看新闻吗?

SQL注入是非常经典的漏洞,它利用的一点是SQL里没有明显区分参数和关键字。这是一个语言设计层面的漏洞,所以一度很难解决。

但是所谓人定胜天,不是吗?早在十多年前,大公司就想出了一种叫做SQL parameter的东西,专门用来解决SQL注入问题。它规定用一种特殊的格式来传参,从而从根源上解决SQL注入漏洞。而现在的主流数据库查询方法也从直传SQL语句改为了使用官方提供的ORM框架,而一切主流的ORM都是自动使用SQL parameter的。也就是说现在去注入大公司的网站是完全不可能的事情。

更何况这几年noSQL数据库崛起,这些新兴的数据库对大数据处理有远超SQL型数据库的性能,而它们中很多甚至不怎么支持SQL查询。

倒是XSS攻击经久不衰,但是这次实验里连这种漏洞的影子都没看到。不过想到实验里的页面全是纯php,一行js都没看到,我就有点懂了。不会的就不涉及,好像是这个道理。

大人,时代变了。一群人每天研究php,从夜到明,从明到夜,能攻破任何其它语言的网站乎?