Web安全面试题(一)-含解答

Domain

1、解释一下同源策略


源:协议、域名、端口

同源:若地址中的协议、域名、端口都相同,即为同源。反之,有一者不同即为不同源。

同源策略:为浏览器的一个安全功能,不同源的客户端脚本没有明确授权的情况下,无法读写对方的资源。


2、哪些东西是可以同源获取的?


页面的链接、重定向、表单提交

跨域资源的引入,但js不能读取加载的内容,如:页面中的<script src="…">,<img>,<link>,<iframe>


3、如果子域名和顶级域名不同源,如何设置让它们同源?


可以通过设置document.domain = ‘a.com’

通过上面那个方法需注意:1. 只能在子域和父域之间使用 2. 只适用于Cookie和iframe窗口。


Ajax

1、Ajax是否遵循同源策略?


遵循


2、json注入如何利用


恶意用于向json字符串中注入恶意字符,导致解析失败或非正常的解析


3、不同浏览器之间,安全策略有哪些不同,比如chrome,firefox,IE


三种浏览器都遵循同源策略和CSP

具体的安全策略的细节有待进一步补充…


4、CSP是什么?如何设置CSP?


CSP:Content Security Policy,内容安全策略。是繁育XSS攻击的一种安全机制,其思想是以服务器白名单的形式来配置可信的内容来源,客户端Web应用代码可以使用这些安全来源。


SQLi

1、如何判断sql注入,有哪些方法?


sql注入:将sql命令插入web表单中提交/输入域名或域名页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令。


如何判断:


手工注入


http://e.com/1.php?id=1

http://e.com/1.php?id=1-- sd

 

http://e.com/1.php?id=aaa

http://e.com/1.php?id=aaa'-- sd

 

http://e.com/1.php?id=aaa

http://e.com/1.php?id=aaa' '

http://e.com/1.php?id=aaa'||'

http://e.com/1.php?id=aaa'%2b'

 

id=1 and 1=if(1=2,1,(select 1 union select 2)) 

id=1 and 1=if(1=1,1,(select 1 union select 2))

 

id=1 order by 1 正常

id=1 order by 1,  错误

id=1 order by 1, 1 正常


Content-Type: application/json 时: 

//可以尝试用 \u0027  代替单引号。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

order by 注入


$sql = "select * from `sql` order by ".$orderby." ".$order;

1

orderby=id,&order=asc =》select * from ‘sql’ order by id,asc

orderby=id,1&order=asc=》select *from ‘sql’ order by id,1 asc


rlike注入


select user from mysql.user where user='admin' order by user rlike char(40);

select user from mysql.user where user='admin' order by user rlike 1

1

2

postData提交数据,然后跑数据就行了


orderby=id & order=rlike=1 =》select * from ‘sql’ order by id rlike char(40)


2、为什么有的时候没有错误回显,用php举例


php的配置文件php.ini进行了修改,display_errors = On 修改为 display_errors = off时候就没有报错提示。


在php脚本开头添加error_reporting(0); 也可以达到关闭报错的作用。


3、宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造?


宽字符:用多个字节来代表的字符,如:Unicode编码

(1)%27 ’

(2)%20 空格

(3)’%23 #

(4)%df 運(说明,也可以是其他的%d1之类,解析之后变成中文字符)


宽字符的注入原理:sql语句进后端后对单引号等进行了转义,转义\为%5C,当前面的%xx与%5C能结合成两个字节的字符时候,就可以使后面的单引号逃逸,从而造成注入。


4、你都了解哪些sql 的bypass技巧


使用这些字符进行注入点识别:

+,-,*,%,/,<<,>>,||,|,&,&&,也可以将and换成or,&&, ||等


也可以不使用and或者or,直接使用异或截断:


1^1^0,1^0^0\


{``operation}来识别注入点:


select * from users where uid = 111 and {’’ 1=1}


mysql中利用空白符


%09%0A %0B %0C %0D %A0 %20 /**/


sql中注释符


#, --+, /xxx/, /!xxx/, /!50000xxx/ (注:可绕大多数waf)


特殊符号


~, !, ``, @``, {x key}, 1.1, 1e1, (),emoji表情符号, @:=


5、CRLF注入的原理


CR:回车,ASCAII:13,\r

LF:换行,ASCAII:10,\n

CRLF:Enter

