0x00 前言
最近参加了一场面试,平时感觉自己学的还挺不错的,但是在面试的时候才意识到到原来自己还有那么多东西不够了解。
这其中包括以前只是听过并没有深入学习了解的东西,同时也包括以前很了解但是现在因为长时间没有去使用碰触导致已经遗忘的东西,所以本篇文章我想记录一下这次面试过程中哪些自己不太了解的知识点。
PS:
1、面试中有的问题现在已经记得不是很深刻了,所以我想起来多少就记录多少咯。
2、因为引用的文章内容都比较多,所以本文只提到了一些概念性的东西,关于每个知识点具体的详情有想看的小伙伴就自己在参考资料里面去找吧,嘿嘿 [狗头保命]
0x01 SSRF和CSRF的概念以及区别
这个知识点就属于以前有了解,但是平时很少接触以至于遗忘的类型,同时在笔试的时候就有提到这个点,笔试结束后我还特意查了一下,但是面试的时候却没有答上来,有点尴尬,下面就引用CSDN和知乎里两篇文章的描述,此处引用的文章地址为本文参考资料1和2。
CSRF
CSRF又称跨站请求伪造,XSS就是CSRF中的一种。二者区别是XSS利用的是用户对指定网站的信任,CSRF利用是网站对用户浏览器的信任。
简单来说,CSRF是通过第三方网站伪装成正常用户登录目标网站,并以正常用户的身份对用户账号进行操作,以达到目的,CSRF攻击原理流程如下图。
防御:
1、增加验证码机制,增加带有大量噪点的验证码,杜绝代码能够识别的简单验证码,当然了也经常被绕过。
2、验证referer,采用同源政策,referer记录着数据包的来源地址,来判断请求的合法性,但是这个可以伪造。
3、使用Token,令牌是一种将表单value的加密算法生成不同的加密结果,在服务器端进行验证。
4、在访问登录过一个网站,点击退出账户。
总结:
一次CSRF攻击成功实施,至少需要4个条件:
1、被害用户已经进行过WEB身份认证,并留有Cookie
2、新提交的请求无需重新进行身份认证或确认机制
3、攻击者了解WEB请求的参数构造
4、通过社交工程学诱使用户触发攻击的指令
SSRF
SSRF又名服务端请求伪造攻击,如果把CSRF理解成客户端伪造请求攻击,它是利用用户本地的Cookie骗过服务器端的验证达到目的,而SSRF则是利用服务器天然能够访问内部网络的特点,进行攻击。
由此可以得出,SSRF的受害对象主要是一些服务器所连接的一些内网设备,如内网的应用程序,通过file协议获得内部网络的资料等。SSRF攻击常见于一些允许以URL作为参数,且未对URL进行过滤的服务器。
如上图,若URL是正常的第三方服务器,则URL会过滤通过。若URL是带有命令操作的服务器端A,且绕过了服务器端A的过滤,则服务器端A会执行URL带有的命令,并将结果返回会客户端,由此一次SSRF攻击成功。
防御:
从以上我们可以得出,该漏洞产生的原因是由于服务端对资源进行请求的时候对URL的验证出现了纰漏,所以我们的防护策略主要是围绕URL的过滤。
1、将URL进行解析转化成IP,并使用正则表达式表示内网网址,并以此进行URL过滤。
2、建立URL白名单,只允许白名单上内容通过过滤。
3、建立内网IP黑名单,阻止对该IP的请求。
4、对返回内容进行过滤,减少敏感内容暴露。
5、禁止不需要的协议,只允许http和https协议的请求,减少file等协议的问题。
总结:
一次成功的SSRF需要2个条件:
1、攻击者知道服务器端的内网地址
2、服务器端未对请求URL进行过滤或过滤不完全
0x02 SQL注入的类型以及防御
类型
这里采用看雪的一篇文章,此处引用的文章地址为本文参考资料3。
1、常见的sql注入按照参数类型可分为两种:数字型和字符型。
当发生注入点的参数为整数时,比如 ID,num,page等,这种形式的就属于数字型注入漏洞。同样,当注入点是字符串时,则称为字符型注入,字符型注入需要引号来闭合。
2、也可以根据数据库返回的结果,分为三种:回显注入、报错注入、盲注。
回显注入:可以直接在存在注入点的当前页面中获取返回结果。
报错注入:程序将数据库的返回错误信息直接显示在页面中,虽然没有返回数据库的查询结果,但是可以构造一些报错语句从错误信息中获取想要的结果。
盲注:程序后端屏蔽了数据库的错误信息,没有直接显示结果也没有报错信息,只能通过数据库的逻辑和延时函数来判断注入的结果。根据表现形式的不同,盲注又分为based boolean和based time两种类型。
3、按照注入位置及方式不同分为以下几种:post注入,get注入,cookie注入,盲注,延时注入,搜索注入,base64注入,无论此种分类如何多,都可以归纳为以上两种形式。
防御
这里采用知乎上的一个问答,此处引用的文章地址为本文参考资料4。
问:
如何从根本上防止 SQL 注入?
SQL注入导致的安全问题数不胜数,为什么这么多年来同样的问题一再发生?
如果是因为SQL脚本拼接的原因,为什么不在新的实现中采用api调用的方式来杜绝漏洞?
答:
SQL注入并不是一个在SQL内不可解决的问题,这种攻击方式的存在也不能完全归咎于SQL这种语言,因为注入的问题而放弃SQL这种方式也是因噎废食。首先先说一个我在其他回答中也曾提到过的观点:没有(运行时)编译,就没有注入。
SQL注入产生的原因,和栈溢出、XSS等很多其他的攻击方法类似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程中,超越了数据本身,成为了SQL语句查询逻辑的一部分,然后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期之外的动作。
所以从根本上防止上述类型攻击的手段,还是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来说,被执行的恶意代码是通过数据库的SQL解释引擎编译得到的,所以只要避免用户输入的数据被数据库系统编译就可以了。
至于如何避免用户输入的数据被数据库系统编译,我觉着可以参考CSDN上的一篇文章,详见本文参考资料5,该文具体说了以下内容:
1、escape处理
2、使用预编译语句
3、使用存储过程
4、检查数据类型
5、使用安全函数
0x03 XXE攻击的概念
这个我不确定当时面试有没有问,不过刚才突然想到了,而且自己对XXE攻击也不是很了解,所以就简单记一下吧,此处引用的文章地址为本文参考资料6。
在介绍xxe漏洞前,先学习温顾一下XML的基础知识。
XML被设计为传输和存储数据,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
由于xxe漏洞与DTD文档相关,因此重点介绍DTD的概念。
文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于XML文档中(内部引用),也可作为一个外部引用。
实体可以理解为变量,其必须在DTD中定义申明,可以在文档中的其他位置引用该变量的值。实体根据引用方式,还可分为内部实体与外部实体,xxe漏洞主要是利用了DTD引用外部实体导致的漏洞。
XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。如果是linux下,可以读取/etc/passwd等目录下敏感数据。
XXE的漏洞检测:
1、检测XML是否会被成功解析
2、检测服务器是否支持DTD引用外部实体,如果支持引用外部实体,那么很有可能是存在xxe漏洞的。
XXE的修复与防御:
1、使用开发语言提供的禁用外部实体的方法
2、过滤用户提交的XML数据
0x04 DDOS的类型
说到DDOS,我的第一反应就是TCP SYN泛洪攻击,对于其他的类型却了解很少,所以这里也同样记录一下,此处引用的文章地址为本文参考资料7。
首先有两类最常见的 DDoS 攻击,一是资源耗尽型;二是导致异常型,接下来就概要的说一下。
1、SYN Flood攻击即洪水攻击是通过TCP建立3次握手连接的漏洞产生,主要通过发送源IP虚假的SYN报文,使目标主机无法与其完成3次握手,因而占满系统的协议栈队列,致使资源得不到释放,进而达成拒绝服务的目的,SYN Flood攻击是移动互联网中DDoS攻击最主要的形式之一。
2、ACK Flood是对虚假的ACK包,目标设备会直接回复RST包丢弃连接,所以伤害值远不如SYN Flood。属于原始方式的DDoS攻击。
3、UDP Flood是使用原始套接字伪造大量虚假源IP的UDP包,主要以DNS协议为主。
4、ICMP Flood 即Ping攻击,是一种比较古老的方式。
5、CC攻击即ChallengeCollapsar挑战黑洞,主要通过大量的肉鸡或者寻找匿名代理服务器,模拟真实的用户向目标发起大量的访问请求,导致消耗掉大量的并发资源,使网站打开速度慢或拒绝服务。现阶段CC攻击是应用层攻击方式之一。
6、DNS Flood主要是伪造海量的DNS请求,用于掩盖目标的DNS服务器。
7、慢速连接攻击是针对HTTP协议,以slowloris攻击为起源,然后建立HTTP连接,设置一个较大的传输长度,实际每次发送很少字节,让服务器认为HTTP头部没有传输完成,因此数据传输越多就会造成连接资源耗尽。
8、DOS攻击利用一些服务器程序的bug、安全漏洞、和架构性缺陷,然后通过构造畸形请求发送给服务器,服务器因不能判断处理恶意请求而瘫痪,造成拒绝服务。
0x05 跨域请求的概念
以前记得在哪里有看到过这个,但是现在已经忘的差不多了,因此再复习复习,此处引用的文章地址为本文参考资料8。
同源是指相同的协议、域名、端口,三者都相同才属于同源。同源策略浏览器出于安全考虑,在全局层面禁止了页面加载或执行与自身来源不同的域的任何脚本,站外其他来源的脚本同页面的交互则被严格限制。
跨域由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。
看看哪些情况下属于跨域访问:
0x06 Linux的日志文件位置
讲道理,在面试前几天我在搭建一个三层靶机的环境,当时还查过Linux的日志文件位置的文章,但是在面试的时候却忘掉了,这就有点难受了,所以再记录一下吧,此处引用的文章地址为本文参考资料9。
/var/log/messages :常规日志消息
/var/log/boot :系统启动日志
/var/log/debug :调试日志消息
/var/log/auth.log :用户登录和身份验证日志
/var/log/daemon.log :运行squid,ntpd等其他日志消息到这个文件
/var/log/dmesg :Linux内核环缓存日志
/var/log/dpkg.log :所有二进制包日志都包括程序包安装和其他信息
/var/log/faillog :用户登录日志文件失败
/var/log/kern.log :内核日志文件
/var/log/lpr.log :打印机日志文件
/var/log/mail.* :所有邮件服务器消息日志文件
/var/log/mysql.* :MySQL服务器日志文件
/var/log/user.log :所有用户级日志
/var/log/xorg.0.log :X.org日志文件
/var/log/apache2/* :Apache Web服务器日志文件目录
/var/log/lighttpd/* :Lighttpd Web服务器日志文件目录
/var/log/fsck/* :fsck命令日志
/var/log/apport.log :应用程序崩溃报告/日志文件
/var/log/syslog :系统日志
/var/log/ufw :ufw防火墙日志
/var/log/gufw :gufw防火墙日志
0x07 Linux的各目录含义
这个是以前大一大二的时候学的了,现在只记住了平时经常用的那几个目录,所以当时感觉回答的并不是很好,因此这里也简单记录一下,此处引用的文章地址为本文参考资料10。
/bin 重要的二进制 (binary) 应用程序
/boot 启动 (boot) 配置文件
/dev 设备 (device) 文件
/etc 配置文件、启动脚本等 (etc)
/home 本地用户主 (home) 目录
/lib 系统库 (libraries) 文件
/media 挂载可移动介质 (media)
/mnt 挂载 (mounted) 文件系统
/opt 提供一个供可选的 (optional) 应用程序安装目录
/proc 特殊的动态目录
/root root (root) 用户主文件夹,读作“slash-root”
/sbin 重要的系统二进制 (system binaries) 文件
/srv 服务(serve)文件
/sys 系统 (system) 文件
/tmp 临时(temporary)文件
/usr 包含绝大部分所有用户(users)都能访问的应用程序和文件
/var 经常变化的(variable)文件,诸如日志或数据库等
0x08 总结
暂时印象较深的也就想到这些了,说实话,虽然看着这篇文章记下了很多东西,但是我感觉自己脑子里还是没有记住多少东西,这些东西还是要经常去用才能记得住呀,平时不去用不去碰真的太容易忘了。通过这次面试也认识到自己的很多不足,所以不管最后面试结果怎么样,自己有收获就好,毕竟就像新东方唐叔说的:能力的提升不在于你做了多少道题,而在于你做了多少总结。
我觉着这句话再衍生一下就是能力的提升在于总结两个字,也就是说我自己犯了这些错误,有没有去总结,如果总结又总结了多少?而我觉着这些总结正是单属于我自己的宝贵财富,好了,不瞎扯了,感觉马上都变成鸡汤了 [ 笑哭 ]
参考资料:
1、https://zhuanlan.zhihu.com/p/28657325
2、https://blog.csdn.net/pygain/article/details/52912521
3、https://www.kanxue.com/book-6-110.htm
4、https://www.zhihu.com/question/22953267
5、https://blog.csdn.net/hitwangpeng/article/details/45534787
6、https://thief.one/2017/06/20/1/
7、http://blog.itpub.net/69925937/viewspace-2647388/
8、https://blog.csdn.net/haozhoupan/article/details/51151656
9、https://blog.csdn.net/qq_33571718/article/details/78373653
10、https://www.jianshu.com/p/43f6785e0589
感谢以上文章的作者,如有侵权,烦请于我的公众号TeamsSix进行私信联系。