Web安全期末考试题目1.同源策略的概念 ”协议+域名+端口”三者相同,叫做同源策源。同源策源主要为了安全,确保一个应用中的资源只能被本应用的资源所访问 2.HTTP请求和响应的组成
”协议+域名+端口”三者相同,叫做同源策源。
同源策源主要为了安全,确保一个应用中的资源只能被本应用的资源所访问
2.HTTP请求和响应的组成、字段等。
HTTP请求报文主要组成:
1.请求行
请求方法、url、HTTP协议
2.请求头(常见)
a.Host(主机和端口号)
b.Connection(链接类型)
c.Upgrade-Insecure-Requests(升级为HTTPS请求)
d.User-Agent(浏览器名称)
e.Accept(传输文件类型)
f.Referer(页面跳转处)
g.Accept-Encoding(文件编解码格式)
h.Cookie(辨别用户身份用的)
i.x-requested-with:XMLHttpRequest(Ajax异步请求)
3.空行
4.请求实体
请求方法为GET,请求包体无数据
请求方法为POST,请求包体放置需要提交的数据
HTTP响应报文和请求报文组成相似:
1.响应行
协议版本、状态码、描述
常见状态码:
2xx:成功
3xx:重定向
300-Multiple Choices 用户请求了多个选项的资源(返回选项列表)
301-Moved Permanently 永久转移
302-Found 资源被找到(以前是临时转移)
303-See Other 可以使用GET方法在另一个URL找到资源
304-Not Modified 没有修改(缓存部分特别说明)
305-Use Proxy 需要代理
307-Tempoary Redirect 临时重定向
308-Permanent Redirect 永久重定向
4xx:客户端错误
400-Bad Request 请求格式错误
401-Unauthorized 没有授权
402-Patment Required 请先付费
403-Forbidden 禁止访问
404-Not Found 没有找到
405-Mtehod Not Allowed方法不被允许
406-Not Acceptable 服务端可以提供的内容和客户端期待的不一样
5xx:服务端错误
500-Internal Server Error(内部服务器错误)
501-Not Implemented(没有实现)
502-Bad Gateway(网关错误)
503-Service Unavailable(服务不可用)
504-Gateway Timeout(网关超时)
2.响应头
3.空行
4.响应报文
3.XSS的概念、分类、危害以及防御手段;cookie的概念;httponly属性;XSS的攻击验证
(1)XSS的概念、分类危害以及防御手段
一、XSS概念
恶意攻击者利用web页面的漏洞,插入一些恶意代码, 当用户访问页面的时候,代码就会执行,这个时候就 达到了攻击的目的。
二、XSS分类
1.反射型XSS
是非持久性的XSS,当然也是我们最常见的一种XSS,其攻击的主要特点是:它的及时性和一次性,即用户提交请求后,响应信息会立即反馈给用户。该类攻击常发生在搜索引擎、错误提示页面等对用户的输入做出直接反应的场景中。
2.存储型XSS
有非持久性肯定也有持久性XSS。顾名思义,就是XSS恶意代码被存储到服务器端,因此允许用户存储数据到服务器端的Web应用程序可能存在该类型XSS漏洞。攻击者提交一段XSS代码后,服务器接收并存储,当其他用户访问包含该XSS代码的页面时,XSS代码被浏览器解析并执行。
他的主要的特点是两个:
(1)一是提交的恶意内容会被永久存储,因而一个单独的恶意代码就会使多个用户受害,故被称为持久性XSS,它也是跨站脚本攻击中危害最的一类。
(2)二是被存储的用户提交的恶意内容不一定被页面使用,因此存在危险的响应信息不一定被立即返回,也许在访问那些在时间上和空间上没有直接关联的页面时才会引发攻击,因此存在不确定性和更好的隐蔽性。
3.DOM型XSS(是反射型的变种)
就是反射型XSS的变种了。DOM的意思就是文档对象模型,它可以允许程序动态的访问和更新文档的内容、结构等。客户端JavaScript可以访问浏览器的文档对象模型。也就是说,通过JavaScript代码控制DOM节点就可以不经过服务器端的参与重构HTML页面。作为反射型的变种,它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如Javascript代码不正确地使用各种DOM方法(如document.write)和Javascript内部函数(如eval函数),动态拼接HTML代码和脚本代码就容易引发DOM型的跨站脚本攻击。所以,它和前面两种XSS最大的区别就在于它完全不需要和服务器端进行交互,它的触发是完全基于浏览器那一段对dom数据的解析来完成的,完全是客户端的事情。
三、危害
1.冒充身份
2.刷点击率
3.弹广告
4.传播蠕虫病毒啊
5.邮件钓鱼之类的
四、防御手段
1.使用黑名单
2.对HTML标签或特殊字符进行过滤
3.使用内容安全的CSP
4.使用设计上就会自动编码的框架,如:OWASP ESAPI、React JS、JSOUP等,对于JAVA而言,可以使用ESAPI.encoder().encodeForHTML()对字符串进行HTML编码。
5.对于反射型和存储型XSS,可以在数据返回给客户端浏览器时,将敏感字符进行转义,如:将单引号进行编码替换(十进制编码'、十六进制编码'、HTML编码&apos、Unicode编码\u0027等)。
6.对于DOM型XSS,可以使用上下文敏感数据编码。如:在PHP中的htmlspecialchars()、htmlentities()函 数可以将一些预定义的字符转换为HTML实体,如:小于转化为<、大于转化为>、双引号转化为"、单引号转化为&apos、与转化 为&等。
7.启用浏览器的HttpOnly特性可以组织客户端脚本访问cookie。如:在PHP中可以通过下面的代码设置cookie并启用HttpOnly。
8.挂WAF简单粗暴
(2)cookie的概念
Cookie实际上就是一小段文本消息,客户端请求服务器,如果服务器需要记录该用户状态就使用response向客户端浏览器颁发一个Cookie。客户端游览器就会把Cookie保存起来。当浏览器在请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态,服务器还可以根据需要修改Cookie的内容
(3)httponly属性
获取或设置一个值,该值指定Cookie是否可通过客户端脚本访问;如果 Cookie 具有 true 特性且不能通过客户端脚本访问,则为 HttpOnly;否则为 false。 默认值为 false。
说白了就是为了防止XSS攻击,窃取cookie的内容,增加cookie的安全性
(4)XSS的攻击验证
1.手工检测
确定xss漏洞的基本方法是使用攻击字符串来验证的,例如”><script>alert(document.cookie)</script>这个字符串被提交给每个应用程序的每个参数,许多扫描工具的xss自动化测试的基础规则就是这个。同时,攻击者监控这个输入的响应,如果攻击字符串原样出现在响应中,几乎可以肯定应用程序存在xss漏洞。
2.利用工具
常用工具有AVWS(Acunetix Web Vulnerability Scanner)、BurpSuite等。还有一些专门针对XSS漏洞的检测工具,如:XSSer、XSSF(跨站脚本攻击框架)、BeEF(The Browser Exploitation Framework)等。
4.CSRF的概念、危害、防御措施,referer字段;token的概念
CSRF的概念:
CSRF是指利用受害者尚未失效的身份认证信息( cookie、会话等信息),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密、信息修改等操作)。
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用
危害:
CSRF危害:
1.修改账户信息,修改绑定的手机或者邮箱
2.利用管理员账号,上传木马文件
3.传播蠕虫病毒(点击、扩散、点击。。。。)
4.和其他攻击手段相互配合,实现攻击,比如XSS,SQL注入等等
CSRF防御措施:
1.简单区分一下这个请求是自己真正要访问的前端页面,还是第三方网站(最简单的就是域名判断、referer字段)
2.把自己的前端页面和攻击者伪造的请求变得不一样(最明显的就是多加一些参数进去)
3.token的保存和校验
4.更加安全的就是采用二次验证(验证码、二次验证、IP认证等等)
referer字段:
单独拎出来就是一个页面跳转。要是合在CSRF里面来说就是输入CSRF的src了,施行referer绕过。
token的概念:
验证身份的一种方式,简称“令牌”。如果没有token,可以尝试referer绕过,实现CSRF的攻击。
5.Sql注入的概念、危害、防御;注入的判断;联合查询注入的步骤、报错注入。
(1)Sql注入的概念、危害、防御
sql注入原理:
产生SQL注入漏洞的根本原因在于代码中没有对用户输入项进行验证和处理便直接拼接到查询语句中。利用SQL注入漏洞,攻击者可以在应用的查询语句中插入自己的SQL代码并传递给后台SQL服务器时加以解析并执行。
sql注入危害:
1.数据库信息泄露
2.网页篡改
3.网站被挂马,传播恶意软件
4.数据库被恶意操作
5.服务器被植入后门
6.破坏硬盘或者服务器等硬件设备
sql注入防御:
1.关闭应用的错误提示
2.加waf
3.对输入进行过滤
4.限制输入长度
5.限制好数据库权限,drop/create/truncate等权限谨慎grant
6.预编译好sql语句,python和Php中一般使用?作为占位符。这种方法是从编程框架方面解决利用占位符参数的sql注入,只能说一定程度上防止注入。还有缓存溢出、终止字符等。
7.数据库信息加密安全(引导到密码学方面)。不采用md5因为有彩虹表,一般是一次md5后加盐再md5
8.清晰的编程规范,结对/自动化代码review,加大量现成的解决方案(PreparedStatement,ActiveRecord,歧义字符过滤, 只可访问存储过程 balabala)已经让SQL注入的风险变得非常低了。
(2)sql注入的判断
1.显注
2.盲注(无回显): 时间型、布尔型、报错型
盲注:
特点:盲注在于无法构造出回显位时使用
优点:优点是适配绝大部分注入点
缺点:注入繁琐,费时费力,高频率对服务器发起访问也容易被ban。
分类:布尔盲注,时间盲注,dnslog盲注
布尔盲注
特点:以页面回显的内容的不同作为判定依据。
时间盲注
时间盲注,以回显的时间长短作为判断依旧
dnslog盲注
特点:必须windows系统,必须root权限,必须secure_file_priv为空
报错注入
特点:经过精心构造的函数,让函数处理user()等不合规定的数据,引发mysql报错。最常用的是updatexml()
优点:报错注入优点是注入位置广泛,几乎任何和数据库有关的操作经过sql拼接都可以产生报错注入,有回显位,获取数据方便。
缺点:缺点是必须开启错误提示,mysqli_error()
(3)联合查询注入的步骤
1、判断注入点还是整形或字符型
2、判断查询列数
3、判断显示位
4、获取所有数据库名
5、获取数据库所有表名
6、获取字段名
7、获取字段中的数据
(4)报错注入
一、报错注入概念:
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
二、报错注入利用的前提
页面上没有显示位,但是必须有SQL语句执行错误的信息。
三、报错注入的优缺点
1.优点:不需要显示位,如果有显示位建议使用union联合查询。
2.缺点:需要有SQL语句的报错信息。
四、报错注入基本步骤:
1.构造目标查询语句;
2.选择报错注入函数;
3.构造报错注入语句;
4.拼接报错注入语句;
五、常见的报错注入函数:
1.floor();
2.extractvalue();
3.updatexml();
4.geometrycollection();
5.multipoint();
6.polygon();
7.multipolygon();
8.linestring();
9.multilinestring();
10.exp();
6.文件上传漏洞的概念、危害、客户端和服务端检测手段(MIME检测......)、PHP%00截断的原理
原理:
由于程序员在对用户文件上传功能实现代码没有严格限制用户上传文件后缀以及文件类型或者处理缺陷,而导致用户可以越过本身权限向服务器上传木马去控制服务器.
危害:
操作木马文件提权 获取网站权限
检测方法:
1.前端JS检测(通常为检测文件扩展名)
2.服务端MIME类型检测(检测POST内容的Content-Type字段)
3.服务端目录路径检测(检测和path相关的内容)
4.文件扩展名检测(黑白名单,检测扩展名extension内容)
5.文件内容检测(检测内容是否存在恶意代码或检测文件特征)
修复方式:
1.后端验证:采用服务端验证模式
2.后缀验证:基于白名单,黑名单过滤
3.MIME验证:基于上传自带类型艰检测
4.内容检测:文件头,完整性检测
5.自带函数过滤
6.WAF防护软件:宝塔、云盾等
PHP00截断原理:
PHP的00截断是5.2.x版本的一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。
7.文件包含漏洞的产生、危害、触发前提;php包含的函数
原因:
在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在 PHP 语言中。
危害:
1.web服务器的文件信息泄露
2.脚本被任意执行导致网站被篡改
触发前提:
1,web 应用采用 include 等文件包含函数,并且需要包含的文件路径是通过用户传输参数的方式引入;
2, 用户能够控制包含文件的参数,被包含的文件可被当前页面访问;
php包含的函数:
1.include():使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
2.inclue_once():功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
3.require():使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并立即终止程序。
4.require_once():功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
8.XXE漏洞的概念、反序列化漏洞的概念和预防
(1)XXE漏洞的概念以及预防
概念:
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
预防:
1.在解析XML之前加入禁用实体解析的代码
2.过滤用户提交的XML数据
'
"
''(two apostrophe)
""
<
>
]]>
]]>>
<!--/-->
/-->
-->
<!-- <!
<! [CDATA[/]]>
3.简单粗暴用WAF
(2)反序列化漏洞的概念及其预防
概念:
各种语言都有反序列化漏洞,Java、PHP、Python等。序列化即将对象转化为字节流,便于保存在文件,内存,数据库中;反序列化即将字节流转化为对象,也就是序列化的逆过程。
预防:
1.鉴权,反序列化接口进行鉴权,仅允许后台管理员等特许人员才可调
2.用白名单,限制反序列化的类
3.RASP(Runtime application self-protection,运行时应用自我保护)检测
9.PHP命令执行函数、代码执行函数、魔术方法
命令执行函数:
1.system()
2.passthru()
3.exec()
4.pcntl_exec()
5.shell_exec()
6.popen()/proc_open()
7.反引号 ``
代码执行函数:
1.eval()
2.assert()
3.call_user_func()
4.create_function()
5.array_map()
6.call_user_func_array()
7.array_filter()
8.uasort()函数
9.preg_replace()
魔术方法:
1.construct构造方法
2.destruct析构方法
3.clone克隆方法
4.call非静态调用方法
5.callStatic静态调用方法
6.debugInfo打印方法
7.get获取成员属性方法
8.isset方法
9.set方法
10.invoke方法
11.sleep方法
12.toString方法
13.unset方法
14.wakeup方法
10.暴力破解的概念、Webshell的概念;一句话木马;
暴力破解概念:
所谓暴力破解,就是在不知道用户名和密码的情况下,通过工具软件利用字典文件对用户名和密码依次进行尝试。从而最终将用户名或密码破解出来。
Webshell的概念:
webshell是web入侵的脚本攻击工具。简单的说来,webshell就是一个asp或php木马后门,黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。然后黑客就可以用web的方式,通过asp或php木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。
一句话木马:
一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。
asp一句话木马:<%execute(request("value"))%>
php一句话木马:<?php @eval($_POST[value]);?>、<?php system($_REQUEST['cmd']);?>
aspx一句话木马:<%@ Page Language="Jscript"%>、<%eval(Request.Item["value"])%>
jsp:<%Runtime.getRuntime().exec(request.getParameter("i"));%>