渗透测试
定义:渗透测试时以一个攻击者的角度来检查和审核一个网络系统的安全性的过程。受信任的第三方通关模拟黑客可能使用的攻击手段对目标系统的安全性做出风险评估并针对目标系统所存在的风险给出安全修复建议的一个测试过程。
意义:通过渗透测试,使系统管理人员,系统开发人员及时了解到系统潜在的”安全危机“(薄弱点),并及时进行修复,加强系统的安全性,避免不必要的损失。
根据渗透目标分类
1.操作系统渗透:windows,linux,solaris,aix,sco
2.数据库系统渗透:mysql,oracle,mssql,sybase,informix
3.应用系统渗透:由asp,jsp,php等组成的web应用(包括移动应用产品)
4.网络设备渗透:防火墙,入侵检测系统等
渗透攻击流程
明确目标-信息收集-信息整理-信息分析-漏洞检测-漏洞验证-获取所需-形成报告
SQL注入
原理:
SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意命令的SQL命令
危害:
1.未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露
2.对数据库的数据进行增加或删除操作(私自添加或删除管理员账号)
3.篡改网页并发布违法信息(网站目录存在写入权限,写入网页木马)
4.获取服务器最高权限(提权),远程控制服务器,安装后门,修改或控制操作系统
修复:
1.代码中的数据库操作采用SQL语句预编译和绑定变量,避免直接使用参数值拼接字符串。可以从根本上杜绝sql注入;
2.在代码中对用户输入的数据进行严格过滤。对涉及到数据库的操作的所有参数,过滤危险字符串,如select union sleep ’(from where concat char等敏感字符;
3.对所有传入sql语句的变量进行处理,比如字符串变量单引号包裹并转义,数字类型变量进行强制类型转换等;
4.网络层面部署web应用防火墙
5.在数据库层面,对数据库操作进行监控
6.做好数据库用户权限控制,比如对数据库配置使用最小权限原则,线上尽量不要使用root,sa等高权限用户连接数据库
Xpath
原理:
xpath注入攻击,指利用XPath解析器的松散输入和容错特性,能够在url,表单或其他信息上附带恶意的xpath查询代码,以获得权限信息的访问权并更改这些信息。与sql注入类似
危害:
1.在url及表单中提交恶意xpath代码,可获取到权限限制数据的访问权,并可修改这些数据
2.可通过此类漏洞查询获取到系统内部完整的XML文档内容
3.逻辑以及认证被绕过,它不像数据库那样有各种权限,xml没有各种权限的概念,正因为没有权限概念,因此利用xpath构造查询的时候争个数据库都会被用户读取
修复:
1.数据提交到服务器上,在服务端正式处理这批数据之前,对提交数据的合法性进行验证
2检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换,删除敏感字符或字符串,如过滤‘ ’‘ and or等,对特殊字符进行编码转换或替换
3.对于系统出现的错误信息,屏蔽系统本身的出错信息或者用统一的报错页面替代
XXE
原理:
XXE是XML外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有进制外部实体的加载
危害:
当允许引用外部实体时,通过构造恶意内容,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行,内网端口扫描,攻击内网网站,发起DOS攻击等危害
修复:
1.处理XML禁止引用外部实体,比如php可调用libxml_DISABLE_等Java可调用的实体命令
2.如有用到libxml2库,检查版本是否为2,9,0或以上版本,如版本较低建议升级
3.尽量不要让用户直接提交XML代码,如有业务需要得做好过滤处理
XSS
原理:
跨站脚本攻击,在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,XSS不仅仅限于JavaScript,包括flash等脚本语言,恶意代码是否储存在服务器中,XXS可以分为存储型的XSS与反射型的XSS
反射型,主要用于将恶意代码附加到URL地址的参数中,常用于窃取客户端cookie信息和钓鱼欺骗
存储型,攻击者将恶意代码注入到web服务器中并保存起来,只要客户端访问了相应页面就会受到攻击
危害
1.窃取管理员账号或cookie
2.窃取用户的个人信息
3.网站挂马
4.发送广告或者垃圾信息
5.劫持用户会话,从而执行任意操作
6.进行大量的客户端攻击,如DDOS
7.获取客户端信息,如用户的浏览历史,真实IP,开放端口
8.控制受害者机器向其他网站发起攻击
修复
1.输入编码进行转义,对输入的数据进行html转义,使其不会识别为可执行脚本
2.增加过滤器XssFilter
3.白名单过滤,根据白名单的标签和数据进行过滤
4.web,xml过滤配置
CSRF漏洞
原理
跨站请求伪造,是指利用受害者尚未失效的身份认证信息,诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账,改密码等)
CSRF和XSS区别
XSS:跨站脚本攻击,在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息
CSRF:借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”
危害
1.完成受害者所允许的任一状态改变的操作(邮件,发消息,购买商品,更新账号,注销,登录)
2.修改受害者的网络配置(修改路由器DNS,重置路由器密码)
3.获取用户的隐私数据,机密资料
4.用户财产安全
5.配合其他漏洞攻击
概括:盗用受害者身份,受害者能够什么,攻击者就能以受害者的身份做什么
修复
1.验证http referer字段
2.在请求地址中添加token并验证
3.在http头中自定义属性并验证
4.其他防御方法-关闭页面时要及时清除认证cookie;尽量少用或不使用request()类变量
命令执行
原理
指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令。命令执行主要时对输入的命令没有进行过滤,攻击者使用&,&&,|,||等命令拼接自己想要查看的信息的相关命令,攻击者的命令就会一起执行
危害
1.继承Web 服务器程序权限--执行系统命令
2.继承Web 服务器权限--读取文件
3.反弹Shell
4.控制整个网站
5.控制整个服务器
修复
1.严格过滤用户输入的数据,禁止执行系统命令
2.使用动态函数之前,确保使用的函数是指定函数
3.在执行命令函数,对参数进行过滤,并对敏感字符进行转义
4.使用函数替换命令执行,并且参数值尽量使用引号包括
任意文件读取
原理
通过传入参数,篡改要读取的文件路径,直接读取服务器上的任意文件,造成敏感信息泄露,甚至可以读取重要文件,比如与用户密码相关的文件进行进一步攻击
危害
直接读取服务器上的文件,权限够大的话可读取任意文件,危害包括但不限于:
1.网站源码泄露
2.账号密码有关等敏感数据泄露
3.可能利用SSRF并攻击内网系统
修复
1.正确使用文件读取或文件包含函数,禁止读取或包含非预期的文件
2.对参数作处理,设置白名单或者过滤,防止通过,,/目录穿越进行绕过
3.以最低权限原则运行网站等应用,限制可访问的目录
文件包含
原理
指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once())利用url去动态包含文件,若没有对文件来源严格审查,导致任意文件读取或者任意命令执行。
文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
1 ../../php.ini 读取ini文件
2 ../../phpinfo.php 读取指定文件
危害
1.敏感信息泄露
2.获取webshell
3.任意命令执行(脚本被任意执行,导致网站被篡改)
篡改网站;执行非法操作;攻击其他网站
文件包含漏洞时一种常见的依赖于脚本运行而影响web应用程序的漏洞
修复
设置白名单:代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较
过滤危险字符:由于include/require可以对php wrapper形式的地址进行包含执行,在linux环境中可以通过"../../"的形式进行目录绕过,所以需要判断文件名称是否为合法的php文件
设置文件目录:php配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,php仅仅在该目录中搜索文件
关闭危险配置:。。。。。。
文件上传
原理
对上传文件的类型,内容没有进行严格的过滤,检查,攻击者上传木马获取服务器的webshell权限;上传一个webshell到一个web可访问的目录上,恶意文件传递给解释器去执行后,可以在服务器上执行恶意代码,进行数据库执行,服务器文件管理,服务器命令执行等恶意操作。apache,tomcat,nginx等都爆出过文件上传漏洞
危害
1.网站被控制(文件增删改查,执行命令,链接数据库)
2.导致服务器沦陷(服务器长久未更新--利用exp提权)
3.服务器相关服务沦陷
修复
1.上传文件的存储目录不给执行权限
2.文件后缀白名单,注意0x00截断攻击(php更新到最新版本)
3.不能有本地文件包含漏洞(include dama.jpg)
4.及时更新web应用软件避免解析漏洞攻击
弱密码
原理
由于密码过于简单,利用字典爆破撞库很容易爆出密码
危害
直接获得系统控制权利
修复
针对客户
1.针对管理人员,应强制其账号密码强度必须到达一定的级别
2.建议密码长度不少于8位,且密码中至少包含数字,字母和符号
3.不同网站应使用不同的密码,以免遭受”撞库攻击“
4.避免使用生日,姓名等信息做密码,远离社工危害
对于修复人员
1.建议规定用户在设置密码时的长度和密码的必须使用大小写加数字组合的形式,严禁使用空口令
2.禁止用户使用与用户名一致的密码
路径遍历/遍历目录
原理
web应用通过传入参数,拼接查看的网站目录,攻击者通过篡改要读取的目录路径,直接读取或者查看服务器上的任意目录。应用系统在处理下载文件时未对文件进行过滤
系统后台程序中如果不能正确地过滤客户端提交的../和./之类的目录跳转符,攻击者可以利用路径回溯符"../”跳出程序本身的限制目录实现上传,下载,删除,读取任意文件等
危害
直接读取服务器上的目录,权限够大的话可读取任意目录,危害包括但不限于:
1.网站源码路径信息泄露
2.可查看网站任意文件的路径,尝试通过外网进行url访问
3.发现可利用的网站配置文件,或者webshell等
修复
1.正确使用文件读取或文件包含函数,禁止读取或包含非预期文件
2.对参数作处理,设置白名单或者过滤,防止通过../目录穿越进行绕过
3.以最低权限原则运行网站等应用,限制web可访问的目录
越权
原理
越权访问漏洞指绕过正常的权限控制,可以实现非法访问无权限资源的一种漏洞。常见的有垂直(纵向)越权漏洞和水平(横向)越权漏洞
水平越权漏洞是一种“基于数据的访问控制”设计缺陷引起的漏洞,是由于服务器端在接收到请求数据进行操作时,没有判断被请求数据的归属,而导致的越权数据访问漏洞
垂直越权漏洞,也称权限提升漏洞,是一种“基于url的访问控制”设计缺陷引起的漏洞,由于应用没有做权限控制或仅依赖菜单做权限控制,恶意用户只要通过url就可以直接访问或控制其他角色所有的数据或页面,达到权限提升的目的
危害
1.泄露敏感信息:攻击者可以通过越权漏洞获取到未被授权的敏感信息,比如用户信息,交易记录等
2.篡改数据:攻击者可以通过越权漏洞修改系统中的数据,比如更改账户余额,修改订单状态等
3.执行非法操作:攻击者可以通过越权漏洞执行系统中未被授权的操作,比如删除数据,创建用户等
修复
对于垂直越权访问需要严格进行权限控制,即在调用相关功能之前,验证当前用户身份是否有权限调用相关功能(推荐使用过滤器)
后端程序中禁止直接使用前端传递表示权限的字段,当前用户身份权限信息必须从可信区域中获取,从如session或token中获取用户信息后再获取权限信息