计算机网络
OSI模型和TCP/IP体系结构?
-
OSI模型:从下到上为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
-
TCP/IP结构:从下到上为网络接口层,网际层,传输层,应用层
TCP/IP的三次握手和四次挥手过程,且为什么要这样?
三次握手
客户端给服务器发送数据:
- 客户端给服务器发送SYN包,询问是否可以进行连接
- 服务器若可以进行连接,回复SYN+ACK包
- 客户端回复一个ACK包,连接建立
四次挥手
处于连接状态的客户端给服务器发送数据:
- 客户端首先给服务器发送一个FIN包,表示要关闭连接。
- 服务器接收到FIN包后,给客户端发送一个ACK包,代表已经接受了关闭连接的请求,但是未传输完的数据仍要继续传输。
- 当传输数据传输完之后,服务器给客户端发送一个FIN包。
- 客户端给服务器回复一个ACK包,中止连接。
为什么这样?
为了建立可靠传输,解决信道不可靠的问题。
私有IP的地址划分
分为三类:
- A类:10.0.0.0-10.255.255.255
- B类:172.16.0.0-172.31.255.255
- C类:192.168.0.0-192.168.255.255
TCP和UDP的区别和优缺点
UDP:
- 基于无连接的
- 不可靠的,只是发送数据包,不考虑对方能否接受到
- 用于即时性要求很高的场合
TCP: - 面向连接的,可靠的
- 发送字节流,对方一定要接收到且不能保证丢失数据。
- 常用:流量控制、超时重传、拥塞控制等机制来保证可靠传输。
- 建立连接需要消耗时间和资源。
正向Shell和反向Shell的区别?
- 正向shell:攻击者连接被攻击机器,攻击者处于内网,被攻击机器处于外网的情况。(上传webshell,进行连接)
- 反向shell:被攻击者主动连接攻击机器,被攻击者处于内网,攻击者处于外网。(反弹shell)
正向代理和反向代理的区别?
- 正向代理:客户端将数据发送给代理,代理把数据发送给服务器。
- 服务器无法感知客户端是谁。
- 反向代理:假设内网有一台web服务器,客户端无法直接访问内网。那么,我们可以将web服务器反向代理到外网的nginx服务器,此时客户端访问nginx服务器,就访问到web资源了。
- 客户端无法感知服务器是谁。
- 提高服务器的安全性。
常见防火墙种类
- Web应用防火墙
- 包过滤防火墙
- 代理防火墙
- 状态检测防火墙
HTTP和HTTPS的区别?
- HTTPS协议需要用到证书(公钥和私钥),HTTP不需要。
- HTTP信息明文传输,HTTPS信息加密传输。
- HTTP端口80、HTTPS端口443。
- HTTPS协议基于SSL+HTTP协议比HTTP更加安全。
HTTPS工作原理?(非对称加密和对称加密结合)
- 客户端发起https请求,连接到服务器的443端口
- 服务端生成证书(私钥和公钥)
- 传送服务器的公钥
- 客户端解析公钥,验证公钥是否有效,如果无效,提示证书存在问题,如果有效,那么客户端生成一个随机值(私钥)用服务器的公钥加密,传输到服务器上。
- 服务器将加密后的值用自身的私钥解密,得到客户端的私钥,然后将明文通过客户端的私钥进行对称加密。
- 服务器将密文进行传输
- 客户端用自己之前生成的私钥解密传过来的信息,获取了解密后的内容。
在上述过程中,用非对称加密传输密钥,确保安全性。用对称加密来加解密数据,速度快。
系统(Windows及Linux)方面常问
如何手工判断对方操作系统?
- 修改url参数,改成大写,正常为Windows,不正常为Linux
- ping服务器,看TTL值
- 看数据包,如果数据包中存在IIS,肯定Windows。
Windows和Linux查看开放端口和运行服务的命令?
- Windows:
- 开放端口:netstat -ano | findstr 关键字
- 查看正在运行的服务:net start
- Linux:
- 开放端口:netstat -tuln | grep 关键字
- 查看正在运行/不运行的服务:service --status-all | grep +/-
Windows或Linux被植入后门文件,讲一下你的排查点
- 查看日志
- 查看是否存在异常用户
- 查看异常/隐藏进程
- 查看系统文件的时间是否被改动、系统文件的内容是否被改动
- 检查网络
- 检查计划任务
- 检查后门程序
- 检查系统服务
- ...
Web安全
OWASP TOP 10
- 注入(SQL注入、表达式注入等)
- 失效的身份验证
- 无验证
- 验证脆弱
- 验证可绕过
- 敏感数据泄露
- 身份证、电话号码、姓名、学号、密码等泄露
- 抓包,后端将全部内容返回,前端只取了一部分
- XML/XXE
- 外部实体引入导致RCE等漏洞
- 失效的访问控制
- 越权、未授权访问
- 配置不当导致漏洞
- IIS PUT漏洞
- XSS
- 用户可以对页面内容进行改变,写入恶意JS语句
- 反序列化漏洞
- 用户根据序列化字符串,构造恶意对象,当反序列化之后,就会调用魔术方法,从而导致RCE、信息泄露、getshell等
- 第三方组件、框架漏洞
- Weblogic、Shiro、Spring、Log4j等组件出现漏洞,导致网站被入侵。
- 不足的日志和监控
- 日志收集不足、缺陷检测时间过长导致黑客入侵无法被溯源反制。
SQL注入原理的种类?防御?预编译原理?
原理?
服务器在接收客户端的数据时,由于没有对数据进行过滤,导致未过滤的数据被拼接到SQL语句中并执行。
种类?
- 数字型
- 字符型
- 联合注入
- 布尔注入
- 延时注入
- 报错注入
- 二次注入
- 堆叠注入
- 宽字节注入
- HTTP头注入
修复?
- 预编译
- 正则表达式过滤
- 开启魔术引号,对特殊字符加转义
- 装WAF
预编译原理?
将一次SQL语句的执行分为两次交互完成:
- 先发送SQL语句的模板,对于参数部分,用占位符代替,例如Mybatis中用?
- 对于客户端传递过来的参数传入到模板中,仅仅被当作是字符串执行,因此杜绝了SQL注入的产生。
XSS的种类有哪些?区别?修复?
种类?
- 存储型
- 反射型
- DOM型
原理/区别?
XSS就是js代码。XSS本质就是输入和输出。用户可以控制输入的内容,服务器如果对输入的内容没有经过任何过滤,那么用户就可以构造恶意XSS从而对html页面进行改变,对用户进行攻击。
-
存储型:将js代码存储到了数据库中,当用户访问了带有恶意js代码的页面时,js代码就会从数据库中调取出来,从而被加载到页面中执行。
- 存储型比反射型危害更大,因为会一直存储在数据库中。
- 只要用户访问了恶意页面,就会收到攻击。
- 不需要用户的配合。
- 常出现在用户留言板等业务中
-
反射型:常出现在url中,攻击者构造带有XSS的恶意链接,欺骗用户点击,从而导致XSS。
- 反射型XSS一般都是一次性的
- 需要用户配合(配合社工)
- 用户正常访问不会受到XSS。
-
DOM型:上述提到的输入,处理,输出都是在前端完成。
修复?
- 开启http-only,防止cookie盗取
- 过滤JS标签
- 对于输入的数据进行转义等(魔术引号)
- 装WAF等
XSS,CSRF,SSRF区别?
- XSS:跨站脚本攻击
- CSRF:跨站请求伪造
- SSRF:服务器端请求伪造
XSS:服务器对于用户的输入过滤不严,导致用户可以向html页面注入恶意js代码,当用户访问页面时,浏览器就会解析恶意js代码,从而导致危害。(突出点在于js代码)
CSRF:胁持用户浏览器强制做出某些行为。(突出点在于行为,发送数据包)在这个过程中,攻击者会利用用户对已知站点的信任,在用户不知情的状态下,执行相关行为。
SSRF:服务器代替攻击者去请求url中的数据,如果url为内网地址,那么攻击者就相当于挟持了服务器的身份来访问内网的内容。
什么是XXE漏洞?
XXE即XML外部实体注入漏洞,当应用程序解析XML输入时,没有禁用外部实体的加载,导致可以加载恶意外部文件,造成命令执行、SQL注入、信息泄露、带外执行等。
PHP反序列化?
攻击者根据类和序列化字符串,构造恶意对象,当反序列化之后,就会调用魔术方法,从而导致RCE、信息泄露、getshell等
PHP反序列化通常都会使用魔术方法,当序列化字符串进行反序列化时,就会调用相应的魔术方法,从而导致RCE等。
如何构造?从源码中找到类,修改属性,通过PHP的serialize方法来产生序列化字符串。
Java反序列化?
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,其
作用把对象转换成字节流,便于保存或者传输,而ObjectInputStream类的
readObject()方法用于反序列化,作用就是把字节流还原成对象。
Shiro反序列化?
shiro反序列化主要是Apache shiro提供了一个remember的一个功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用,而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其bs64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了),再进行bs64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。
如何发现某系统采用了Shiro框架?
手工:
尝试去登录,如果登录失败发现返回包存在rememberMe=deleteMe字段,那么就基本可以判断是Shiro框架。
工具:
- goby
- 网络引擎
- shiroscan
- 插件
原理:
- 未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包setCookie里也没有deleteMe字段
- 登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段
- 不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段
- 勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段
业务逻辑漏洞的种类?
- 越权
- 未授权
- 支付金额修改
- 条件竞争
- 任意用户注册
- 任意用户登录
- 短信轰炸机
- ...
给你一个登录框,思路?
- SQL注入
- XSS
- 任意用户注册
- 任意用户登录
- js分析,查看代码逻辑,查看是否存在信息泄露?
- 抓包
- 验证码爆破、轰炸、重用
- 弱口令,构造社工字典,爆破
- 未授权访问
- 看返回包返回的数据,是否存在信息泄露?
- 社会工程学
- ...
CDN和DNS区别?
CDN:内容分发网络,主要作用就是让用户就近访问网络资源,提高响应速度,降低网络拥堵。
DNS:主要作用就是将域名翻译成ip地址。
CDN检测和绕过思路?
检测?
- 超级ping
- 查看返回包,是否存在域名为cdn.xxx的文件,如果存在就是从CDN节点所请求的缓存资源。
绕过?
- 子域名绕过
- 国外ping
- 采用CDN脚本进行全网扫描
- 内部邮件泄露(反向连接的手段)
- ...
常见的中间件漏洞?
- IIS:PUT漏洞、短文件名漏洞
- Apache:解析漏洞、目录遍历等
- Redis:未授权访问漏洞等
- Nginx:解析漏洞、目录遍历、目录穿越等
- Shiro:反序列化漏洞等
- Tomcat:RCE漏洞、war后门文件部署等
- JBoss:反序列化漏洞、war后门文件部署等
- WebLogic:反序列化漏洞、war后门文件部署等
- ...
WAF绕过的手法?
信息搜集:
- 延迟,防止CC攻击检测
- 代理池
- 修改UA头等绕过黑名单,符合白名单
漏洞发现: - 同上
漏洞利用: - 参考各种Web漏洞的利用绕过方式
权限控制: - 代码方面的免杀
- 传参绕过
- 变量覆盖
- 源码加密
- 异或绕过
- ...
- 行为方面的免杀
- 根据工具的流量特征,进行二次开发,从而达到免杀
命令无回显怎么办?
- 延时判断
- DNSLog外带
- 监听http请求
- 写webshell
- ...
3389端口无法连接的情况?
- 端口改了
- 超过了服务器最大连接数
- 服务器在内网
- 端口关了
- 管理员设置权限,只允许指定用户登录
- 防火墙
常问的端口信息
- 21:FTP文件传输协议
- 22:SSH远程连接
- 23:TELNET远程登录
- 25:SMTP邮件服务
- 53:DNS域名系统
- 80:HTTP超文本传输协议
- 443:HTTPS安全超文本传输协议
- 1433:MSSQL
- 3306:MYSQL
- 3389:windows远程桌面服务端口
- 7701:weblogic
- 8080:TCP,HTTP协议代理服务器:Apache-tomcat默认端口号
- 6379:redis
- ...
什么是业务逻辑漏洞?说出至少三种业务逻辑漏洞。
逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误。挖掘业务逻辑漏洞,需要对业务有深刻的理解。
拿支付漏洞来说,简单思路有价格修改,支付状态修改,数量最大值溢出,订单替换,支付接口替换,四舍五入,越权支付等等。
拿登录来说,修改状态信息,密码修改跳过验证等等。
密码找回漏洞中存在:1)密码允许暴力破解、2)存在通用型找回凭证、3)可以跳过验证步骤、4)找回凭证可以拦包获取。
身份认证漏洞中最常见的是:1)会话固定攻击、2)Cookie 仿冒。只要得到Session 或 Cookie 即可伪造用户身份。
验证码漏洞中存在:1)验证码允许暴力破解、2)验证码可以通过Javascript 或者改包的方法来进行绕过。
拿到webshell不出网情况下怎么办?
探测出网协议、如dns带外,icmp等
PHP代码执行/命令执行的危险函数
- 代码执行:eval()、call_user_func()等
- 命令执行:system()、shell_exec()、exec()、passthru()等
SSRF禁用 127.0.0.1 后如何绕过,支持哪些协议?
- 缩写绕过
- 进制绕过
- dns重绑定
- 301重定向
- ...
.SVN/GIT源代码泄露?
在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息
使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
为何一个mysql数据库的站,只有一个80端口开放?
- 3306端口已经更改
- 站库分离,3306端口不对外开放。
注入时可以不使用and 或or 或xor,直接order by开始注入吗?
and/or/xor,前面的1=1、1=2步骤只是为了判断是否为注入点,如果已经确定是注入点那就可以省去这个步骤。
在有shell的情况下,如何使用xss实现对目标站的长久控制?
在后台的首页文件加一段js代码,将管理员的cookie发送到攻击者的服务器当中。这样的话,只要管理员不登出,那么攻击者就可以以管理员身份登录。
或者在登录界面加一段js代码,如果用户登录成功,那么就将用户名和密码发送到恶意服务器当中。(表单劫持)
目标站无防护,上传图片可以正常访问,上传脚本格式访问则403.什么原因?
原因很多,有可能web服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过。
access 扫出后缀为asp的数据库文件,访问乱码。如何实现到本地利用?
迅雷下载,直接改后缀为.mdb。
文件包含Getshell思路?
- 伪协议绕过
- 日志包含绕过
- 远程包含绕过
- ...
文件上传Getshell思路
- 前端绕过
- 短标签绕过
- Content-Type值绕过
- .user.ini绕过
- 日志包含绕过
- ...