前言
Hello大家好,今天我继续整理昨天后续的面试题。整理之前,和大家聊聊昨天面试的感受,先是自我介绍,我简单介绍了一下目前所在的学校,然后讲了一下我参加过的比赛,目前在学校还要上多久课,大概什么时候能外出实习。大概就是这些,自我介绍的时候其实还是有点紧张的,这是我的第二个面试,之前也面试过一次,当时问的技术问题基本答不出来,这次,稍微好些,但也有挺多回答的不是很好,一方面是自身技术有限,另一方面就是面对面试还是有些惧怕,会感到紧张,有些明明知道,但是仍然回答的不是很好。本来想着暑假的时候就进行简历的投递,但为什么没有去进行呢?
有以下两个方面原因,大家可以听听,不知道大家是不是和我有一样的感受。首先,是我暑假正在学习十大常见漏洞,其实也都学的差不多了,大概暑假过了一个月,也都有打过靶场,但我总感觉学的不够,所以没有尝试去投递简历。其次,就是我本身对于面试还是有些恐惧。基于这两个原因,我在暑假期间迟迟没有进行简历的投递。直到了开学,我觉得必须得进行下一步,这才开始了进行投简历。之前听过一句话:先完成,在完美。我感觉这句话就挺适合的我,哈哈哈。因为我感觉我的执行力并不是很高,总是想要先拥有有做好的能力再去做,这样往往就导致计划难以向前继续推进。聊到这里就先停止了,哈哈哈,继续进行面试题的整理。
面试题
今天整理以下几个面试题目:
-
csrf与xss的区别?
-
Django框架漏洞你了解吗?,说一个django框架漏洞。(问这个是因为我简历里写了之前我使用django搭建网站的经历,所以面试官对这个做了提问)
-
sql注入你是怎么绕过的?
-
ssrf相关协议有哪些?
以下内容是我经过网络搜索整理得出的回答,以及我自己有的面试资料得出的回答,如果有什么问题解答的有问题,欢迎大家在评论区指出。
一、csrf与xss的区别?
- xss:跨站脚本攻击;
- csrf:跨站请求伪造脚本攻击;
- 区别:xss是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句执行。csrf时服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cokkie信息伪造用户请求发送值服务。
想法:这里我回答的时候大概讲了这两个怎么去利用,但是没有讲出两者之间的区别,所以有点答非所问,之前我也利用过类似csrf的漏洞提交了公益src,就是oauth认证账号缺陷接管漏洞,不知道大家了解过吗?
二、Django框架漏洞你了解吗?说一个django框架的漏洞。
Django<2.0.8任意url跳转漏洞(CVE-2018-14574)
漏洞详情:
Django默认配置下,如果匹配上的url路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。(又配置项中的django.middleware.common.CommonMiddleware、APPEND_SLASH来决定)。
在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。
该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。
防御方法:
1.白名单严格控制要跳转的域名。
2.限制referer、添加token,这样可以避免恶意用户构造跳转链接进行散播。
这里内容参考:
Django任意URL跳转漏洞(CVE-2018-14574)-CSDN博客https://blog.csdn.net/qq_68163788/article/details/140064953
想法:当时这个我说尚未了解,如果再让我回答,我会说,了解过,我了解过django框架任意url跳转漏洞。低于Django2.0.8版本的会出现此漏洞,该漏洞导致原因是在django默认配置下,如果匹配上的路由中最后一位没有/,那么Django默认会跳转到带/的请求中去。比如在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意url跳转漏洞。
三、SQL注入你是怎么绕过的?
1、过滤关键字
过滤关键字应该是最常见的过滤了,因为只要把关键字一过滤,你的注入语句基本就不起作用了。
绕过方法:
(1)最常用的绕过方法就是用**//,<>,分割关键字
sele<>ct
se/**/lect
(2)根据过滤程度,有时候还可以用双写绕过
seselectlect
(3)既然是过滤关键字,大小写应该都会被匹配过滤,所以大小写绕过一般是行不通的。
(4)有时候还可以使用编码绕过
url编码绕过、16进制绕过、ASCII编码绕过
2.过滤逗号
(1)简单注入可以使用join方法绕过
原语句:
union select 1,2,3
join语句:
union select * from (select 1)a join (select 2)b join (select 3)
(2)对于盲注的那几个函数substr(),mid(),limit
substr和mid()可以使用from for的方法解决
substr(str from pos for len) //在str中从第pos位截取len长的字符
mid(str from pos for len)//在str中从第pos位截取len长的字符
limit可以用offset的方法绕过
limit 1 offset 1
使用substring函数也可以绕过
substring(str from pos) //返回字符串str的第pos个字符,索引从1开始
3、过滤空格
空格被过滤有以下几种方法绕过:
(1)双空格
(2)/**/
(3)用括号绕过
(4)用回车代替 //ascii码为chr(13)&chr(10),url编码为%0d%0a(1)双空格
(2)/**/
(3)用括号绕过
(4)用回车代替 //ascii码为chr(13)&chr(10),url编码为%0d%0a
4、过滤等号
=换成like/rlike/regexp
5、过滤大于小于号
盲注中我们经常需要用到比较符,如果他们被过滤了,我们可以用以下几种方法绕过:
1)greatest(n1,n2,n3,...) //返回其中的最大值
(2)strcmp(str1,str2) //当str1=str2,返回0,当str1>str2,返回1,当str1<str2,返回-1
(3)in 操作符
(4)between and //选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
6、等价函数绕过
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
或者: substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1
以上内容参考:
想法:当时说的也不好,下次上面内容能记多少说多少。
四、ssrf相关协议有哪些?
SSRF常用的协议有(这里只是列举了四种个人认为常见的,当然不止有这四种可用):
- file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容
- dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
- gopher协议:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
- http/s协议:探测内网主机存活
想法:回答到这里的时候脑袋比较蒙了,因为前面问了好几个我回答的支支吾吾的,这个之前明明知道,但是话到嘴边,愣是说不出来。
结束
大概能想起来的面试题就这些,当时也没记录下来,所以目前暂时就这些,看看能不能想起来,明天再进行补充。今天看了以下昨天的文章数据,有一些朋友关注了我,非常感谢大家的支持,后续有什么我学到知识会继续分享。