CRLF注入:在Http协议中,Http header 与 Http body 是用两个CRLF分隔的,浏览器通过两个CRLF将对应的http内容显示出来。 因此,恶意用户如果通过控制http消息头中的字符,来注入恶意的换行,即可注入一些会话Cookie/Html代码。


XSS

1、xss的发生场景?


1、在HTML标签中输出 <div>$var</div>


<a href=# >$var</a>


利用方式:构造一个<script>标签或任意可执行脚本


<div> <script>alert(/xss/)</script></div> 

<a href=# > <img src=# onerror=alert(1) /></a> 

1

2

2、在HTML属性中输出

<div id=“abc” name="$var" ></div>


利用方式:构造payload


<div id="abc" name=""><script>alert(/xss/)</script><"" ></div>

1

3、在HTML属性中输出

<script>var x = “$var”;</script>


利用方式:闭合引导


<script>var x = "$var";alert(/xss/);//";</script>

1

4、在事件中输出

<a href=# οnclick=“funcA(’$var’)” >test</a>


5、在CSS中输出


<style type="text/css">

body {background-image:url(${xss});}

body {background-image:expression(${xss});}

</style>

1

2

3

4

6、在地址中输出


<a href="http://www.evil.com/?test=$var" >test</a> 

<a href="http://www.evil.com/?test= " onclick=alert(1)"" >test</a> 

</style>

1

2

3

<a href="javascript:alert(1);" >test</a>

<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=" >test</a>

1

2

2、如果给你一个XSS漏洞,你还需要哪些条件可以构造一个蠕虫?


XSS蠕虫:XSS攻击可能会造成系统中用户间的互相感染,导致整个系统用户的沦陷,能够造成这种危害的XSS漏洞成为XSS蠕虫。

1、构造一个具有自我复制的反射型XSS

2、插入评论、留言框

3、用户点击链接,链接内容指向同样的XSS向量。也就是注入了蠕虫代码的的存在存储型xss的页面。链接被点击后将继续造成蠕虫传播。


3、在社交类的网站中,哪些地方可能会出现蠕虫?


留言版

评论

文章发布


4、如果叫你来防御蠕虫,你有哪些方法?


1、将本地带有破坏性的程序改名字。

2、关闭可执行文件。

3、禁止“FileSystemObject”就可以有效的控制VBS病毒的传播。具体操作方法:用regsvr32 scrrun.dll /u这条命令就可以禁止文件系统对象。

4、开启浏览器的安全设置。


5、如果给你一个XSS盲打漏洞,但是返回来的信息显示,他的后台是在内网,并且只能使用内网访问,那么你怎么利用这个XSS?


一个公网IP、内网的目标浏览器

首先,利用XSS盲打漏洞中招(内网的目标浏览器访问网站的流量都会被定向到公网IP),此时对内网IP实施ARP攻击,在结合metasploit模块进行漏洞利用。


PHP

1、php里面有哪些方法可以不让错误回显?


php的配置文件php.ini进行了修改,display_errors = On 修改为 display_errors = off时候就没有报错提示。


在php脚本开头添加error_reporting(0); 也可以达到关闭报错的作用。


2、php.ini可以设置哪些安全特性?


禁用危险的函数 disable_functions = phpinfo, system, mail, exec


限制资源

每个脚本的最大执行时间,单位秒 max_execution_time = 30

每个脚本解析请求数据的最大时间 max_input_time = 60

每个脚本可以消耗的最大内存(8MB) memory_limit = 8M


PHP要接收的POST数据最大大小 post_max_size = 8M


是否允许HTTP文件上传 file_uploads = Off

允许上传的最大文件大小 upload_max_filesize = 2M

不将PHP错误消息暴露给外部用户 display_errors = off


启用安全模式safe_mode = On


只允许访问隔离目录中的可执行文件

safe_mode_exec_dir = php-required-executables-path


限制外部访问PHP资源

safe_mode_allowed_env_vars = PHP_


限制泄露PHP信息

expose_php = Off


记录所有错误

log_errors = On


不为输入数据注册全局

register_globals = Off


最小化允许的php post大小

post_max_size = 1K


确保PHP重定向正确

cgi.force_redirect = 0


禁止上传,除非必要

file_uploads = Off


启用SQL安全模式

sql.safe_mode = On


