# 网络安全
Web前端的黑客攻防技术是⼀门非常新颖且有趣的⿊客技术,主要包含Web前端安全的跨站脚本(XSS)、 跨站请求伪造(CSRF)、界面操作劫持、WebShell这 ⼏大类,涉及的知识点涵盖信任与非信任关系、Cookie 安全、Flash安全、DOM渲染、字符集、跨域、原⽣态攻击、⾼级钓鱼、蠕虫思想等,这些都是研究前端安全的 ⼈必备的知识点。
⿊客技术,简单地说,是对计算机系统和网络的缺陷 和漏洞的发现,以及针对这些缺陷实施攻击的技术。这里说的缺陷,包括软件缺陷、硬件缺陷、网络协议缺陷、管理缺陷和人为的失误,它是⼀个知识面高度宽泛的技术领域。
# CSRF 跨站请求伪造
百度百科介绍:CSRF是一种挟制用户在当前已登陆的web应用程序上执行非本意的操作的攻击方式。CSRF是利用的网站对用户网页浏览器的信任(欺骗用户浏览器,让其以用户的名义运行操作)。
攻击细节
跨站脚本请求攻击,简单说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账或购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户省份的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器 ,却不能保证请求本身自愿发出。
例子
假如一家银行用以运行转账操作的URL地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一个恶意攻击者可以在另一个网站上放置如下代码:
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。 透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义运行操作。
# JSONP劫持
# XSS 跨站脚本攻击
简介:利用网站漏洞从用户那里恶意盗取信息,恶意攻击者往 Web⻚面里插⼊恶意Script代码,当⽤户浏览该页之时,嵌⼊其中Web⾥面的 Script 代码会被执⾏,从⽽而达到恶意攻击⽤用户的目的。
攻击类型
- 持久型:也叫存储型的XSS--跨站代码存储在服务器(数据库),主动提交恶意数据到服务器,当其他用户请求的时候服务器从数据库中查询数据并发给用户进行攻击。
- 非持久型:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码,即诱骗用户点击短型URL,服务器解析后响应,在返回的响应内容中隐藏和嵌入攻击者的代码,从而攻击用户。
- DOM型:客户端脚本处理逻辑导致的安全问题。DOM通过tml的一个结构执行事件脚本。
<img src="xxxx" onerror="xxx" />
防范措施
- 1.输入验证与转义:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
- 2.输出编码与转义:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。
- 3.明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO 8859-1或 UTF 8)。
- 4.注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如
"<" ">"
或类似"script
"的关键字),很容易被XSS变种攻击绕过验证机制。 Cookie
设置HTTP Only
CSP
:内容安全策略,以白名单的机制对网站加载或执行的资源起作用Content-Security-Policy: default-src ‘self’
工具
渗透测试工具BEEF (opens new window):
- 它是一个专注于Web浏览器的渗透测试工具。
- 2.通过⼀一段编制好的javascript控 02 制⽬目标主机的浏览器器
- 3.能够配合metasploit进⼀一步渗透 主机
- 4.再配合ARP攻击,MITM中间⼈人 04 攻击
XSSer (opens new window):自动化XSS漏洞检测及利用工具
- 同时使用GET和POST方法注入。
- 包括各种过滤器和绕过技术。
- 可以与命令行和GUI一起使用。
- 将提供攻击的详细统计数据。
XSSer 主要做的防御:
- 对style属性里面的数据进行严格的检查,并且对于用户输出到xss里面的内容进行适当的CSS编码。
- 行严格的JavascriptEncode,将某些字符转义,如 ” 变成 \” ,’ 变成 \’ 等等。
- 使用 HTMLEncode 编码,保证你从js输出到HTML的元素和属性不会脱离你的控制。
- 使用 JavascriptEncode,对事件里面的js代码进行编码。
- 对var变量进行HtmlEncode,那么我就无论如何也构建不了<>任何元素了。也就不可能有
<script>
或新建元素利用Onload事件等。
# Web Shell网站提权渗透
webshell
是以asp、php、jsp或者cgi
等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp
或php
后门文件与网站服务器WEB
目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp
或者php
后门,得到一个命令执行环境,以达到控制网站服务器的目的。
操作步骤:
- 1.编写木马:编写可执行的web脚本文件
- 2.上传漏洞:寻找漏洞将我们的木马文件上传。
- 3.安装中国菜刀:一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理
一些常见漏洞介绍
- 1.上传文件扩展名漏洞
- 空格漏洞:旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 存储后会编程 a.php
- 空字节漏漏洞洞:Nginx空字节漏洞 xxx.jpg%00.php 这样的⽂件名 会被解析为php代码运行
- Apache的解析漏洞:上传如a.php.rar a.php.gif 类型 的⽂件名,可以避免对于php⽂件的过滤机制,但是由于 apache 在解析⽂件名的时候是从右向左读
- ⽼板本的IIS:IIS在解析⽂件名的时候可能将 分号后⾯面的内容丢弃 a.asp;jpg。如果⽹站⽬录中 有一个 /.asp/目录,那么此⽬录 下⾯的一切内容都会被当作asp
- 2.上传文件HTTP请求伪造
- JAvascript验证:禁用Javascript、改后缀名
- 后端检测-文件头:保留文件头,把木马的代码写进去就搞定了
- MIMIE:代理阶段请求修改Content'-type或者通过Ajax上传模拟
- 双文件上传模拟下一个input=file进行上传可绕过部分服务器
如何防范
- 1.可写目录不给执行权限,有执行权限的目录不给写权限,或者直接让目录只有可读权限(shmod a -x)文件夹名字
- 2.控制目录:修改上传文件名,转移上传目录
- 3.建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。
- 4.对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。
- 5.asp程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。
- 6.到正规网站下载程序,下载后要对数据库名称和存放路径进行修改,数据库名称要有一定复杂性。
- 7.要尽量保持程序是最新版本。
- 8.不要在网页上加注后台管理程序登陆页面的链接。
- 9.为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过上传即可。
- 10.要时常备份数据库等重要文件。
- 11.日常要多维护,并注意空间中是否有来历不明的asp文件。
- 12.尽量关闭网站搜索功能,利用外部搜索工具,以防爆出数据。
- 13.利用白名单上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。
# 流量劫持
流量劫持,是利用各种恶意软件,木马修改浏览器、锁定主页或不停弹出新窗口等方式,强制用户访问某些网站,从而造成用户流量损失的情形
流量,就是网络上传输的数据量。正常上网时,数据会在网民的客户端与正确的网站服务器之间传输,我们才能浏览网页、下载歌曲、收看视频。如果你原本想访问A网站,但是有人偷偷做了手脚,让你实际上打开的是B网站,这就叫流量劫持
流量劫持有多种方法,其中一种是DNS劫持。DNS是负责域名解析的服务器,一旦黑客破坏了DNS解析的过程,输入域名后,可能转化为黑客指定的IP地址,用户往往很难看出破绽,但所有的流量都会转向黑客指定的虚假的服务器,黑客不但可以很容易获取各种密码、个人信息等,还可以植入木马病毒,盗窃个人财产。
# 网页挂⻢
网页挂马指的是把一个木马程序上传到一个网站里边然后可以用木马生成器生成一个网马,在上传到空间内!再加代码使得木马在打开网页时运行。
# 运营商劫持
常见的运营商劫持主要是http劫持,https劫持和dns劫持。我们经常看到的右下角弹小广告的一般是http劫持,如果将http转为https可以减少被运营商劫持的机率,但也可能会被伪造证书,仍然会被劫持。所以我们需要在自己的程序中设置一个监听器来监控dom中劫持插入的脚本。
解决方式:
监控域名设置白名单
- 1.通过兼听MutationObserver或WebKitMutationObserver或window.MozMutationObserver事件,获取网页中所有的script,img,iframe等标签
- 2.设置白名单
- 3.如果不是白名单内部的域名或IP直接把标签移除
# sql注入
SQL注入 (opens new window)即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
定义
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。
攻击手法
出入sql注入的万能语句 ’or 1=1
- 1.基于布尔的盲注
因为web的页面返回值都是True或者False,所以布尔盲注就是注入后根据页面返回值来得到数据库信息的一种办法。
- 2.基于时间的盲注
当布尔型注入没有结果(页面显示正常)的时候,我们很难判断注入的代码是否被执行,也可以说到底这个注入点存不存在?这个时候布尔型注入就无法发挥自己的作用了。基于时间的盲注便应运而生,所谓基于时间的盲注,就是我们根据web页面相应的时间差来判断该页面是否存在SQL注入点。
- 3.联合查询注入
使用联合查询进行注入的前提是我们要进行注入的页面必须有显示位。所谓联合查询注入即是使用union合并两个或多个SELECT语句的结果集,所以两个及以上的select必须有相同列、且各列的数据类型也都相同。联合查询注入可在链接最后添加order by 9
基于随意数字的注入,根据页面的返回结果来判断站点中的字段数目。
- 4、基于错误信息的注入
此方法是在页面没有显示位,但是echo mysql_error()
;函数输出了错误信息的时候方能使用。优点是注入速度快,缺点是语句较为复杂,而且只能用limit依次进行猜解。总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error()
;输出了错误信息时使用。
防范措施
- 参数传值
- 分级管理
- 基础过滤与二次过滤
- 使用安全参数
- 漏洞扫描
- 数据库信息加密等