避免打开远程文件

allow_url_fopen = Off


3、php的%00截断的原理是什么?


php的%00截断是php 5.2.x 版本的漏洞,当url中带有%00字符时,会自动截断后面的字符。


4、webshell检测,有哪些方法


静态检测

通过匹配特征码、特征值、危险函数来查找webshell。


动态检测

webshell被执行时表现出来的特征,称为动态特征。通过将webshell特有的http请求/响应做成特征库,然后加到IDS中去检测所有的http请求,进行动态检测。


日志检测

通过webshell在web网站的日志中的访问数据和数据提交记录,来建立请求模型,从而检测出异常文件。


语法检测

通过语法语义分析的形式,进行代码的剥离、注释,变量、函数、字符、语言结构的分析,来实现关键危险函数的捕捉。


统计学检测

由于webshell通常经过伪装(加密、编码等变换),会表现出一些特别的统计特征,通过这些统计特征建立学习模型,进行检测。


NeoPI使用的检测方法如下:

.信息熵(Entropy):通过使用ASCII码表来衡量文件的不确定性;

.最长单词(LongestWord):最长的字符串也许潜在的被编码或被混淆;

.重合指数(Indexof Coincidence):低重合指数预示文件代码潜在的被加密或被混效过;

.特征(Signature):在文件中搜索已知的恶意代码字符串片段;

.压缩(Compression):对比文件的压缩比.


5、php的LFI(本地包含漏洞)原理是什么?写一段带有漏洞的代码。手工的话如何发掘?如果无报错回显,你是怎么遍历文件的?


php的LFI的漏洞:允许用户通过在URL中包括一个文件


代码1:http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go into 192.168.1.101/bWAPP/flfi.php?language=/etc/passwd


代码2(安全级别高,无法查看PHP文件内容)

http://192.168.1.101/bWAPP/rlfi.php?language=php://filter/read=convert.base64-encode/resource=/etc/passwd


代码3(通过执行注入PHP代码来利用LFI漏洞)

http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go


通过…/ , /从目录中直接读取文件的内容


CSRF

1、CSRF漏洞的本质是什么?


跨站请求伪造,是通过劫持其他用户身份信息,进行恶意操作。


2、防御CSRF都有哪些方法,JAVA是如何防御CSRF漏洞的,token一定有用么?


防御方法:

验证HttpRefer字段

在请求地址中添加token并验证

在Http头中自定义属性并验证


token不一定有用

基于token的身份验证流程如下:

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据


HTML5

1、说说HTML5有哪些新的安全特性


iframe沙箱:HTML5为iframe元素增加了sandbox属性防止不信任的Web页面执行某些操作。

CSP内容安全策略:XSS通过虚假内容和诱骗点击来绕过同源策略。

XSS过滤器:Chrome、Safari这样的现代浏览器也构建了安全防御措施,在前端提供了XSS过滤器。


2、HTML5白名单要有哪些标签


见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/HTML5/HTML5_element_list


JAVA

1、你都了解哪些java框架?


常用的10大框架:SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro


2、java的MVC结构都是做什么的,数据流向数据库的顺序是什么?


M:model层,数据层。 V:View,视图层,为用户提供可视化界面,并与之交互。 C:Control,控制器层,接受用户的输入,并通过调用视图层和数据层去完成用户的需求。

数据->数据库:用户通过View层填写数据,通过控制器层发送到系统后端,后端将数据传给moel层,最后流向数据库。


3、了解java沙箱吗?


JAVA沙箱的基本组成:

A·类加载体系结构

B·class文件检验器

C·内置于Java虚拟机(及语言)的安全特性

D·安全管理器及Java API


通过A、B、C的安全特性达到:保持Java虚拟机的实例和它正在运行的应用程序的内部完整性,使得它们不被下载的恶意代码或有漏洞的代码侵犯。

通过D:保护虚拟机的外部资源不被虚拟机内运行的恶意或有漏洞的代码侵犯。


4、ibats的参数化查询能不能有效的控制sql注入?有没有危险的方法可以造成sql注入?


能,SQL注入主要的是因为文本框的内容和SQL连接以后会改变SQL的语义,参数化查询就可以将这些内容独立作为参数,本身的语句不会改变。


版权声明:本文为CSDN博主「墨禾mohe」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_30384029/article/details/83863124